當前位置:編程學習大全網 - 源碼下載 - angular中$scope和$rootscope在功能上有什麽區別?

angular中$scope和$rootscope在功能上有什麽區別?

Scope是angularJS中的作用域(實際上是存儲數據的地方),很像javascript的原型鏈?。搜索時,優先考慮自己的範圍。如果找不到,就沿著作用域鏈向上搜索,直到到達根作用域。

angularJS加載模塊時自動創建$rootScope,每個模塊只會有1個rootScope。RootScope將在創建時作為服務添加。$註射器。這意味著是嗎?$injector.get("$?rootScope?”);可以獲取模塊的根範圍。更準確地說,$ TERM scope是由angularJS的核心模塊ng創建的。

作用域是html和單個控制器之間的橋梁,數據綁定依賴於它。Rootscope是每個控制器中作用域的橋梁。用rootscope定義的值可以在各種控制器中使用。

1?1?1?

123456791012131415151617示例1:?//?創建壹個新的模塊變量?模塊?=?angular.module("app ",[]);?//?True意味著$rootScope確實作為服務包含在模塊的註入器中。hasNgInjector?=?angular.injector(['app ',' ng ']);console.log("has?$rootScope= "?+?has nginjector . has(" $ root scope ");//真?//?獲取模塊對應的註入器對象,而不是ng模塊//中的服務?不依賴ng模塊無法獲取$rootScope服務var?非註射器?=?angular . injector([' app ']);console.log("沒有?$rootScope= "?+?Nong injector . has(" $ root scope ");//假?//?得到角芯的ng模var?ngInjector?=?angular . injector([' ng ']);console.log("ng?$rootScope= "?+?nginjector . has(" $ root scope ");//true12上面的代碼真的能說明:?$rootScope確實是核心模塊ng創建的,作為服務存在於injector中?。如果在創建註入器時指定了ng模塊,那麽註入器將包含$rootScope服務;否則,不包含$rootScope。123456789101121314151616171819238.!doctype?html & gt& lthtml?lang="en " >& lthead & gt?& ltmeta?charset="utf-8 " >?& lt劇本?src="angular-1.2.25.js " >& lt/script & gt;?& lt腳本& gt?var?模塊?=?angular.module("app ",[]);//?控制器中的$injector是由angular框架自動創建的。FirstController($scope,$injector,$ root scope){ $ root scope . name = " aty ";}?//自己造了壹個註射器,看app和ng模塊var?我的註射器?=?angular.injector(["app "," ng "]);var?rootScope?=?my injector . get(" $ root scope ");alert(root scope . name);//u defined & lt;/script & gt;& lt/head & gt;?& lt身體?ng-app = " app " & gt;& ltdiv?id="first "?ng-controller = " first controller " & gt;& lt輸入?type="text "?ng-model = " name " & gt;?{ { name } } & lt/div & gt;& lt/body & gt;?& lt/html & gt;Angular.injector()可以多次調用,每次都返回新創建的injector對象?。所以我們自己創建的myInjector和angular自動創建的$injector不是同壹個對象,所以得到的rootScope也不壹樣。

1234567891011121314151617181920212223242526272829303132333435363738 394041424344544748495051525355575859666666666666666666666666666666666+07237777+072777775 !doctype?html & gt& lthtml?lang="en " >& lthead & gt?& lt劇本?src="angular-1.2.25.js " >& lt/script & gt;?& lt腳本& gt?功能?FirstController($scope,$injector,$rootScope){//?trueconsole.log("scope?父母?:"?+?($scope。$parent?= = $ root scope));} & lt/script & gt;?& lt/head & gt;?& lt身體?ng-app & gt;& ltdiv?id="first "?ng-controller = " first controller " & gt;& lt輸入?type="text "?ng-model = " name " & gt;?{ { name } } & lt/div & gt;& lt/body & gt;?& lt/html & gt;ng-controller指令為它所在的DOM元素創建壹個新的$scope對象,並作為rootScope?。$scope是由$rootScope創建的,$scope在$injector中不受保護。例4:;{ { $ root.name } } & ltdiv?id="noControllerDiv"/>。?& ltdiv?ng-controller = " second controller " & gt;?& lt/div & gt;& lt/body & gt;?& lt/html & gt;

123456789101121314151617181920212223242526272828每個模塊只有壹個$rootScope和壹個$injector,但是可以有多個$ scopes?。?明白了嗎?對於$injector、$rootScope和$Scope之間的關系,我們來看看angular提供的兩個API,壹個是scope(),壹個是injector()。使用?angular.element()返回的DOM對象都包含這兩個方法來獲取關聯的作用域和註入器。因為每個模塊的註射器都是獨壹無二的,所以呢?Angular.element()。injector()直接返回元素所在模塊的註入器?。Angular.element()。scope()可以獲取當前元素的作用域或父作用域。如果當前元素有作用域,則返回自己的作用域;如果沒有,就往妳父親的方向找。如果找不到,就返回rootScope。即。返回距離作用域鏈上的元素最近的作用域。。& lt!doctype?html & gt& lthtml?lang="en " >& lthead & gt?& ltmeta?charset="utf-8 " >?& lttitle & gtscope()& lt;/title & gt;?& lt劇本?src = " jquery-1.11.1 . js " >;& lt/script & gt;?& lt劇本?src="angular-1.2.25.js " >& lt/script & gt;?& lt腳本& gt?功能?第壹個控制器($ scope,$ injector,$ root scope){//獲取body對象var?domBody?=?document . getelementsbytagname(' body ')[0];?//?通過ng-app指令所在的DOM元素獲取rootScopevar?rtScope?=?angular.element(圓頂體)。scope();?//當前元素沒有新的範圍。獲取父作用域,即rootScopevar?noScope?=?angular . element(" # noControllerDiv ")。scope();?//?true console . log(" rt scope = = no scope:"?+?(rt scope = = no scope));?//ng-控制器所在的元素,返回的scopevar?scopeOnController?=?angular.element("#first ")。scope();?//?ng-controller內部的元素返回到scopevar?inController?=?angular.element("#tips ")。scope();?//true console . log(" scope on controller = = in controller:"?+?(scopeOnController = = in controller));?//驗證通過DOM獲取的作用域是否與註入的$scope和$ root scope//true console . log(" result 1:"?+?(rt scope = = $ root scope));//trueconsole.log("result2:"?+?(in controller = = $ scope));?}?& lt/script & gt;& lt/head & gt;?& lt身體?ng-app & gt;& ltdiv?id="first "?ng-controller = " first controller " & gt;& lt輸入?type="text "?ng-model = " name " & gt;?& ltdiv?id = " tips " & gt& lt/div & gt;?& lt/div & gt;?& lth2 & gt外面?的?控制器& lt/H2 & gt;& lt!-訪問每個應用程序(模塊)的root scope-->;{ { $ root.name } } & ltdiv?id="noControllerDiv"/>。?& lt/body & gt;?& lt/html & gt;

  • 上一篇:JAVA工作流框架哪個比較好?
  • 下一篇:火焰識別源代碼
  • copyright 2024編程學習大全網