服务,angular.svider在angularjs之间的区别

时间:2015-02-23 10:24:12

标签: javascript angularjs html5 angularjs-directive

我们在angularjs.my的模块中使用服务,工厂和提供者。问题是彼此之间的区别是什么,它们应该在angularjs.please中使用什么条件来解决我的疑问。

2 个答案:

答案 0 :(得分:0)

服务是class。您应该提供具有constructor功能的服务。 Angular只会实例化(新增)此class的一个实例。这是一个单身人士。

angular.module('app', [])
    .service('someService', SomeService);

SomeService.$inejct = ['dependency'];
function SomeService(dependency) {
    this.foo = 'foo'
    // . . .
}
SomeService.prototype.bar = function() {
    return 'bar';
}    

工厂希望传递给它的函数遵循JavaScript factory pattern。这是一个未初始化的函数,并返回一个唯一的对象。 Angular只会调用一次这个工厂 - 所以它也是一个单例。

angular.module('app', [])
    .factory('someFactory', ['dependency', someFactory]);

function someFactory(dependency) {
    return {
        foo: 'foo',
        bar: function() {
            return 'bar';
        } 
    }
}

提供商是class,允许您在配置时间内配置服务

angular.module('myApp', [])
    .provider('someService', SomeServiceProvider);

function SomeServiceProvider() {
    this.foo = 'foo'
    this.bar = 'bar';  
}
SomeServiceProvider.prototype.setFooBar = function(foo, bar) {
    this.foo = foo;
    this.bar = bar;
}
SomeServiceProvider.prototype.$get = function() {
    return new SomeService(this.foo, this.bar);
}

function SomeService(foo, bar) {
    this.foo = foo;
    this._bar = bar;
    // . . .
}
SomeService.prototype.bar = function() {
    return this._bar;
}    

现在,在模块的配置部分,您可以执行someServiceProvider.setFooBar('baz', 'buz')

答案 1 :(得分:0)

查看此链接:link ....深入描述服务,工厂和供应商