angularJS Provider、factory、service详解及实例代码

时间:2021-05-28

factory

用 Factory 就是创建一个对象,为它添加属性,然后把这个对象返回出来。你把 service 传进 controller 之后,在 controller 里这个对象里的属性就可以通过 factory 使用了。

app.controller('myFactoryCtrl', function($scope, myFactory){ $scope.artist = myFactory.getArtis();});app.factory('myFactory', function(){ var _artist = ''; var service = {}; service.getArtist = function(){ return _artist; } return service;});

service

Service 是用"new"关键字实例化的。因此,你应该给"this"添加属性,然后 service 返回"this"。你把 service 传进 controller 之后,在controller里 "this" 上的属性就可以通过 service 来使用了。

app.controller('myFactoryCtrl', function($scope, myService){ $scope.artist = myService.getArtis();});app.service('myService', function(){ var _artist =''; this.getArtist = function(){ return _artist; }});

provider

Providers 是唯一一种你可以传进 .config() 函数的 service。当你想要在 service 对象启用之前,先进行模块范围的配置,那就应该用 provider。

app.controller('myProviderCtrl', function($scope, myProvider){ $scope.artist = myProvider.getArtist(); $scope.data.thingFromConfig = myProvider.thingOnConfig;});app.provider('myProvider', function(){ this._artist = ''; this.thingFromConfig = ''; this.$get = function(){ var that = this; return { getArtist: function(){ return that._artist; }, thingOnConfig: that.thingFromConfig } }});app.config(function(myProviderProvider){ myProviderProvider.thingFromConfig = 'This was set in config()';});

value和constant

$provide.value('myValue', 10);$provide.constant('myConstant', 10);

provider、factory、service三者的关系

app.provider('myDate', { $get: function() { return new Date(); }});//可以写成app.factory('myDate', function(){ return new Date();});//可以写成app.service('myDate', Date);

总结

  • 所有的供应商都只被实例化一次,也就说他们都是单例的
  • 除了constant,所有的供应商都可以被装饰器(decorator)装饰
  • value就是一个简单的可注入的值
  • service是一个可注入的构造器
  • factory是一个可注入的方法
  • decorator可以修改或封装其他的供应商,当然除了constant
  • provider是一个可配置的factory
  • 以上就是对angularJS Provider、factory、service的资料整理,后续继续补充相关资料,谢谢大家对本站的支持!

    声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

    相关文章