国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
AngularJS進階(十一)AngularJS實現表格數據的編輯,更新和刪除

AngularJS實現表格數據的編輯,更新和刪除

效果

 

實現

首先,我們先建立一些數據,當然你可以從你任何地方讀出你的數據

  1. var app = angular.module('plunker', ['ui.bootstrap']);  
  2. app.controller('MainCtrl', function($scope) {  
  3.   $scope.name = 'World';  
  4.   $scope.employees =[{id:101, name:'John', phone:'555-1276'},  
  5.                    {id:102, name:'Mary', phone:'800-1233'},  
  6.                    {id:103,name:'Mike', phone:'555-4321'},  
  7.                    {id:104,name:'Adam', phone:'555-5678'},  
  8.                    {id:105,name:'Julie', phone:'555-8765'},  
  9.                    {id:106,name:'Juliette', phone:'555-5678'}];  
  10. $scope.showEdit = true;  
  11.  $scope.master = {};  
  12. });  

因為我們沒有用到angularbootstrap.這里,我們可以直接

  1. var app = angular.module('plunker',[]);  
  2. <!DOCTYPE html>  
  3. <html ng-app="plunker">  
  4.    
  5.   <head>  
  6.     <meta charset="utf-8" />  
  7.     <title>AngularJS Plunker</title>  
  8.     <script>document.write('<base href="' + document.location + '" />');</script>  
  9.        
  10.     <script data-require="angular.js@1.2.x" src="http://code.angularjs.org/1.2.13/angular.js" data-semver="1.2.13"></script>  
  11.        
  12.     <script src="jquery-1.11.0.min.js"></script>  
  13.     <script src="ui-bootstrap-tpls-0.10.0.min.js"></script>  
  14.     <script src="bootstrap.js"></script>  
  15.     <script src="app.js"></script>  
  16.     <link rel="stylesheet" href="bootstrap.css" />  
  17.     <link rel="stylesheet" href="mycss.css" />  
  18.   </head>  
  19.    
  20.   <body ng-controller="MainCtrl">  
  21.     <h2>Inline Edit</h2>  
  22.     <!--<input id="test" value="ddd"/>-->  
  23.     <table>  
  24.       <tr>  
  25.         <th>name</th>  
  26.         <th>phone</th>  
  27.         <th></th>  
  28.       </tr>  
  29.       <tr ng-repeat="employee in employees">  
  30.         <td>  
  31.           <input type="text" id='txt_name_{{employee.id}}' ng-model="employee.name" class="inactive" readonly />  
  32.         </td>  
  33.         <td> <input type="text" ng-model="employee.phone" class="inactive" readonly /></td>  
  34.         <td><edit ng-Model="employee" ng-show="showEdit"><a>Edit</a></edit>  
  35.             <update ng-Model="employee" ng-show="!showEdit"><a>Update</a></update>   
  36.             <cancel ng-Model="employee" ng-show="!showEdit"> | <a>Cencel</a></cancel>  
  37.           | <delete ng-Model="employee"><a>Delete</a></delete>  
  38.         </td>  
  39.       </tr>  
  40.     </table>  
  41.   </body>  
  42. </html>  

我們來看其中一個標簽,<edit>,這里呢,我們用ng-Model來綁定employee這個對象。

這里,我們用angulardirective來對著三個標簽進行事件的綁定。

angulardirctive主要作用于DOM對象,而且他可以對Element Name (比如<edit></edit>)  對應于E:)、Attribute(比如<mytag edit=express></mytag> 對應于A、

Comment <!--   my comment >  對應于M、Class <link class=mycssclass></link> 對應于C)。

默認對Attribute A),

當我們有

app.directiv("edit", function(){

  return{

    restrict: "E",

    . . . .

}

});

意思是說,我們要找到叫Element=edit”的DOM對象,這里就是<edit>,

當然你也可以攜程 restrict: AE”,那意思就是說要找到Element或者attribute = editDOM對象

這里你可以隨便對AEMC進行組合。

當你找到之后呢,就要對這個DOM進行操作,對于我們來說,就是對他綁定一個click的事件

  1. app.directive("edit", function(){  
  2.   return{  
  3.     restrict: "E",  
  4.     link: function(scope,element){  
  5.       element.bind("click",function(e){  
  6.         alert("I am clicked for editing");  
  7.       });  
  8.     }  
  9.   }  
  10. })  

這個時候呢,當你點Edit的時候呢,click事件就會觸發(fā)。

再往下呢就是對edit click事件的延伸,我們要得到employee nameinputbox,然后對他進行css的轉換,比如當你click edit后,應該出現inputboxcssinactive或者active的調整,并且移除readOnly

這里要注意一件事,就是angular.copy,為什么使用angular.copy?這個是為后面的cancel做準備的,當你放棄修改的時候,你希望你的值恢復成原樣,這個時候,對于angularJS來說,是要對model恢復原樣。如何恢復修改之前的model?最簡單的方法就是創(chuàng)建一個$scope.master = {}空的對象,然后在你click edit之后,馬上把還沒改變的model拷貝到這個空的master中去,把master作為一個臨時的存儲對象。

當我們click Edit之后,我們要隱藏Edit,而叫Update | Cancel出現。這個時候$scope.showEdit就用上了,在<edit>,<update>,<cancel>上面都有一個ng-show,這個flag用來指定這個元素是不是要顯示。ng-show=showEdit”這個值是綁定$scope.showEdit的。

  1. app.directive("edit", function(){  
  2.   return{  
  3.     restrict: "E",  
  4.     link: function(scope,element){  
  5.       element.bind("click",function(e){  
  6.         alert("I am clicked for editing");  
  7.       });  
  8.     }  
  9.   }  
  10. })  

下面,我們要給Update做事件的綁定。這里就沒用什么可說的了。

  1. app.directive("update",function($document){  
  2.   return{  
  3.     restrict: 'AE',  
  4.     require: 'ngModel',  
  5.     link: function(scope,element,attrs,ngModel){  
  6.       element.bind("click",function(){  
  7.          alert(ngModel.$modelValue + " is updated, Update your value here.");  
  8.          var id = "txt_name_" +ngModel.$modelValue.id;  
  9.          var obj = $("#"+id);  
  10.          obj.removeClass("active");  
  11.          obj.addClass("inactive");  
  12.          obj.attr("readOnly",true);  
  13.           scope.$apply(function(){  
  14.            scope.showEdit = true;  
  15.          })  
  16.       })  
  17.     }  
  18.   }  
  19. })  

在下面就是Cancel了,上面說過了,Cancel的時候要還原之前的值,這個時候呢,我們就用angular.copy把當時臨時存儲的$scope.master拷貝回model

  1. app.directive("cancel",function($document){  
  2.   return{  
  3.     restrict: 'AE',  
  4.     require: 'ngModel',  
  5.     link: function(scope,element,attrs,ngModel){  
  6.       element.bind("click",function(){  
  7.          scope.$apply(function(){  
  8.            angular.copy(scope.master,ngModel.$modelValue);  
  9.            //console.log(ngModel.$modelValue);  
  10.          })  
  11.             
  12.          var id = "txt_name_" +ngModel.$modelValue.id;  
  13.          var obj = $("#"+id);  
  14.          obj.removeClass("active");  
  15.          obj.addClass("inactive");  
  16.          obj.prop("readOnly",true);  
  17.           scope.$apply(function(){  
  18.            scope.showEdit = true;  
  19.          })  
  20.       })  
  21.     }  
  22.   }  
  23. });  

最后就是Delete了,其實永遠都要記住的事AngularMVC,所以你這里你不用操心刪除table行這樣的事,只要刪除modelemploee.id = @id就可以了

  1. app.directive("delete",function($document){  
  2.   return{  
  3.     restrict:'AE',  
  4.     require: 'ngModel',  
  5.     link:function(scope, element, attrs,ngModel){  
  6.       element.bind("click",function(){  
  7.         var id = ngModel.$modelValue.id;  
  8.         alert("delete item where employee id:=" + id);  
  9.         scope.$apply(function(){  
  10.           for(var i=0; i<scope.employees.length; i++){  
  11.             if(scope.employees[i].id==id){  
  12.                console.log(scope.employees[i])  
  13.                scope.employees.splice(i,1);  
  14.             }  
  15.           }  
  16.           console.log(scope.employees);  
  17.         })  
  18.       })  
  19.     }  
  20.   }  
  21. });  

基本上就完工了。這里我沒有用任何現成的angular 插件,這只是對angular基本原理的闡述,如有誤導或者有能簡單的方法請指教。

本站僅提供存儲服務,所有內容均由用戶發(fā)布,如發(fā)現有害或侵權內容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
使用超動感HTML & JS開發(fā)WEB應用! | AngularJS中文社區(qū)
Angular Input格式化
跟我學AngularJs:Service、Factory、Provider依賴注入使用與區(qū)別
AngularJS開發(fā)指南29:將服務注入到控制器中 | AngularJS中文社區(qū)
AngularJS實現長按事件監(jiān)聽(ng
AngularJS自學之路(三)
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯系客服!

聯系客服