2017-06-14 75 views
0

我工作在角2.我面对的是,我从父母调用子组件的函数。和子功能更新我的数据集,最初加载HTML。但是当我站在同一个html上并再次调用该函数时,它在控制台中显示该数据集已加载新数据但未加载其html。 完整的场景: 我在我的标题部分有一个搜索栏。从重定向到结果页面的位置以及调用其显示查询数据的函数。但是当我已经搜索过查询并且站在结果页面上时。新的数据查询将再次调用该函数,数据集将被更新。但组件不会根据该数据集重新加载html。我如何重新加载它? 有什么建议。? 这里是代码示例。 我header.ts为什么在更新后DOM不更新在角度2中设置数据?

Search(){ 
localStorage.setItem('val',JSON.stringify(this.query)); 

this.router.navigate(['/results']); 
this.mobiles.ngOnInit(); 

     } 


} 

resuls.ts

ngOnInit() { 


     this.query=JSON.parse(localStorage.getItem('val')); 
alert(this.query) 

this.httpService.searchGeneric(this.query,1).subscribe(
     data => { 
     this.Getspecs = data; 

    this.count=data['totalItems']; 

    this.ref.detectChanges(); 
     this.ref.reattach(); 

    console.log(data) 

    } 
    ); 

为什么新的更改不会出现在结果成分的HTML?有没有人有这个想法?需要任何帮助。谢谢。

+0

您是否在调用结果页面上的函数后重新路由到同一页面。如果你在一个组件上,并且你重新加载了相同的组件,Angular不会刷新你的绑定。它的性能改进不会再为已经加载的组件刷新绑定。 –

+0

阅读[https://angular.io/guide/router#observable-params-and-component-reuse]这将告诉你实现你想要的方式。 –

回答

0

这是Angular的工作方式。

您正在使用相同的功能,这意味着您将重新路由到相同的组件。

如果你在一个组件上,并且你重新加载了相同的组件,Angular不会刷新你的绑定。它的性能改进不会再为已经加载的组件刷新绑定。

但是,角度确实提供了一种方法,以防您需要在重新加载时明确更改绑定。您可以使用params观察到并订阅params关于路线更改。此订阅中的任何操作都将强制更改绑定。

更多信息here at Angular official docs。

+0

任何简单的例子?或者您可能会在我的代码中提供的任何修改? – maadi