在Angular 2中,我有一個MyObjectComponent
,它顯示了一個myObjects
的數組。我從MyObjectService
得到這個myObjects
,被調用。Angular2:將對象從@CanActivate()傳遞到組件 - > Typescript錯誤
@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);
});
})
在我的組件通過我
routerOnActivate(next) {
this.myComponentObjectVariable = next.params.myObjects;
}
這工作,但只有當我添加到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
但是這將是一個有點難看。
有沒有人有一個想法如何擺脫這個錯誤信息?
我的目標是在路由之前解析數據。這在Angular1中可以在路由定義中使用'resolve'。 所以我必須創建一個新的服務。這個新服務接收來自'@CanActivate()'和'@CanActivate()的數據'解決了存儲過程完成時的承諾。然後,我可以在MyComponent中使用新服務而無需等待數據。 這不是有點矯枉過正?如果我的應用程序中有不同類型的'MyObjects',我將不得不爲每種類型編寫一個特殊的服務來共享數據。或者沒有類型安全的所有'MyObjects'的一般服務。 –
Angular團隊知道路由器有嚴重的侷限性。路由器正在進行中。預計會有很多變化。 –
謝謝你的回答。 我試着用服務分享數據的解決方案。我希望很快會有另一種解決方案。 –