介绍Angular的注入服务

  其实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(){
                
            })

 

posted @ 2016-05-17 18:44  何jason  阅读(1294)  评论(0编辑  收藏  举报