サブスクリプション内の変数は未定義ですが、サービスをサブスクライブする前にブレークポイントを置くと、変数が定義されます。サービスでRxJS subscribe()関数内のコンポーネント変数は定義されていません
:コンポーネントで
getCashierRiskProfiles(): Observable<ICashierRiskProfile[]> {
return this.http.get(this._baseUrl + "src/HTTPJson/cashierriskprofile.json")
.map((res: Response) => res.json())
.catch((error: any) => Observable.throw(error.json().error || 'Server error'));
}
:
import { Component, OnInit} from "@angular/core";
import { CashierRiskProfileService} from "./cashierriskprofile.service";
import { ICashierRiskProfile} from "../shared/interfaces";
import { Observable } from 'rxjs/Observable';
@Component({
selector: "cashierriskprofile",
templateUrl: "../src/app/cashierriskprofile/cashierriskprofile.component.html"
})
export class CashierRiskProfileComponent implements OnInit {
filterText : string;
cashierRiskProfiles: ICashierRiskProfile[];
constructor(private sorter: Sorter,
private service: CashierRiskProfileService) {
}
ngOnInit() {
this.filterText = "Filter Exceptions:";
//// Observable technique
this.service.getCashierRiskProfiles()
.subscribe((riskProfiles) => {
this.cashierRiskProfiles = riskProfiles;
this.filterText = "Inside Subscribe:";
},
err => {
// Log errors if any
console.log(err);
});
}
上記部品コードでngonInit()サービスコール、内部の購読内部this.cashierRiskProfilesは定義されていませんが、私は前にブレークポイントを入れた後、サービスコールには、その変数が使用可能で定義されています。私はこの問題を持つ多くの人々がthis.variablename getttingで定義されていないコンポーネント変数を見てきました。 this.filterTextに気付くと、dataserviceコールの外に割り当てられた値を取得できますが、subscribe内にブレークポイントを入れると、this.filterTextはどのように失われているのかわかりません。誰もが何が起こっているの解決策を提供できますか?
それは、スコープに関係しています。あなたができることの1つは、結果( 'riskProfiles')をプライベートメソッドに渡し、そこに必要なロジックをすべて処理することです。 '.subscribe((riskProfiles)=> this.methodToProcessResponse(riskProfiles))'のようなものです。次に、 'methodToProcessResponse()'メソッドで何をする必要があるかを行います。 –
@DaveVありがとうございましたが、変数にデータを割り当てる方法を追加するために余分な作業をすべて行う必要がありますか?これは、角度とrxjsのバージョンが更新されるまでうまく機能していました。これは、余分なメソッドを追加する唯一の回避策であり、サブスクリプション内でその変数を使用できるようにコードで行うことができる実際の修正です。 –
@DaveVこのメソッドを実装しても、私のUIにバインドされていないデータが表示されます。オブジェクトが利用可能になるまで待つことはありません。 UIには、正常に動作していないオブザーバがあり、サブスクリプション内でコンポーネント変数にアクセスすることはできません。 –