【发布时间】:2016-11-04 09:48:41
【问题描述】:
在我的 Angular2 应用程序中,在 UI 输入上加载了一个组件,该组件从 Web 服务中提取数据。 我想在用户输入更改时重新加载 aptSearchComponent 。尽管新数据是根据输入从服务中获取的,但不会重新加载组件。
输入在headerComponent中,当用户输入一些搜索条件并点击回车时,数据被传递到sharedService并路由到aptSearchComponent,从共享服务中提取数据并显示结果。
headerComponent 模板保持在顶部,aptSearchcomponent 模板显示在其下方。
@Component({
selector: 'app-header',
template: `
<div class="mdl-textfield__expandable-holder">
<input class="mdl-textfield__input" type="text" id="search" (keyup.enter)="Search($event)">
</div>
`,
})
export class HeaderComponent {
public apartments: Object[];
constructor(private apartmentService: ApartmentService,private router: Router,private sharedService: SharedService) {
this.apartmentService=apartmentService;
this.sharedService=sharedService;
}
Search(event){
this.apartmentService.searchApt2(event.target.value).subscribe(res => {this.sharedService.temp = res
this.router.navigate(['AptSearch'])});
}
}
如何在 Angular 2 中重新加载组件。基本上 this.aptDetails 中的数据已更改,但模板仍显示旧数据。
export class AptSearchComponent implements OnInit {
aptDetails: any;
constructor(private apartmentService: ApartmentService, private sharedService: SharedService,private zone:NgZone) {
this.apartmentService = apartmentService;
}
ngOnInit(){
this.aptDetails = this.sharedService.temp;
JSON.stringify(console.log(this.aptDetails)); //the data here is changed based on input, but the template is not refreshed and I still see the previous result.
}
}
我在构造函数()中尝试了以下但没有运气
this.zone.run(()=>this.aptDetails=this.sharedService.temp);
我正在使用 RC4,并且未导入 polyfills。
【问题讨论】:
-
您真的要重新加载组件吗?或者您只想重新加载
aptDetails -
Aptdetails,它在当前代码的控制台中重新加载。视图没有改变。
-
输入在哪里?请添加更多信息
-
为什么要重新加载组件?如果您想在输入更改时重新加载数据,请尝试使用 ngOnChanges。如果您想重新加载子视图,请使用 *ngIf 和 ng onChanges。您能添加更多信息吗?
标签: javascript node.js web-services angular