我正在尝试为角度动态列表对象创建一般服务,对于不同类型的对象,我需要稍微不同的方法来提供此服务。所以我认为最好有一个基本服务和一些子服务。问题是,我需要根据子服务初始化具有不同对象的基本服务。
这就是我到目前为止所得到的:
基本列表 - 服务(缩写为相关的)
App.factory('List', ['$q',
function (){
var List = function(Item, searchParams){
this.Item = Item;
this.searchParams = searchParams;
//....
this.nextPage();
};
//.....
List.prototype.nextPage = function () {
//.....
this.Item.find({
//.....
}.bind(this));
};
return List;
}]);
列表服务的子服务
App.factory('UserList', [
'User', 'List','$q',
function (User, List) {
UserList = function(){
var searchParams = {
// params Object
};
return new List(User, searchParams);
};
// extend base class:
UserList.prototype.updateUser = function(id){
//.....
}
//....
return UserList;
}]);
目前只加载了UserList,但是:当然每次加载一个新实例时都会加载,因为new
运算符在调用它时,但我只想要一个实例。但是让new
运算符抛出this.nextPage();
将是未定义函数的错误。除此之外,似乎未应用扩展函数updateUser
。
那么通过将参数传递给angular服务中的父服务来从其他服务继承的最佳做法是什么?
答案 0 :(得分:1)
我得去做。
将子服务更改为此以从基础继承正确:
App.factory('UserList', [
'User', 'List','$q',
function (User, List) {
var UserList = function(){
var searchParams = {
//.....
};
List.call(this, User, searchParams);
};
// inherit from List service
UserList.prototype = Object.create(List.prototype);
UserList.prototype.updateUser = function(id) {
//.....
};
return UserList;
}
])