公司在使用webAPI+AngularJs+SlcikGrid进行产品开发,自己也是初学Angular,就做了一个Demo,实现增删改功能,希望可以帮助大家。
界面如同所示:
数据库一张单表很简单,如图所示:
所有JS代码如下:
1 <!DOCTYPE html>
2 <html xmlns="http://www.w3.org/1999/xhtml" ng-app="infoApp">
3 <head>
4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
5 <script src="../Scripts/angular.min.js"></script>
6 <title></title>
7 <style type="text/css">
8 .textCenter {
9 text-align: center;
10 }
11 </style>
12 </head>
13 <body>
14 <div data-ng-controller="userController">
15 <div>
16 <table border="1">
17 <tr class="textCenter">
18 <td style=" 100px;">姓名</td>
19 <td style=" 60px;">年龄</td>
20 <td style=" 60px;"></td>
21 </tr>
22 <tr class="textCenter" data-ng-repeat="user in userList">
23 <td>
24 <input type="text" data-ng-model="user.Name" data-ng-click="getUser(user)" data-ng-keyup="modifyUser(user)" />
25 </td>
26 <td>
27 <input type="text" data-ng-model="user.Age" data-ng-click="getUser(user)" data-ng-keyup="modifyUser(user)" />
28 </td>
29 <td>
30 <input type="button" data-ng-click="delete(user.UserID,$index)" value="删除" />
31 </td>
32 </tr>
33 </table>
34 </div>
35
36 <div>
37 <fieldset>
38 <legend>人员详细信息</legend>
39 Name:<input type="text" data-ng-model="nowUser.Name" />
40 Age:<input type="text" data-ng-model="nowUser.Age" />
41 </fieldset>
42 </div>
43
44 <div>
45 <fieldset>
46 <legend>新增人员信息</legend>
47 <table>
48 <tr>
49 <td style=" 50px;">Name:</td>
50 <td>
51 <input type="text" data-ng-model="newUser.Name" /></td>
52 </tr>
53 <tr>
54 <td style=" 50px;">Age:</td>
55 <td>
56 <input type="number" data-ng-model="newUser.Age" /></td>
57 </tr>
58 <tr>
59 <td colspan="2" style="text-align: right;">
60 <input type="button" data-ng-click="addUser(newUser)" value="addUser" /></td>
61 </tr>
62 </table>
63 </fieldset>
64 </div>
65 <!-- <input type="text" data-ng-model="full_name" placeholder="Enter your full name" />-->
66 </div>
67 <script type="text/javascript">
68 var infoApp = angular.module('infoApp', []);
69 infoApp.controller('userController', ['$scope', 'userDataService',
70 function ($scope, userDataService) {
71 $scope.initailInfo = function () {
72
73 userDataService.loadData().then(function (list) {
74 $scope.userList = list.data;
75 });
76 };
77
78 $scope.$watch('nowUser.Name', function (newVal, oldVal, scope) {
79 console.log(newVal + '------' + oldVal);
80 });
81
82
83 $scope.nowUser = {};
84 $scope.delete = function (userId, index) {//note: the function name is important
85 if(confirm('are you sure delete this user?')){
86 userDataService.deleteUserById(userId).then(function (response) {
87 if (response.data === 'true') {
88 $scope.userList.splice(index, 1);
89 }
90 else {
91 console.log('delet uesr fail');
92 }
93 });
94 }
95 };
96
97 $scope.getUser = function (user) {
98 $scope.nowUser = user;
99 };
100
101 $scope.addUser = function (newUser) {
102 userDataService.addUser(newUser).then(function (response) {
103 if (response.data === 'true') {
104 $scope.userList.push(newUser);
105 }
106 else {
107 console.log('add uesr fail');
108 }
109 });
110 };
111
112 $scope.modifyUser = function (newUser) {
113 userDataService.modifyUser(newUser).then(function (response) {
114 if (response.data === 'true') {
115 $scope.userList.push(newUser);
116 }
117 else {
118 console.log('delet uesr fail');
119 }
120 });
121 };
122
123 $scope.initailInfo();
124 }]);
125
126 infoApp.factory('userDataService', ['userHttpService', '$q', function (userHttpService, $q) {
127 var serive = {};
128
129 serive.loadData = function () {
130 var defer = $q.defer();
131 userHttpService.getUser().then(function (response) {
132 defer.resolve(response);
133 });
134 return defer.promise;
135 };
136
137 serive.deleteUserById = function (userId) {
138 var defer = $q.defer();
139 userHttpService.deleteUserById(userId).then(function (response) {
140 defer.resolve(response);
141 });
142 return defer.promise;
143 };
144
145 serive.addUser = function (newUser) {
146 var defer = $q.defer();
147 userHttpService.addUser(newUser).then(function (response) {
148 defer.resolve(response);
149 });
150 return defer.promise;
151 };
152
153 serive.modifyUser = function (newUser) {
154 var defer = $q.defer();
155 userHttpService.modifyUser(newUser).then(function (response) {
156 defer.resolve(response);
157 });
158 return defer.promise;
159 };
160 return serive;
161
162 }]);
163
164 infoApp.factory('userHttpService', ['$http', function ($http) {
165 var serive = {};
166 serive.getUser = function () {
167 return $http.get('/api/user');
168 };
169
170 serive.deleteUserById = function (userId) {
171 return $http.get('/api/user/' + userId);
172 };
173
174 serive.addUser = function (newUser) {
175 return $http({
176 method: 'POST',
177 url: '/api/user/',
178 data: newUser
179 });
180 };
181
182 serive.modifyUser = function (newUser) {
183 return $http({
184 method: 'PUT',
185 url: '/api/user/',
186 data: newUser
187 });
188 };
189 return serive;
190 }]);
191 </script>
192 </body>
193 </html>
public class UserController : ApiController
{
TrainEntities dbContext = new TrainEntities();
// GET api/user
[HttpGet]
public IEnumerable<User> GetUser()
{
return dbContext.Users.ToList();
}
// GET api/user/5
[HttpGet]
public bool deleteById(int id)
{
var userModel= dbContext.Users.Find(id);
if (userModel != null)
{
dbContext.Users.Remove(userModel);
dbContext.SaveChanges();
return true;
}
return false;
}
[HttpPost]
public bool AddUser(User newUser)
{
dbContext.Users.Add(newUser);
int result=dbContext.SaveChanges();
if (result == 1)
{
return true;
}
else
{
return false;
}
}
// PUT api/user/5
[HttpPut]
public bool ModifUser(User newUser)
{
User userModel = dbContext.Users.FirstOrDefault(e => e.UserID == newUser.UserID);
userModel.Name=newUser.Name;
userModel.Age = newUser.Age;
int result = dbContext.SaveChanges();
if (result == 1)
{
return true;
}
else
{
return false;
}
}
}
如果不知道如何建立一个空的WebAPI工程,可以查看其它资料,这里,我建了Entity ,以.edmx结尾的数据容器。
现在依据JS代码,阐述下我对Angular的理解。
(一)模块 module
Angular代码是分模块的(第68行代码),并且需要用ng-app指定使用范围区域(第2行代码),
我这里放在整个HTML页面里,当然,也可以放在某个Div里。
angular.module()里面有两个参数,第一个参数是模块名称,第二个参数是依赖模块列表。


(二)作用域(scope)
这里暂时不讲Angular怎么取数据的,放在后面再说。
通过WebAPI,我返回给前端是IEnumberable<T>类型的数据,Angular拿到数据后,直接转换成了JSON格式的数据,这让开发人员省掉了不少麻烦。
拿到JSON格式的数据后,我做了下面操作
将值赋给了一个Angular的内置服务$scope,并自定义变量userList。
$scope称之为作用域,它的父亲是$rootScope,是所有$scope对象的最上层。
AngularJS启动并生成视图时,会将根ng-app元素同$rootScope进行绑定。
$rootScope是最接近全局作用域的对象,$scope充当数据模型的角色,我们可以在上面任意添加或修改属性。
请记住:$scope并不负责处理和操作数据,它只是视图和HTML之间的桥梁,负责连接视图和控制器controller。
