本文實例分析了AngularJS的ng-repeat指令與scope繼承關系。分享給大家供大家參考,具體如下:
成都創(chuàng)新互聯(lián)是專業(yè)的當雄網(wǎng)站建設公司,當雄接單;提供成都網(wǎng)站設計、成都做網(wǎng)站,網(wǎng)頁設計,網(wǎng)站設計,建網(wǎng)站,PHP網(wǎng)站建設等專業(yè)做網(wǎng)站服務;采用PHP框架,可快速的進行當雄網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!
ng-repeat指令的使用方式可以參考如下代碼:
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>ng-repeat</title> <script src="jquery-1.11.1.js"></script> <script src="angular-1.2.25.js"></script> <script> function wholeController($scope,$rootScope,$injector) { $scope.buttons = ["button1","button2","button3"]; $scope.btnFunc = function(value){ alert(value); }; } </script> </head> <body ng-app> <div id="first" ng-controller="wholeController"> <div id="buttonDiv"> <input type="button" ng-repeat="button in buttons" id="btn{{$index}}" value="{{button}}" ng-click="btnFunc(button);"/> </div> <input type="button" value="test" ng-click="testFunc();"> </div> </body> </html>
這里需要注意:ng-click中訪問button不需要使用{{button}}這種語法;而其他非AngularJS環(huán)境下,必須通過{{button}}這種方式取值。ng-repeat指令中$index代表遍歷的數(shù)組的索引,從0開始。
我們知道ng-controller指令會創(chuàng)建一個新的作用域scope,測試代碼如下:
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>ng-repeat</title> <script src="jquery-1.11.1.js"></script> <script src="angular-1.2.25.js"></script> <script> //$scope是ng-controller指令新建的作用域 function wholeController($scope,$rootScope,$injector) { alert($scope.$parent === $rootScope);//輸出true } </script> </head> <body ng-app> <div id="first" ng-controller="wholeController"> </div> </body> </html>
我們可以使用angular.element(domElement).scope()方法來獲得某一個DOM元素相關聯(lián)的作用域。
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>ng-repeat</title> <script src="jquery-1.11.1.js"></script> <script src="angular-1.2.25.js"></script> <script> function wholeController($scope,$rootScope,$injector) { $scope.buttons = ["button1","button2","button3"]; $scope.testFunc = function(){ //拿到dom元素上關聯(lián)的作用域 var scope0 = angular.element($("#btn0")[0]).scope(); var scope1 = angular.element($("#btn1")[0]).scope(); alert(scope0 == scope1);//輸出false alert(scope0.$parent === $scope);//true alert(scope1.$parent === $scope);//true }; } </script> </head> <body ng-app> <div id="first" ng-controller="wholeController"> <div id="buttonDiv"> <input type="button" ng-repeat="button in buttons" id="btn{{$index}}" value="{{button}}" /> </div> <input type="button" value="test" ng-click="testFunc();"> </div> </body> </html>
可以看到ng-repeat指令會新建作用域,而且是為循環(huán)中的每個dom元素新建一個作用域。通過F12調(diào)試,可以看到scope0和scope1的內(nèi)容如下:
可以看到scope0和scope1中都有一個buttons屬性,這個屬性就是從父作用域下繼承得到的,很類似于JavaScript的原型鏈。
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>ng-repeat</title> <script src="jquery-1.11.1.js"></script> <script src="angular-1.2.25.js"></script> <script> function wholeController($scope,$rootScope,$injector) { $scope.buttons = ["button1","button2","button3"]; $scope.method1 = function(){ var scope0 = angular.element($("#btn0")[0]).scope(); scope0.buttons = ["a1","b1","c1"]; }; $scope.method2 = function(){ var scope0 = angular.element($("#btn0")[0]).scope(); scope0.$parent.buttons = ["a2","b2","c2"]; }; $scope.method3 = function(){ var scope0 = angular.element($("#btn0")[0]).scope(); scope0.buttons[0] = "a3"; scope0.buttons[1] = "b3"; scope0.buttons[2] = "c3"; }; } </script> </head> <body ng-app> <div id="first" ng-controller="wholeController"> <div id="buttonDiv"> <input type="button" ng-repeat="button in buttons" id="btn{{$index}}" value="{{button}}" /> </div> <input type="button" value="method1" ng-click="method1();"> <input type="button" value="method2" ng-click="method2();"> <input type="button" value="method3" ng-click="method3();"> </div> </body> </html>
當點擊method1、method2、method3的時候,我們希望將按鈕button1、button2、button3替換掉。運行上面的代碼可以發(fā)現(xiàn):method2和method3都能成功達到目的,但是method1不能達到目的。這其實很類似C語言中傳值,還是傳引用的問題。
var obj = {"name":"aty"}; wrongChangeName(obj); alert(obj.name);//仍然是aty rightChangeName(obj); alert(obj.name);//hehe function rightChangeName(obj) { obj.name="hehe"; } function wrongChangeName(obj) { obj = {"name":"hehe"}; }
wrongChangeName就類似于我們上面的method1,而rightChangeName類似于上面的method3。也就是說如果我們想在childScope中修改parentScope中某個屬性的值,那么該屬性一定不能是javascript基本數(shù)據(jù)類型,一定要是對象類型。而且不能直接通過=進行賦值修改,必須是調(diào)用對象的方法來修改。
更多關于AngularJS相關內(nèi)容感興趣的讀者可查看本站專題:《AngularJS入門與進階教程》及《AngularJS MVC架構(gòu)總結(jié)》
希望本文所述對大家AngularJS程序設計有所幫助。
標題名稱:AngularJS的ng-repeat指令與scope繼承關系實例詳解
網(wǎng)站網(wǎng)址:http://muchs.cn/article10/ihssgo.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、標簽優(yōu)化、網(wǎng)站設計、靜態(tài)網(wǎng)站、手機網(wǎng)站建設、網(wǎng)站收錄
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)