在看一个$injector用法的demo,下面是demo的所有代码:

来源:互联网 发布:web安全工程师 知乎 编辑:程序博客网 时间:2024/06/05 15:54
<!DOCTYPE html><html lang="en" ng-app="a4_6"><head>    <meta charset="UTF-8">    <title>Title</title>    <script type="text/javascript" src="../bower_components/angular/angular.min.js"></script></head><body>  <h1>has和get方法的示例</h1><div ng-controller="c4_6">    <!--视图组件--></div></body><script type="text/javascript">   var a4_6 = angular.module('a4_6',[])           .factory('$custom', function(){               return {                   print: function(msg){                       console.log(msg);                   }               };           });    var injector = angular.injector(['a4_6','ng']);    var has = injector.has('$custom');    console.log(has);    if(has){        var custom = injector.get('$custom');        custom.print("控制台输出任意的内容");    }    a4_6.controller('c4_6',['$scope','$custom', function($scope,$custom){        //控制器代码    }]);</script></html>var injector = angular.injector(['a4_6','ng']); 这句话里的ng是什么意思啊?指核心的‘ng’module,也即angular核心模块var injector = angular.injector(["ng"])是创建自己的$injector而不是应用启动时自动创建的$injector。自己创建$injector你需要传递一个module列表,上面例子有'a4_6','ng'两个module。如果你需要使用Angular核心中的任何service的话你必须显式的指明ng module。angular.module方法会假设你对ng module有依赖,并会悄悄的为你的依赖列表添加”ng”,而injector函数对于依赖module则不会做任何的假设。

如果创建injector的时候,指定了ng模块,那么该injector中就会包含$rootScope服务;否则就不包含$rootScope。

$rootScope是由angularJS加载模块的时候自动创建的,每个模块只会有1个rootScope。rootScope创建好会以服务的形式加入到$injector中。也就是说通过$injector.get("$rootScope");能够获取到某个模块的根作用域。更准确的来说,$rootScope是由angularJS的核心模块ng创建的。
原创粉丝点击