当前位置: 首页 > 面试题库 >

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

金霄
2023-03-14
问题内容

我不知道什么是最佳做法,应该使用什么。

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

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()];
}


 类似资料:
  • 问题内容: 我一直看到在AngularJS中创建控制器和服务的不同示例,我很困惑,有人可以向我解释两种方法之间的区别吗? 还有一个控制器示例: 问题答案: 第一个将污染全局名称空间,从长远来看,这不是您想要的。 第二个将控制器的作用域限定为该模块实例。它也可以注射。最好还是使用数组符号(如下所示),因为这会在最小化后继续存在。 (角度)服务与工厂之间的差异似乎很小。服务包装了工厂,工厂使用$ in

  • 问题内容: 对于一个宠物项目,数据库进入了顶峰, 元数据 达到了顶峰,我很难理解该命令与MySQL命令之间的区别(如果有)。 有什么区别吗?如果不是这样,这是关系数据库行为的一种相当典型的模式(我听说过,对于其他数据库(例如Oracle),模式存在于数据库中,而不是与数据库处于同一级别)。 谢谢! 问题答案: MySQL的文档说: CREATE DATABASE创建具有给定名称的数据库。要使用此语

  • 问题内容: 有人可以在OOP上下文中提供方法与功能的简单说明吗? 问题答案: 甲函数是一段代码由名字叫做。可以传递数据以对其进行操作(即参数),还可以选择返回数据(返回值)。传递给函数的所有数据都被显式传递。 甲方法是一段代码,由与对象相关联的名称叫。在大多数方面,它与功能相同,但有两个主要区别: 方法被隐式传递给调用该方法的对象。 方法能够对类中包含的数据进行操作(记住,对象是类的实例-类是定义

  • 我想构建一个restful服务/API。我使用了一些像play这样的框架来构建它,但我想尝试其他更有效的方法。我听说Jersey是构建rest API的常用库,Spring也是一个很好的框架。但我也看到了一些类似Spring+Jersey的解决方案。因此,我对那些rest API解决方案有点困惑。 我的目标是构建几个将JSON作为输入/输出的rest API。我有jar文件作为后端处理逻辑来处理输

  • 似乎可以根据任务定义运行任务或服务。任务和服务之间有什么区别和相似之处?在创建任务而不是服务时可以指定“任务组”这一事实是否有线索?任务和服务在层次上是任务定义的平等实例,还是服务由任务组成?

  • 问题内容: 类方法和实例方法有什么区别? 实例方法是访问器(getter和setter)而类方法是其他所有东西吗? 问题答案: 就像大多数其他答案所说的那样,实例方法使用类的实例,而类方法只能与类名一起使用。因此在Objective-C中对它们进行了定义: 然后可以像这样使用它们: 一些真实世界的类方法的例子是很多基础类,如方便的方法的或的。实例方法将是的方法。