@bornkiller
2014-08-31T20:37:59.000000Z
字数 1172
阅读 2819
angularjs
在angular中,声明service有五种方式:
其中,value(), constant()主要用于定义常量,以在多控制器间共享。service()第二个参数为一个构造函数,生成单例时会直接使用new操作符。factory()会直接调用providerFunction,该函数返回值即为service。
angular.module('animals',[])
.factory('cat', ['$log',function ($log) {
return {
say: function() {
$log.info('miaow miaow');
}
};
}])
.factory('dog', ['$log',function ($log) {
return {
say: function() {
$log.info('woof woof');
}
};
}])
这里声明了cat, dog两个service,当需要向别人介绍猫时,就加载cat service,调用say方法。当需要向别人介绍狗时,就加载dog service,并调用say方法。每种动物都需要一个service,都需要实现一个say方法。
如果同时需要介绍多种动物,只能通过多个service实现。假设同时只介绍一种动物(SPA),只会加载一个service,其它service都不会使用,但代码除了叫声不同,其它都完全相同,无疑造成大量的代码冗余。这种情况,就需要使用provider。
angular.module('animals',[])
.provider('animal', function () {
var specificVoice = null;
this.voice = function(voice) {
if (angular.isDefined(voice)) {
specificVoice = voice;
return this;
} else {
return specificVoice;
}
}
this.$get = ['$log',function ($log) {
return {
say: function() {
$log.info(specificVoice);
}
};
}]
})
angular.module('xxx',['xxx'])
config(['animalProvider', function (animalProvider) {
animalProvider.voice('woof woof');
}])