angularJS中Provider

作者: 在路上_W | 来源:发表于2016-05-19 21:11 被阅读668次

    factory

    用 Factory 就是创建一个对象,为它添加属性,然后把这个对象返回出来。你把 service 传进 controller 之后,在 controller 里这个对象里的属性就可以通过 factory 使用了。

    You should use $provide.factory(getFn) if you do not need to configure your service in aprovider.
    
    app.controller('myFactoryCtrl', function($scope, myFactory){
        $scope.artist = myFactory.getArtis();
    });
    app.factory('myFactory', function(){
        var _artist = '';
        var service = {};
    
        service.getArtist = function(){
            return _artist;
        }
        return service;
    });
    

    service

    Service 是用"new"关键字实例化的。因此,你应该给"this"添加属性,然后 service 返回"this"。你把 service 传进 controller 之后,在controller里 "this" 上的属性就可以通过 service 来使用了。

    You should use $provide.service(class) if you define your service as a type/class.
    
    app.controller('myFactoryCtrl', function($scope, myService){
        $scope.artist = myService.getArtis();
    });
    app.service('myService', function(){
        var _artist ='';
        this.getArtist = function(){
            return _artist;
        }
    });
    

    provider

    Providers 是唯一一种你可以传进 .config() 函数的 service。当你想要在 service 对象启用之前,先进行模块范围的配置,那就应该用 provider。

    app.controller('myProviderCtrl', function($scope, myProvider){
        $scope.artist = myProvider.getArtist();
        $scope.data.thingFromConfig = myProvider.thingOnConfig;
    });
    app.provider('myProvider', function(){
        this._artist = '';
        this.thingFromConfig = '';
    
        this.$get = function(){
            var that = this;
            return {
                getArtist: function(){
                    return that._artist;
                },
                thingOnConfig: that.thingFromConfig
            }
        }
    });
    app.config(function(myProviderProvider){
        myProviderProvider.thingFromConfig = 'This was set in config()';
    });
    

    value和constant

    $provide.value('myValue', 10);
    $provide.constant('myConstant', 10);
    /*
    二者的区别:
    1. value可以被修改,constant一旦声明就无法修改
    2. value不可以在config中注入,constant可以。
    */
    

    provider、factory、service三者的关系

    app.provider('myDate', { 
        $get: function() { 
          return new Date(); 
        }
    });
    //可以写成
    app.factory('myDate', function(){ 
      return new Date();
    });
    //可以写成
    app.service('myDate', Date);
    

    总结

    • 所有的供应商都只被实例化一次,也就说他们都是单例的
    • 除了constant,所有的供应商都可以被装饰器(decorator)装饰
    • value就是一个简单的可注入的值
    • service是一个可注入的构造器
    • factory是一个可注入的方法
    • decorator可以修改或封装其他的供应商,当然除了constant
    • provider是一个可配置的factory

    相关文章

      网友评论

        本文标题:angularJS中Provider

        本文链接:https://www.haomeiwen.com/subject/ievgrttx.html