【发布时间】:2017-12-04 04:06:08
【问题描述】:
我有这两个路线定义,产品列表和产品详细信息:
{
name: "product",
url: "/product",
component: ProductListComponent,
resolve: [
{
token: "Products",
deps: [ApiService],
resolveFn: (api: ApiService) => api.getProducts().toPromise()
}
]
},
{
name: "product.detail",
url: "/:productcode",
component: ProductDetailComponent,
resolve: [
{
token: "Product",
deps: [Transition, ApiService],
resolveFn: (transition: Transition, api: ApiService) =>
api.getProduct(transition.params().productcode).toPromise()
}
]
}
在产品列表组件中,我有一组单选按钮来指示选择了哪个产品,而 ui-view 显示产品详细信息组件:
<div *ngFor="let product of Products" class="radio">
<label>
<input [(ngModel)]="SelectedProduct"
[value]="product"
(change)="RefreshDetail()"
name="selectedProduct"
type="radio">
{{product.Name}} {{product.Code}}
</label>
</div>
<ui-view></ui-view>
当用户点击单选按钮时,URL、产品详情组件和单选按钮同步正确。
但是当用户直接访问某个产品 URL 时,URL 和产品详细信息组件会显示正确的产品,但单选按钮不会。我所说的直接进入某个产品 URL 的意思是用户将 URL 输入到浏览器地址栏并回车。
我试图从 ngOnInit 中的 Transition 对象中获取 :productcode 的值:
ngOnInit() {
let prodcode = this.transition.params().productcode;
this.SelectedProduct = !!prodcode
? this.Products.find(product => product.Code == prodcode)
: null;
}
它适用于浏览器刷新,在单选按钮中选择了正确的产品。但不适用于浏览器后退按钮,没有选择单选按钮。 (可能是因为这个父状态没有重新初始化?)
无论如何,我不确定这是获取子状态参数值的惯用方式。
根据子状态参数值设置组件属性值的正确方法是什么?
【问题讨论】: