angularjs – 在创建服务方法时,module.service和module.factory之间有什么区别

前端之家收集整理的这篇文章主要介绍了angularjs – 在创建服务方法时,module.service和module.factory之间有什么区别前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我不知道什么是最佳实践和我应该使用。

下面两种方法有什么区别?

module.service(..);

module.factory(..);
有一个伟大的谷歌集团帖子关于这一点从Pawel Kozlowski:

https://groups.google.com/forum/#!msg/angular/hVrkvaHGOfc/idEaEctreMYJ

来自Powel:

in fact $provide.provider,$provide.factory and $provide.service are
more or less the same thing in the sense that all of them are
blueprints / instructions for creating object instances (those
instances are then ready to be injected into collaborators).

$provide.provider is the most spohisticated method of registering
blueprints,it allows you to have a complex creation function and
configuration options.

$provide.factory is a simplified version of $provide.provider when you
don’t need to support configuration options but still want to have a
more sophisticated creation logic.

$provide.service is for cases where the whole creation logic boils
down to invoking a constructor function.

So,depending on the complexity of your construction logic you would
choose one of $provide.provider,$provide.factory and $provide.service
but in the end what you are going to get is a new instance.

这是附带的小提琴演示(从线程):@L_502_1@

代码

var myApp = angular.module('myApp',[]);

//service style,probably the simplest one
myApp.service('helloWorldFromService',function() {
    this.sayHello = function() {
        return "Hello,World!"
    };
});

//factory style,more involved but more sophisticated
myApp.factory('helloWorldFromFactory',function() {
    return {
        sayHello: function() {
            return "Hello,World!"
        }
    };
});

//provider style,full blown,configurable version     
myApp.provider('helloWorld',function() {

    this.name = 'Default';

    this.$get = function() {
        var name = this.name;
        return {
            sayHello: function() {
                return "Hello," + name + "!"
            }
        }
    };

    this.setName = function(name) {
        this.name = name;
    };
});

//hey,we can configure a provider!            
myApp.config(function(helloWorldProvider){
    helloWorldProvider.setName('World');
});


function MyCtrl($scope,helloWorld,helloWorldFromFactory,helloWorldFromService) {

    $scope.hellos = [
        helloWorld.sayHello(),helloWorldFromFactory.sayHello(),helloWorldFromService.sayHello()];
}
原文链接:https://www.f2er.com/angularjs/145292.html

猜你在找的Angularjs相关文章