在Angular 2中,我有一个显示MyObjectComponent
数组的myObjects
。我从myObjects
MyObjectService
调用@CanActivate
来获取此@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;
}
在我的组件中,我通过
获取数据myObjects
这是有效的,但前提是我添加到next.params['myObjects']
的{{1}}是一个字符串。
如果我添加一个对象,我会得到一个
打字稿错误:TS2322:类型'any []'不能指定为'string'类型。
但是,生成的JavaScript按预期工作。但我想摆脱Typescript错误消息。
由于ComponentInstruction
中的params对象的定义:
declare class ComponentInstruction {
... some other data ...
params: {
[key: string]: string;
};
}
当然我可以更改班级ComponentInstruction
,但这有点难看。
有没有人知道如何摆脱这条错误信息?
答案 0 :(得分:1)
params
应该被视为不可变的。
我建议您使用此评论https://github.com/angular/angular/issues/4112#issuecomment-153811572中链接到的Plunker中演示的方法,并使用共享服务而不是路由参数传递值。
另一种方法是使用
_router.navigate(...)
并在那里传递自定义路线参数。
对于这种情况,您还需要使用Plunker中演示的方法来获取应用程序Router
实例。