【发布时间】:2016-12-14 16:04:05
【问题描述】:
我是 Angular2 的新手,我已经习惯了 Angular 1 的摘要循环,这意味着如果我更新视图的范围,我可以通过调用 $scope.$digest() 手动触发摘要。但是,我不确定如何在 Angular2 中执行此操作,尤其是考虑到新框架没有旧版本所具有的隐式数据绑定。
这是我的问题。我有一个路由,当一个带有参数的 url 被点击时加载一个组件:
// Router
export const AppRoutes : RouterConfig = [
{
path: 'my/:arg/view',
component: MyComponent
}
]
然后我有这个组件:
// Component
export class MyComponent {
constructor(private route : ActivatedRoute,
private r : Router) {
let id = parseInt(this.route.params['value'].id);
console.log(id);
// do stuff with id
}
reloadWithNewId(id:number) {
this.r.navigateByUrl('my/' + id + '/view');
}
}
假设我导航到 url /my/1/view。它将调用构造函数并记录数字1。但是,如果我使用新的 id reloadWithNewIf(2) 调用 reloadWithNewId,则不会再次调用构造函数。如何手动重新加载组件?
【问题讨论】:
-
公认的解决方案(订阅 ngOnInit() 中的参数)是首选方法,但它并不总是有效。例如,我正在使用 ng2-charts github.com/valor-software/ng2-charts,该组件无法正确响应 x 轴标签 (github.com/valor-software/ng2-charts/issues/547) 的变化。如果第三方组件中存在此类错误,是否有办法从字面上重新加载该组件?