2017-02-07 166 views
1

我想擴展服務以覆蓋某些方法並添加一些方法。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) 

請告訴我什麼我正在做G?

我的角度版本是1.4.3。

回答

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; 
} 
+0

OMG,它的作品!非常感謝你! –

+0

不,問題,很高興幫助。 – dfsq