创建角度基础服务和子服务

时间:2015-08-31 16:01:36

标签: angularjs prototypal-inheritance angular-services

我正在尝试为角度动态列表对象创建一般服务,对于不同类型的对象,我需要稍微不同的方法来提供此服务。所以我认为最好有一个基本服务和一些子服务。问题是,我需要根据子服务初始化具有不同对象的基本服务。

这就是我到目前为止所得到的:

基本列表 - 服务(缩写为相关的)

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服务中的父服务来从其他服务继承的最佳做法是什么?

1 个答案:

答案 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;
    }
])