AngularJS中的provider,factory,service方法
使用$provide中的provider方法定义服务
前面已经知道了module的定义为angular.module(name,[requires],configFn);configFn参数是配置服务的。ng供服务的过程涉及它的依赖注入机制。AngularJS是用$provider对象来实现自动依赖注入机制的。$provide.provider是一种定义服务的方法。注入机制通过调用provider的$get方法,把得到的对象作为参数进行相关的调用。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | < html ng-app = "app" > < head > < meta charset = "utf-8" > head > < body ng-app = "app" > < div ng-controller = "Controller1" > div > < script src = "http://cdn.bootcss.com/angular.js/1.4.1/angular.js" > script > < script type = "text/javascript" > angular.module('app', [], function($provide) { //自定义服务 $provide.provider('helloService', function() { this.$get = function() { return { message: 'how are you ?' } } }); }) .controller('Controller1', function($scope, helloService) { console.log(helloService); }); script > body > html > |
定义了名字叫helloService的服务,通过$get方法,让helloService就等于$get返回的对象。在控制器Controller1中,用到了helloService这个服务,就将它写在参数列表里。这里可以看出$scope也是一个服务。在控制台打印出helloService,结果如下:

上面这种方法一般不会用,因为有更加简便的方法,比如$provide里的factory和service方法。
$provide中的factory和service方法
factory方法和service方法可以看作是provider方法的简写,它们省去了写$get方法,具体用法如下:
factory方法
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | < html ng-app = "app" > < head > < meta charset = "utf-8" > head > < body ng-app = "app" > < div ng-controller = "Controller1" > div > < script src = "http://cdn.bootcss.com/angular.js/1.4.1/angular.js" > script > < script type = "text/javascript" > angular.module('app', [], function($provide) { $provide.factory('myFactory', function() { return 'i am factory' }); }) .controller('Controller1', function($scope, myFactory) { console.log(myFactory); }); script > body > html > |
对factory方法来说,返回可以是任意类型,所以这里返回字符串是没有问题的。

service方法
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | < html ng-app = "app" > < head > < meta charset = "utf-8" > head > < body ng-app = "app" > < div ng-controller = "Controller1" > div > < script src = "http://cdn.bootcss.com/angular.js/1.4.1/angular.js" > script > < script type = "text/javascript" > angular.module('app', [], function($provide) { $provide.service('mySerivce', function() { return { message: 'i am service' } }); }) .controller('Controller1', function($scope, mySerivce) { console.log(mySerivce); }); script > body > html > |
service方法返回的只能是引用类型(数组、对象等),如果是其它类型的话会得不到内容。这一点是factory和service的区别。

此外,factory和service方法在module里还有快捷方法,用法为:
| 1 2 3 | var module1 = angular.module('module name', ...); module1.factory(); module1.service(); |
本文转自 iampomelo 51CTO博客,原文链接:http://blog.51cto.com/iampomelo/1666358,如需转载请自行联系原作者
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
