@bornkiller
2014-08-31T12:37:59.000000Z
字数 1172
阅读 3057
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');}])