2017-02-07 5 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

関連する問題