角2では、の配列を示すMyObjectComponent
があります。私はこのmyObjects
をによって呼び出されるMyObjectService
から得る。Angular2:@CanActivate()からのオブジェクトをコンポーネントに渡す - > Typescriptエラー
routerOnActivate(next) {
this.myComponentObjectVariable = next.params.myObjects;
}
を経由して、私はデータを取得し、私のコンポーネントで
@CanActivate((next: ComponentInstruction, previous: ComponentInstruction) => {
let myObjectService: MyObjectService = //get my ObjectService here....
return new Promise((resolve) => {
myObjectService.getMyObjects()
.subscribe((myObjects) => {
next.params['myObjects'] = myObjects;
resolve(true);
});
})
これは動作しますが、私はnext.params['myObjects']
に追加myObjects
は、文字列の場合のみ。
私はオブジェクトを追加する場合、私は
Typescript error: TS2322: Type 'any[]' is not assignable to type 'string'.
を取得しますただし、期待どおり結果JavaScriptが動作します。しかし、私はTypescriptエラーメッセージを取り除きたい。
ためComponentInstruction
内のparamsオブジェクトの定義のエラー結果:もちろん
declare class ComponentInstruction {
... some other data ...
params: {
[key: string]: string;
};
}
私はクラスComponentInstruction
を変更することができますが、それは少し醜いだろう。
誰もがこのエラーメッセージを取り除く方法を知っていますか?
私の目的は、ルーティングする前にデータを解決することです。これはルート定義で 'resolve'を使ってAngular1で可能でした。 新しいサービスを作成する必要があります。この新しいサービスは '@CanActivate()'からデータを受け取り、 '@CanActivate()'は保存処理が完了したときに約束を解決します。次に、データを待たずに新しいサービスをMyComponentで使用することができます。 これは少し過剰ですか?アプリケーションに異なるタイプのMyObjectsがある場合、データを共有するための特別なサービスをすべてのタイプに対して記述する必要があります。または、型安全性を持たないすべての「MyObjects」の一般サービス。 –
Angularチームは、ルータに重大な制限があることを認識しています。ルータは進行中です。予想される多くの変更があります。 –
ありがとうございます。 データを共有するサービスを使用してソリューションを試しました。近いうちに別の解決策が用意されることを願っています。 –