Angular2:将对象从@CanActivate()传递到组件 - >打字稿错误

时间:2016-04-23 11:37:30

标签: typescript angular

在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,但这有点难看。

有没有人知道如何摆脱这条错误信息?

1 个答案:

答案 0 :(得分:1)

params应该被视为不可变的。

我建议您使用此评论https://github.com/angular/angular/issues/4112#issuecomment-153811572中链接到的Plunker中演示的方法,并使用共享服务而不是路由参数传递值。

另一种方法是使用

_router.navigate(...)并在那里传递自定义路线参数。

对于这种情况,您还需要使用Plunker中演示的方法来获取应用程序Router实例。