您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

创建服务方法时,module.service和module.factory有什么区别

创建服务方法时,module.service和module.factory有什么区别

Pawel Kozlowski有一篇很棒的google小组相关文章

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

引用Powel的话:

实际上,$ provide.provider,$ provide.factory和$ provide.service几乎是同一件事,因为它们都是用于创建对象实例的蓝图/指令(然后可以将这些实例准备注入协作者中) 。

$ provide.provider是注册图纸最复杂的方法,它使您可以使用复杂的创建功能和配置选项。

$ provide.factory是$ provide.provider的简化版本,当您不需要支持配置选项但仍然希望拥有更复杂的创建逻辑时。

$ provide.service用于整个创建逻辑归结为调用构造函数的情况。

因此,根据构造逻辑的复杂性,您可以选择$ provide.provider,$ provide.factory和$ provide.service之一,但最终您将获得一个新实例。

这是随附的小提琴,用于演示(从线程):http ://jsfiddle.net/pkozlowski_opensource/PxdSP/14/

代码

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()];
}
其他 2022/1/1 18:13:52 有568人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶