Angular 2可以沿路由器传递复杂对象吗?

时间:2017-01-14 15:55:21

标签: angular angular2-routing

是否可以通过路由器发送复杂对象? 以下是我正在做的和尝试做的事情:

在搜索页面中,用户可以单击其中一个结果上的按钮,该结果调用导致此行触发的方法。 this.router.navigate(['profile-detail', selection]);

selection对象在导航之前就是这样的。

{
  profile: {
    id: number,
    fname: string,
    lname: string
  },
  contact: {
    type: string,
    address: string
  },
  books: [{
    title: string,
    author: string
  }]
}

但是,当我们到达个人资料详情页面时,this.route.snapshot.params会将此作为实际数据:

{
  profile: "[object Object]",
  contact: "[object Object]",
  books: "[object Object]"
}

2 个答案:

答案 0 :(得分:6)

不,路由器需要将数据序列化到浏览器URL栏,而URL栏只支持字符串。

您可以使用共享服务在非父/子或兄弟姐妹的组件之间传递对象,或像路由器那样动态添加对象。

另见https://angular.io/docs/ts/latest/cookbook/component-communication.html#!#bidirectional-service

解析器也可能有效,具体取决于您的具体要求https://angular.io/docs/ts/latest/guide/router.html#!#resolve-guard

答案 1 :(得分:0)

另一个可以使用JSON.stringify并将您的对象保存在本地存储或会话存储中,并在整个应用程序中广泛使用