是否可以通过路由器发送复杂对象? 以下是我正在做的和尝试做的事情:
在搜索页面中,用户可以单击其中一个结果上的按钮,该结果调用导致此行触发的方法。 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]"
}
答案 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并将您的对象保存在本地存储或会话存储中,并在整个应用程序中广泛使用