1.factory
factory , 就是你提供一个方法, 该方法返回一个对象的实例, 对于 AngularJS 的 factory 来说, 就是先定义一个对象, 给这个对象添加属性和方法, 然后返回这个对象, 例如:
var app = angular.module('MyApp', []); app.factory('MyFactory', function() { // define result object of factory. var result = {}; // add some property and method to the object result.greeting = 'Hello from factory.'; // return the object; return result; });
最后 controller 拿到的就是 result
对象:
m1.controller('Aaa',['$scope','myFactory',function($scope,myFactory){ console.log( myFactory); //这里的myFactory就是result对象 }]);
2.service
service 通过 new
运算符进行实例化, 可以认为是一个类型, 只要把属性和方法添加到 this
对象上即可, 不用显式返回什么对象, 比如下面的代码:
app.service('MyService', function() { this.greeting = 'Hello from service'; });
controller 拿到的对象就是上面代码中 this
指向的对象,
m1.controller('Aaa',['$scope','myService,function($scope,myService){ console.log(myService); //这里的myService就是上面this指向的对象,相当于 var myService = new myService(); }]);
3.provider
与 factory 和 service 稍有不同的是, provider 必须提供一个 $get
方法, $get
方法和 factory 要求是一致的, 即: 先定义一个对象, 给这个对象添加属性和方法, 然后返回这个对象, 例如:
app.provider('MyProvider', function() { this.$get = function() { var result = {}; result.greeting = 'Hello from provider'; return result; } })
最后 controller 拿到的对象就是 provider 的 $get
方法返回的对象,
m1.provider('myRandomNum',function(){ return { bolInt : false, int : function(argBol){ if(argBol){ this.bolInt = true; } else{ this.bolInt = false; } }, $get : function(){ var This = this; return function(num1,num2){ return This.bolInt ? Math.round(Math.random()*(num2 - num1)) + num1 : Math.random()*(num2 - num1) + num1; }; } }; }); m1.config(['myRandomNumProvider',function(myRandomNumProvider){ myRandomNumProvider.int(false); }]); m1.controller('Aaa',['$scope','myRandomNum',function($scope,myRandomNum){ console.log( myRandomNum(-3,6) );
//这里的 }]);
注意:
provider 的特殊之处就是可以在 module 启动时进行配置, 从而达到特殊的用途
m1.config(['myRandomNumProvider',function(myRandomNumProvider){ myRandomNumProvider.int(false); }]);
参考:http://ju.outofmemory.cn/entry/121904