AngularJS使用工厂扩展服务并获得扩展范围

时间:2017-02-07 10:07:53

标签: angularjs

我想扩展服务以覆盖某些方法并添加一些方法。

但是,我无法获得儿童服务的范围。我认为父服务也没有注入子类,我的意思是它看起来只是一个对象,而不是实例。

这是我的例子,

家长服务,

export class ParentService implements IModalMixin {
    constructor(modalMixin: IModalMixin,
        private _: _.LoDashStatic) {
    }

    doSomething() {}

    parentMethod() {
        return 'Okay';
    }
}

儿童服务,

/* @ngInject */
export function childServiceFactory(ParentService: any) {
    var extended = angular.extend(ParentService, {});

    // override parent method
    extended.doSomething = () => {
        return this.parentMethod(); // error this.parentMethod is not a function
    }

    return extended;
}

//并加载到模块

module
.service('ParentService', MyService)
.factory('ChildService', childServiceFactory)

请告诉我我做错了什么?

我的角度版本是1.4.3。

1 个答案:

答案 0 :(得分:2)

在这种情况下,您不应该使用箭头功能,否则上下文this不是extended对象。

正常功能可行:

/* @ngInject */
export function childServiceFactory(ParentService: any) {
    var extended = angular.extend(ParentService, {});

    // override parent method
    extended.doSomething = function () {
        return this.parentMethod();
    }

    return extended;
}