Ionic通过NavParams将复杂对象传递给Modal

时间:2017-10-12 21:27:48

标签: typescript ionic-framework

我有一个Ionic页面,我正在尝试将一个对象数组传递给我的Modal页面:

export class SelectAddress{
    constructor(
        public id : string,
        public number : string,
        public line1 : string,
        public postcode: string
    ){}
}

我试图通过Ionic页面上的以下代码执行此操作:

  let modal = this.modalControl.create(SelectAddressPage, {addresses: this.addressResult as Array<SelectAddress>});
  modal.present();

在Modal上,我试图使用以下代码检索数据:

constructor(
          public platform: Platform,
          public params: NavParams,
          public viewCtrl: ViewController){
this.addresses = params.get('addresses') as Array<SelectAddress>;

随后在尝试循环结果时,我收到一条错误消息:

  

未捕获(承诺):错误:找不到不同的支持对象   '对象'类型的'[object Object]'。 NgFor仅支持绑定   像阵列这样的Iterables。错误:找不到不同的支持   对象'[object Object]'的类型为'object'。 NgFor仅支持绑定   对于像阵列这样的Iterables。

似乎我可以愉快地发送原始数据类型,如整数和字符串,但任何更复杂的东西似乎都不适用于此。

最初,在我的ModalControl上,我试图在我的AddressService中注入以检索数据,但是当我尝试这个时,依赖注入器无法注入依赖项。

我应该尝试通过navParams发送复杂类型还是我应该尝试别的东西?

2 个答案:

答案 0 :(得分:1)

我认为您的问题是您尝试使用打字稿class进行类型断言。要通过旧类型断言(let x = <Type> getX();)或较新的as运算符(let x = getX() as Type)确保变量属于某种类型,您需要定义interface或{ {1}}:

type

一般来说,Typescript类型是一个编译时构造,并且在运行时不存在,所以当你运行你的应用程序时,你实际上总是传递一个javascript原语类型。

答案 1 :(得分:0)

我得到的错误仅仅是因为我试图转换的类型不匹配,因为我引用了错误的变量。

这就是我的意思:

let modal = this.modalControl.create(SelectAddressPage, {addresses: this.addressResult.addresses as Array<SelectAddress>});

addressResult 地址,而非 addressResult

我很傻。