Angular之Service篇
2016-09-01 本文已影响87人
codeice
在AngularJS中,我们经常将通用的业务逻辑封装在服务里面,使公用模块复用率更高,减少重复性代码,提高代码可读性,降低维护成本
我们经常用到业务逻辑,或者是说持久化数据化操作应该放在自定义的服务里面,而不是Controller里面。
自定义服务三方式:
1.provider
Provider是唯一 一种你可以传进 .config() 函数的service。当你想要在 service对象启用之前,先进行模块范围的配置,那就应该用 provider。当我们定义provider时候,我们还必须将返回对象放在this.$get=function(){}中
//唯有Provider服务可以被注入到Config中
module.config(['providerServiceProvider', function(providerServiceProvider) {
providerServiceProvider.name = '这是通过外部config传入的参数名字:Jessie!!!!!!';
}]);
//provider service
module.provider('providerService', function() {
this.name = '';
this.$get = function() {
var _name = '';
var that = this;
var service = {
setName: function(name) {
_name = name;
},
getName: function() {
_name = name;
},
getConfigName: function() {
return that.name;
}
};
return service;
}
});
2.service
service方法本身返回一个构造器, Service是用"new"关键字实例化的。 你应该给"this"添加属性, 然后service返回"this"。
//使用service方法
module.service('service', function() {
var _name = '';
this.setName = function(name) {
_name = name;
}
this.getName = function() {
return _name;
};
});
3.factory
factory 方法直接把一个函数当成一个对象的$get 方法,它可以直接返回字符串,用factory 就是创建一个对象,为它添加属性,然后把这个对象返回出来。
module.factory('factoryService', function() {
var _name = '';
var serverce = {};
var that = this;
serverce.setName = function(name) {
_name = name;
}
serverce.getName = function() {
return _name;
}
serverce.getConfigName = function() {
return that.name;
}
return serverce;
});
service方法与factory相比,service可以不用生命对象,它直接将某些属性和方法绑定在this上就可以,但是它不可以直接返回字符串,而factory定义的服务必须在里面定义一个对象,将某些公用的方法或者属性绑定在此对象上,然后Return回去。