AngularJS:service vs provider vs factory
AngularJS中的服务,提供程序和工厂之间有什么区别?
从AngularJS邮件列表我得到an amazing thread,解释服务vs工厂vs提供商及其注入使用。编译答案: 服务 语法:module.service(‘serviceName’,function); 工厂 语法:module.factory(‘factoryName’,function); 提供商 语法:module.provider(‘providerName’,function); 提供程序的优点是可以在模块配置阶段进行配置。 有关提供的代码,请参阅here。 这里有一个伟大的进一步解释由Misko: provide.value('a',123); function Controller(a) { expect(a).toEqual(123); } 在这种情况下,喷射器简单地返回值。但是如果你想计算的值呢?然后使用工厂 provide.factory('b',function(a) { return a*2; }); function Controller(b) { expect(b).toEqual(246); } 所以工厂是一个负责创建价值的函数。请注意,工厂函数可以请求其他依赖项。 但是如果你想要更多的OO并有一个叫Greeter的类呢? function Greeter(a) { this.greet = function() { return 'Hello ' + a; } } 然后实例化你必须写 provide.factory('greeter',function(a) { return new Greeter(a); }); 然后我们可以像这样在控制器中请求“greeter” function Controller(greeter) { expect(greeter instanceof Greeter).toBe(true); expect(greeter.greet()).toEqual('Hello 123'); } 但这是太荒谬。写一个更简短的方法是provider.service(‘greeter’,Greeter); 但是如果我们想在注入之前配置Greeter类怎么办?然后我们可以写 provide.provider('greeter2',function() { var salutation = 'Hello'; this.setSalutation = function(s) { salutation = s; } function Greeter(a) { this.greet = function() { return salutation + ' ' + a; } } this.$get = function(a) { return new Greeter(a); }; }); 然后我们可以这样做: angular.module('abc',[]).config(function(greeter2Provider) { greeter2Provider.setSalutation('Halo'); }); function Controller(greeter2) { expect(greeter2.greet()).toEqual('Halo 123'); } 作为附注,服务,工厂和价值都来自提供商。 provider.service = function(name,Class) { provider.provide(name,function() { this.$get = function($injector) { return $injector.instantiate(Class); }; }); } provider.factory = function(name,factory) { provider.provide(name,function() { this.$get = function($injector) { return $injector.invoke(factory); }; }); } provider.value = function(name,value) { provider.factory(name,function() { return value; }); }; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- AngularJS自动化测试之karma+jasmine单元测试
- 如何在Unix中使用mput将多个文件夹FTP到另一台服务器?
- Bootstrap简易使用指南
- 为自动备份提供密码的好方法是什么?
- scala – 案例类的隐式解析和伴随对象
- angularjs – WARN [web-server]:404:/views/nav/offline
- Angular4_Cannot read property 'value' of und
- twitter-bootstrap – Twitter Bootstrap Carousel图像标题
- logging – 无法在Elastic search docker容器中找到日志
- angular双向数据绑定实例代码