Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 刷新Angular 4中的父零部件视图_Javascript_Angular_Typescript - Fatal编程技术网

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
        }