私のアプリでは、同じパラメータを必要とする3つの異なる機能に渡ってコードを再利用するという賢明なアイデアがあると思っていました。動的関数呼び出しで正しい「this」サービスを取得する
サービス内の正しいエンドポイント関数に変数を割り当てて、その変数を呼び出しようとしましたが、参照によって関数が呼び出されたときに、this
はもはやサービスオブジェクトを参照しませんでしたか?私は確信していませんが、私が得たエラーは基本的にthis
がサービス内で定義されていないことでした。私のコンポーネントの内部
機能:
submitRefurb() {
let endpoint = this.refurbService.addRefurb;
if (this.updating) {
endpoint = this.refurbService.updateRefurb;
} else if (this.refurb.id) {
endpoint = this.refurbService.verifyRefurb;
}
this.loading = true;
endpoint(this.refurb).subscribe(//This is where we have the problem
(result) => {
console.log(result);
},
(error) => {
this.loading = false;
}
);
}
Refurbsサービス:
今、私は最終的にそれがむしろ直接に割り当てるよりも、単に文字列としてendpoint
変数を割り当てることによって動作するようになりました関数は次のようになります。
let endpoint = 'addRefurb'; ... this.refurbService[endpoint](this.refurb)
しかし、私はまだ何がうまく行っていないかを十分に理解していません。違いが何であるか誰でも説明できますか?私がやったやり方よりも、それを扱う良い方法はありますか?
を'関数のようなものです:' endpoint.call(this、this.refurb).subscribe(..) 'と何が起こるかを見てください –
@OsmanCea私が間違っている場合は訂正しますが、RefurbService内の「this」ではなく「this」にバインドしませんか? – Ecksters
正解...私はそれをコンポーネント「this」にバインドしたいと誤解しました。とにかく、それをサービスに戻したい場合は、 'endpoint.call(this、this.refurb)'を 'endpoint.call(this.refurbService、this.refurb)'に置き換えてください。 –