Angular 4アプリケーションからJSONP呼び出しを行う必要があります。残念ながら、ターゲットAPIは特定のコールバックパラメータのみを許可しますが、コールバック関数をAngularで設定する方法はわかりません。Angular JSONPコールバックネーム
値を変更したいのですが、callbackParamは名前を変更するだけです。
http://myapi/data?callback=THIS_NEEDS_TO_BE_CHANGED
Angular 4アプリケーションからJSONP呼び出しを行う必要があります。残念ながら、ターゲットAPIは特定のコールバックパラメータのみを許可しますが、コールバック関数をAngularで設定する方法はわかりません。Angular JSONPコールバックネーム
値を変更したいのですが、callbackParamは名前を変更するだけです。
http://myapi/data?callback=THIS_NEEDS_TO_BE_CHANGED
これを自分で把握しようとしました。私のソリューションは少しハックのように感じたが、仕事を終わらせた。
私は、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