Open HanSummer opened 7 years ago
形式:angularModuleInstance.provider(name, Fn or Object);
Fn => 这个函数是一个构造函数,构造函数必须有$get属性( 这个属性是一个有返回值的方法),如:
moduleInstance.provider("myService", function() { var self = this; this.prop = "aaa"; self.getProp = function() { return self.prop; }; self.setProp = function(newProp) { self.prop = newProp; }; self.$get = function() { return { getProp : self.getProp , setProp : self.setProp } }; });
{ } => 必须有$get属性,与函数中$get一样。如:
moduleInstance.provider("myService", { $get : function() { return { prop: 'aaa' } } });
当服务被注入到控制器或者指令时,AngularJS通过调用$get方法创建服务实例,而且仅实例化一次。
形式:angularModuleInstance.factory(name, Fn);
Fn => 一个函数,函数有返回值,如:
moduleInstance.factory("myService", function() { var prop = "aaa"; return { getProp : function(){ return prop } , setProp : function(newProp){ prop = newProp; } } });
形式:angularModuleInstance.service(name, Fn);
Fn => 这个函数是一个构造函数,如:
moduleInstance.service("myService", function() { var self = this; this.prop = "aaa"; self.getProp = function() { return self.prop; }; self.setProp = function(newProp) { self.prop = newProp; }; })
factory调用provider实现,service调用factory实现
provider定义的服务可以在模块config阶段进行配置
形式:angularModuleInstance.value(name, value);
value => 常量值,如:
moduleInstance.value("myService", 'aaaa')
比较:用法一样
主要差别是constant可以在config阶段进行配置,value不行。
概念
作用和分类
创建和使用