標籤:
其實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(){ })
介紹Angular的注入服務