Service是AngularJS的可注入类型,是封装了一些特定业务逻辑的单例对象,单例对象意味着在每个应用中只会被实例化一次(由$injector实例化),并且是延迟加载的(需要时才会被创建),它对外提供一些方法供其他组件调用。
var app = angular.module("myApp", []);
app.controller("MainController", function($scope, $location) {
$scope.myUrl = $location.absUrl();
});
1 注册一个自定义的Service
var app = angular.module("myApp", []);
app.service("myService", function(){
this.sayHello = function(){
alert("this is my service!");
}
});
app.controller("MainController", function($scope, myService){
myService.sayHello();
});
如上代码,在MainController定义时,我们声明它依赖于myService,当AngularJS解析依赖时,会使用myService对应的构造方法实例化该Service对象。需要注意的是,Service对象只会被实例化一次,后面注入的Service对象是第一次调用Service构造方法后的缓存版本。
2 Factory
var app = angular.module("myApp", []);
app.factory("myFactory", function(){
return {
sayHello: function(){
alert("welcome to you !");
}
}
});
app.controller("MainController", function(myFactory){
myFactory.sayHello();
});
上面代码中,使用模块实例的factory()方法创建自定义的Factory对象,该方法的第一个参数为Factory对象名称,和service方法不同的是,它的第二个参数并不是Factory对象的构造方法,而是一个普通方法,该方法必须返回一个对象实例。