2017-11-02 5 views

答えて

0

これを自分で把握しようとしました。私のソリューションは少しハックのように感じたが、仕事を終わらせた。

私は、index.htmlのタグにjsonpコールバックを作成して、グローバルに利用できるようにします。

<script> 
    window.THIS_NEEDS_TO_BE_CHANGED = function(data){ 
     console.log("jsonp callback"); 
     window.angularServiceRef.service.callComplete(data); 
    } 
    </script> 

通常、クラスIはjsonp呼び出しをサブスクライブします。私は、ウィンドウオブジェクトにクラスへの参照を与え、 '角度のある'ハンドラを作成し、ngzoneも取得します。

//service class 
constructor(private zone: NgZone){ 
    window['angularServiceRef'] = {service: this}; 
} 
//... 
public callComplete(data: any): void { // This gets called from index.html // this is the jsonp callback handler hack. 
     console.log('callback complete'); 
     this.zone.run(() => {this.someData = data }); // Since callComplete() is run from outside angular, zonejs lets this code run back within angulars scope. 

} 

callComplete()関数は、THIS_NEEDS_TO_BE_CHANGEDコールバックからデータを取得し、サービス・クラス変数にデータを割り当てます。これはゾーンブロック内で発生し、変更リスナーによってピックアップされます。

スコープの外側から角を呼び出すためのこの回答は役に立ちました。 Angular2 - how to call component function from outside the app