首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >AngularJS :什么是工厂?

AngularJS :什么是工厂?
EN

Stack Overflow用户
提问于 2013-05-17 04:10:24
回答 4查看 68.7K关注 0票数 103

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

我知道有很多关于服务与工厂、供应商与价值的讨论,但我仍然对什么是Factory感到困惑。

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

工厂

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

我发现这个解释很难理解,它不会增加我对工厂是什么的理解。

谁会有任何解释或现实生活中的例子来分享Factory到底是什么,以及为什么你应该用它来代替ServiceProvider或其他?

更新

service包含对任何对象的引用。

factory是返回任何对象的函数

provider是返回任何函数的函数

-呼-

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-05-17 04:12:08

据我所知,它们几乎都是一样的。主要的区别在于它们的复杂性。提供者在运行时是可配置的,工厂更加健壮,服务是最简单的形式。

查看此问题AngularJS: Service vs provider vs factory

此外,此gist可能有助于理解细微的差异。

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

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

作者:Pawel Kozlowski

代码语言:javascript
复制
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()];
}​
票数 71
EN

Stack Overflow用户

发布于 2013-05-17 04:19:17

我看到的一个主要区别是,您可以在工厂中运行自定义代码。但是,在服务中,只发生对象创建。

代码语言:javascript
复制
myJs.factory('Factory', function() {

    //Write custom code here

    return {
            Hello: function() {
            return "Hello, World!"
        }
    };
});
票数 18
EN

Stack Overflow用户

发布于 2016-03-13 08:22:05

我对这个话题的两点看法。我是一个非常非常新手,刚刚开始了解Angular JS,这是让我感到困惑的事情之一,因此我对它进行了相当详细的研究。我一直在为接受采访做笔记,这可能对其他人有用。

controller

  • if服务和工厂以不同的方式做相同的事情

  • 两者都是代码大多数事情使用工厂语法

  • 更容易使用代码“es6”之所以这样做是因为它转换为es6类更好地从控制器中抽象出业务逻辑然后你可以使用将业务逻辑与控制器一起使用
  • 只能用于将数据放在作用域中而不是处理冗长的业务逻辑

<

  • >H117>所以在上面的场景中发生的是复杂的业务逻辑被绑定到控制器中。不是用来处理数据的因此,将其零散地放入服务或工厂中。所以你的代码是精简的,modular.
  • services是单例的
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16596569

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档