其实angular的注入服务是挺复杂的,目前看源码也只看懂了一半,为了不误导大家,我也不讲敢讲太复杂,怕自己都理解错了。
首先我们要知道angular的三种注入方式:
第一种:inference
var myModule = function($scope){ }
第二种:annotation
var myModule = function($location){ console.log('Module:代码注入$location成功'); console.log($location); } myModule.$inject = ['$location']; $injector.invoke(myModule);
第三种:inline
var MyTest = ['$location',function($location){ }]
var MyTest = ['$location',function($location){ console.log('Test:代码注入$location成功'); console.log($location); }] var myModule = function($location){ console.log('Module:代码注入$location成功'); console.log($location); } angular.module('MyApp',[]) .run(function($injector){ console.log($injector); //功能和注入时声明一样,但是在注入时声明有时会出现循环依赖的问题,这个时候基本可以在函数内部注入解决。 console.log($injector.get('$http')); //用来获取对象的依赖注入 console.log($injector.annotate(MyTest)); //注入函数,当你定义了某个函数,超出ng的规范的时候,你可以选择用这种方法注入函数,来达到访问ng内置服务的目的 $injector.invoke(MyTest); //当前服务是否存在 console.log($injector.has('myFact')); // myModule.$inject = ['$location'] // $injector.invoke(myModule); }) .factory('myFact',function(){ return {} }) .controller('MyCtrl',function(){ })