私はいくつかのプロパティを持つサービスを持っています。これらのプロパティは、コンポーネントがロードされる前に初期化されます(他のhttp呼び出しのパラメータとして使用されます)。 Route CanActivateメソッドは、プロパティの初期化後にtrueを取得する、またはエラー時にfalseを取得する、次のメソッドを呼び出すために使用されます。コンパイルエラーが返されます:宣言された型が 'void'でも 'any'でもない関数は、値を返す必要があります。どのように私はこのエラーを避けることができますか?角2でデータを初期化する方法
public setupSession(): boolean {
this._http.get('myservice_url')
.map (
(response: Response) => <any>response.json())
.subscribe (
data => {
this.property1 = data.property1;
this.property2 = data.property2;
return true;
},
err => {
console.error(err)
return false;
}
)
}
編集: @K。 Daniekは助けてくれてありがとう!私はこの記事の助けを借りて解決策を見つけたlink。今度は、の前にセットアップ完了を確実に保つことができます。
サービス方法:
public setupSession(): Promise<any> {
var observable = this._http.get('myservice_url')
.map((response: Response) => {
var res = response.json();
return res;
});
observable.subscribe(data => {
this.property1 = data.property1;
this.property2 = data.property2;
});
return observable.toPromise();
}
canActivate方法:
canActivate() {
return this._sessionService.setupSession().then(() => {
return true;
});
}
:
あなたは関数が次のコードのエラー、使用する場合には成功したか
false
の場合にtrue
を返すようにしたい場合は? canActivateを使用しないと、プロパティを他のhttp呼び出しのパラメータとして使用する前にプロパティが初期化されません。 – Victor2番目のケースでは、実際のデータが受信される前にbooleanを取得します。 – Victor
@Victor編集した投稿をチェックしてください。 –