zoukankan      html  css  js  c++  java
  • C# webApi 与 AngularJs 实现增删改Demo 讲解(一)

      公司在使用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>
    复制代码
       所有webAPI代码如下
    复制代码
     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。

  • 相关阅读:
    京东商城招聘自动调价系统架构师 T4级别
    MVVM架构~Knockoutjs系列之对象与对象组合
    MVVM架构~Knockoutjs系列之text,value,attr,visible,with的数据绑定
    MVVM架构~mvc,mvp,mvvm大话开篇
    JS~delegate与live
    DDD~我们应该知道的Model,DomainModel和ViewModel
    uva-11111 Generalized Matrioshkas
    盒子模型(非常形象)
    SQL Server提高并发查询效率
    uva-11234 Expressions
  • 原文地址:https://www.cnblogs.com/zxtceq/p/6394604.html
Copyright © 2011-2022 走看看