$location,$http,$timeout,$interval
1.factory 定义一个对象, 给这个对象添加属性和方法, 然后返回这个对象。直接调用
app.factory('MyFactory',function() {
// define result object of factory. varresult = {};
// add some property and method to the object result.greeting = 'Hello from factory.';
// return the object; return result;
});
引入直接调用
2.service 通过service方式创建自定义服务,相当于new的一个对象:new myService();,只要把属性和方法添加到this上才可以在controller里调用。
app.service('MyService', function() {
this.greeting = 'Hello from service';
});
引入:
var serviceObj = new MyService();
3.provider
当你使用Provider创建一个service时,唯一的可以在你的控制器中访问的属性和方法是通过$get()函数返回内容。
provider 必须提供一个 $get 方法, $get 方法和 factory 要求是一致的, 即: 先定义一个对象, 给这个对象添加属性和方法, 然后返回这个对象
app.provider('MyProvider', function() {
this.$get = function() {
var result = {};
result.greeting ='Hello from provider';
return result;
}
})
provider 可以在应用启动时进行配置
provider 的特殊之处就是可以在 module 启动时进行配置, 从而达到特殊的用途
app.provider('MyProvider', function() {
// default name is 'anonymous';
var defaultName = 'anonymous';
var name = defaultName;
// setName can be called duaring module init
this.setName = function(newName) {
name = newName;
}
this.$get = function() {
var result = {};
result.greeting ='Hello from provider';
result.name = name;
result.defaultName = defaultName;
return result;
}
})
app.config(function(MyProviderProvider) {
MyProviderProvider.setName('Angularjs Provider');
});
使用都是一样的:
app.controller('TestController', ['$scope', 'MyFactory', 'MyService', 'MyProvider', function($scope, myFactory, myService, myProvider) {
$scope.greetingFromFactory = myFactory.greeting;
$scope.greetingFromService = myService.greeting;
$scope.greetingFromProvider = myProvider.greeting;
}]);