AngularJS中$injector、$rootScope和$scope的概念和关联关(2)

弄清了$injector、$rootScope和$scope这3者之间的关系,我们看下angular提供的2个API,一个是scope(),一个是injector()。使用angular.element()返回的DOM对象,都会包含这2个方法,用来获取与之关联的scope和injector。

由于每个模块的injector是唯一的,所以angular.element().injector()直接返回元素所在模块的injector

angular.element().scope()可以获取到当前元素的scope或父scope。如果当前元素有scope,则返回自己的scope;如果没有则向父亲方向寻找,如果找不到返回rootScope。即返回作用域链上,距离该元素最近的scope

<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>scope()</title> <script src="https://www.jb51.net/jquery-1.11.1.js"></script> <script src="https://www.jb51.net/angular-1.2.25.js"></script> <script> function FirstController($scope,$injector,$rootScope) { //获取body对象 var domBody = document.getElementsByTagName('body')[0]; // 通过ng-app指令所在的DOM元素获取rootScope var rtScope = angular.element(domBody).scope(); //当前元素没有新作用域,获取父作用域即rootScope var noScope = angular.element("#noControllerDiv").scope(); // true console.log("rtScope==noScope:" + (rtScope==noScope)); //ng-controller所在的元素,返回的scope var scopeOnController = angular.element("#first").scope(); // ng-controller内部的元素返回所在的scope var inController = angular.element("#tips").scope(); //true console.log("scopeOnController==inController:" + (scopeOnController==inController)); //验证通过DOM获取的scope是否与注入的$scope和$rootScope一致 //true console.log("result1:" + (rtScope==$rootScope)); //true console.log("result2:" + (inController==$scope)); } </script> </head> <body ng-app> <div ng-controller="FirstController"> <input type="text" ng-model="name"> <br> <div></div> </div> <h2>outside of controller</h2> <br> <!--访问每一个应用(模块)的rootScope--> {{$root.name}} <div/> </body> </html>

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwdgdy.html