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

AngularJS:什么是工厂?

赵华彩
2023-03-14
问题内容

我一直在做很多工作Angular.js,总的来说,我发现它是一个有趣而强大的框架。

我知道关于服务,工厂,提供者,价值的讨论很多,但是我对“什么是”仍然很困惑Factory

在其他StackOverflow讨论中,工厂定义如下:

工厂名称

语法:module.factory( 'factoryName', function );结果:在将factoryName声明为可注入的参数时,将为您提供通过调用传递给module.factory的函数引用而返回的值。

我发现很难理解这种解释,也并没有增加我对工厂的理解。

会有人有关于究竟什么是任何解释或现实生活中的例子份额Factory,以及为什么你应该代替使用它的ServiceProvider或者其他?

更新资料

A service 拥有 对任何 对象 的引用

A factory 是一个 返回任何 对象* 的函数 *

A provider 是一个 返回任何 函数的函数

- -


问题答案:

据我了解,它们几乎都是相同的。主要区别在于它们的复杂性。提供者可以在运行时进行配置,工厂要健壮一些,服务是最简单的形式。

看看这个问题AngularJS:服务vs提供者vs工厂

这个要点也可能有助于理解细微的差异。

来源:https://groups.google.com/forum/#!topic
/
angular /
hVrkvaHGOfc

jsFiddle:http :
//jsfiddle.net/pkozlowski_opensource/PxdSP/14/

作者: Pawel Kozlowski

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() {
    // In the provider function, you cannot inject any
    // service or factory. This can only be done at the
    // "$get" method.

    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文档和一些教程,对于文档的难懂性,我感到很惊讶。 我有一个简单的,可以回答的问题,对于其他希望使用AngularJS的人也可能有用: 什么是AngularJS指令? 某个地方应该有一个简单,精确的指令定义,但是AngularJS网站提供了这些令人惊讶的无用定义: 在主页上: 指令是AngularJS中可用的独特而强大的功能。指令可让您发明特定于您的应

  • 问题内容: 我是AngularJS的新手,我无法理解AngularJS的功能。有人可以用最简单的方式来说明AngularJS中的功能以及我们可以使用它做什么。请以一种您完全不了解编程知识的方式向您解释。有人还能以最简单的方式逐行解释下面的代码吗? 问题答案: 每个控制器都有一个关联的对象。 控制器(构造函数)功能负责设置模型属性和功能。这只能通过$ scope来完成。无论您在View(HTML文件

  • 问题内容: 我发现此代码段是有人为引导程序模式编写的角度指令的一部分。 我知道这部分是用于绑定到hide.bs.modal事件的两种方式绑定的后半部分,并在UI更改时更新模式。 我只想知道为什么在调用apply之前检查$$ phase的scope和rootScope的人? 我们不能直接打电话吗? 这里的$$ phase是什么? 我尝试了很多搜索,找不到任何好的解释。 问题答案: 是角度处于周期中时

  • 问题内容: 我看过这样的语法 那双冒号是做什么用的?如果将其删除会怎样? 问题答案: 用于一次性绑定。一旦稳定,即在第一个摘要之后,表达式将停止重新计算。 因此,对所做的任何更新将不可见。

  • 问题内容: 我不太了解其工作原理和作用。 我的主要目标是将它与配合使用以提高精度。 问题答案: 使用要跟踪字符串和重复值 通常按项目本身跟踪每个项目。对于给定的阵列,试图跟踪由每个变化的。问题是我们有重复的值,而角度将引发错误。解决该问题的一种方法是通过其他方式对对象进行角度跟踪。对于字符串,这是一个很好的解决方案,因为您实际上没有其他跟踪字符串的方法。 并触发摘要和输入焦点 您暗示您对角度有些陌

  • 问题内容: 什么是工件,为什么Maven需要它? 问题答案: 工件是一个文件,通常是一个JAR文件,已被部署到Maven存储库。 Maven构建会生成一个或多个工件,例如已编译的JAR和“源” JAR。 每个工件都有一个组ID(通常是一个反向域名,如com.example.foo),一个工件ID(只是一个名称)和一个版本字符串。这三个一起唯一地识别工件。 项目的依赖关系被指定为工件。