• AngularJs(Part 3)注册服务


    有以下5中方法注册一个AngularJS可以识别的Service

    value和constant是两个极其简单的方法,只有少数情况下会使用。 service已经开始复杂了起来。而factory是我认为既简单又有足够灵活的度的方法。最后的provide是最复杂的方法,其他方法都是provide的特殊情况下的简化。

    另外AngularJS中注册的Service都是单例的。

     1.Constant
    这是最简单的方法,只是注册了一个常量。在以后的程序中,主要注入了‘MAX_LEN’, 那么就可以使用     

    module.constant('MAX_LEN',10);
    module.service('service1',['MAX_LEN',function(MAX_LEN){
      console.log(MAX_LEN) //控制台会打印出 10.
    }]);

    2.Values
       这个也比较简单,单纯注册一个类,这个类没有其他依赖

    module.value('myservice',new MyService());


    3.Service

    module.service('myjob',['myservice',function(){
          myservice.work();
    }]);


    4.Factories

    这是比较灵活又不失简单的方法。 注册一个工厂方法给AngularJS。使用myjob时,AngularJS会调用这个工厂方法来生成我们需要的对象:就是最后return的对象(他可以是任意合法的javascript对象)。

    下面的例子中返回的是一个带3个方法的对象。使用是直接用 myjob.push() , myjob.put(), myjob.get()...调用。

    module.factory('myjob',['myservice',function(myservice){
      ...
    return { push:function(){}, put:function(){}, get:function(){}, ..... }; }]);

      
    5.Providers.
    上面所有方法其实都是provide的一个特例。provide仍然是注册一个工厂方法。这个工厂方法必须返回一个带有$get方法的对象。而$get方法其实也是一个工厂方法。它返回的就是我们需要的对象。下面的例子中myjob其实带有三个方法push,put,get, 我们可以在以后随意使用。但是可以看到还有一个 setMinLen方法,它与$get方法同级。如何调用就牵涉到module的生命周期了。      

    module.provide('myjob',function(){
                var config={minLen:10};
                return {
                    setMinLen:function(minLen){
                        config.minLen=minLen||config.minLen;
                    },
                    $get:function(myservice,MAX_LEN){
                        return {
                            push:function(){},
                            put:function(){
                                if(10<config.minLen)
                                    ...
                            },
                            get:function(){},
                            
                        };
                    }
                };
            });


    Modules 生命周期
    AngularJS中module要起作用必须经过两个阶段
        1. The configuration phase: 这个阶段收集所以经过provide注册的服务,并进行前期的配置。上面的setMinLen就可以在这个阶段调用。
        2. The run phase: It is the phase where we can execute any post-instantiaation logic.这个阶段才有$scope的概念。
        
    The configuration phase: 这是依赖的不是服务,而是服务的provider,所以方法参数都是服务名加Provider的后缀

        module.config(function(myjobProvider){
            myjobProvider.setMinLen(20);
        });


    The run phase:

        module.run(function($rootScope){
            $rootScope.appStarted=new Date();
        });



  • 相关阅读:
    onenote 使用手记0.3阶级
    尘埃落定:没有传说中k700i,官方只认可k700!
    【转】Ubuntu 9.10下安装Eclipse CDT 6.0
    四则运算
    文本内容统计
    《程序员修炼之道:从小工到专家》读后感(4)
    《程序员修炼之道:从小工到专家》读后感(5)
    多线程
    河北金力集团公文流转系统节选(2)
    动手动脑(6)文件和流
  • 原文地址:https://www.cnblogs.com/formyjava/p/4166314.html
Copyright © 2020-2023  润新知