在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团队知道路由器有严重的局限性。路由器正在进行中。预计会有很多变化。 –
谢谢你的回答。 我试着用服务分享数据的解决方案。我希望很快会有另一种解决方案。 –