Javascript angularjs中的服务、factory.provider之间的差异

Javascript angularjs中的服务、factory.provider之间的差异,javascript,angularjs,html,angularjs-directive,Javascript,Angularjs,Html,Angularjs Directive,我们在angularjs的模块中使用服务、工厂和提供商。我的问题是它们之间的区别以及在什么条件下应该在angularjs中使用它们。请解决我的疑问。服务就是一个类。您应该提供带有构造函数的服务。Angular将只实例化这个类的一个实例。这是一个单身汉 angular.module('app', []) .service('someService', SomeService); SomeService.$inejct = ['dependency']; function SomeServ

我们在angularjs的模块中使用服务、工厂和提供商。我的问题是它们之间的区别以及在什么条件下应该在angularjs中使用它们。请解决我的疑问。

服务就是一个类。您应该提供带有构造函数的服务。Angular将只实例化这个类的一个实例。这是一个单身汉

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

SomeService.$inejct = ['dependency'];
function SomeService(dependency) {
    this.foo = 'foo'
    // . . .
}
SomeService.prototype.bar = function() {
    return 'bar';
}    
angular.module('app', [])
    .factory('someFactory', ['dependency', someFactory]);

function someFactory(dependency) {
    return {
        foo: 'foo',
        bar: function() {
            return 'bar';
        } 
    }
}
工厂希望传递给它的函数遵循JavaScript工厂模式。这是一个未更新的函数,返回一个唯一的对象。Angular只会给这个工厂打一次电话,所以它也是一个单身汉

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

SomeService.$inejct = ['dependency'];
function SomeService(dependency) {
    this.foo = 'foo'
    // . . .
}
SomeService.prototype.bar = function() {
    return 'bar';
}    
angular.module('app', [])
    .factory('someFactory', ['dependency', someFactory]);

function someFactory(dependency) {
    return {
        foo: 'foo',
        bar: function() {
            return 'bar';
        } 
    }
}
提供程序是允许您在配置期间配置服务的类

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;
}    

因此,现在在模块的配置部分,您可以执行一些ServiceProvider.setFooBar'baz','buz'

这里已经有人问了同样的问题,请看以下内容:;你可以在这里找到清楚的解释。。。