Javascript 刷新Angular 4中的父零部件视图
我有两个组件,比如说,Javascript 刷新Angular 4中的父零部件视图,javascript,angular,typescript,Javascript,Angular,Typescript,我有两个组件,比如说,组件A是一个列表视图,组件B是一个详细视图。列表视图中的每一行都可以单击,单击后将重定向到组件B 组件B允许编辑和保存详细信息。我在组件B中添加了一个Back按钮,允许我返回列表视图 但我遇到的问题是,我看不到更新的列表视图,必须手动刷新浏览器,然后才能在那里看到更新的列表 我曾经尝试过直接使用window.location,它确实有效,但我并不喜欢这种方法 public back() { window.location.assign('/listview'); }
组件A
是一个列表视图,组件B
是一个详细视图。列表视图中的每一行都可以单击,单击后将重定向到组件B
组件B
允许编辑和保存详细信息。我在组件B中添加了一个Back
按钮,允许我返回列表视图
但我遇到的问题是,我看不到更新的列表视图,必须手动刷新浏览器,然后才能在那里看到更新的列表
我曾经尝试过直接使用window.location,它确实有效,但我并不喜欢这种方法
public back() {
window.location.assign('/listview');
}
我想知道有没有更好的办法来解决这个问题
更新:
public onSelected(model: MyModel) {
const detailsViewUrl = `/detailsview/${model.id}`;
this._router.navigateByUrl(detailsViewUrl );
}
听起来这是Angular在更改数组内容时的更改检测问题。请看这里: 这个问题的解决方案应该是可行的,但我过去曾使用过一种简单的方法来强制Angular识别数组中的更改,即在进行更改后重新分配数组:
myArray = [...myArray];
单击“后退”按钮时使用以下布线功能
public back() {
this._router.navigateByUrl('/listview')
}
or
public back() {
this._router.navigate('/listview')
}
试试这个
只是在内部再次调用列表视图,同时点击db,更新后的值将显示在列表视图中
使用以下命令调用路由:
this.router.navigate(['/listview']);
这似乎是一个变更检测问题,有一些方法可以手动触发变更检测,如下所示:
ChangeDetectorRef
public back() {
ChangeDetectorRef.detectChanges()
}
请参阅:您可以通过父级上的方法发出@Output EventEmitter,该方法在事件中查找存储在组件中的变量的更改,如下所示:
@Output someOutput: EventEmitter = new Event Emitter<any>;
这应该按计划进行 小心你的话:
A
是B
的父级,还是这两个组件是路由的?组件A和组件B之间的数据是如何通信的?@JoshuaChan我已经更新了这个问题,以显示ID是如何传递到详细信息视图的,也就是说,组件B
刚刚在内部再次调用列表视图,并点击db,更新后的值将显示在列表视图中。这不是angularjs,我在过去的一年中正在处理非常大规模的angular应用程序,我一次也不需要手动触发检测。如果变化检测没有触发,那么你可能没有以“角度”的方式做事情——请发布一个实例,很容易发现问题。
<b-component (someOutput)=getOutput($event)></b-component>
getOut(event){
let output = event;
if(this.something != output){
this.ngOnDestroy(); // or something that you can use to make it
}