【发布时间】:2017-05-09 17:00:50
【问题描述】:
我有两个组件:组件 A 和组件 B,其中名为“过滤器”的 Comp B 是 Comp A 的子组件。
它们基于激活的路由,从中获取 URL 的更改并将调用发送到服务器并从中获取最新的“filterMap”。
Component_A.html
<section class="abc">
<filter [filterMap]=[filterMap]></filter>
<div *ngFor="let item of courses">
<!-- code -->
</div>
</section>
Component_A.ts
import { Component, OnInit, OnDestroy } from '@angular/core';
import { Router, ActivatedRoute } from '@angular/router';
import { Subscription } from 'rxjs';
@Component({
selector: 'component-a',
templateUrl: '../template/component-a.html'
})
export class ComponentAComponent implements OnInit, OnDestroy {
constructor(private _activatedRoute: ActivatedRoute,
private _router: Router) { }
ngOnInit() {
this._querySubscription = this._activatedRoute.queryParams
.subscribe(params => {
this.setQueryParams(params);
this._courseService.getData()
.subscribe(res => {
if (res.data) {
this.courses = res.data.courseDTOList;
this.filterMap = res.data.filterMap;
}
});
});
}
}
Component_B.html
<div class="xyz">
<span> Filter Result </span>
<section class="filter-section" *ngFor='let filter of filterData>
<!-- Code -->
</section>
</div>
Component_B.ts
import { Component, Input, Output, EventEmitter, OnInit, AfterViewInit } from "@angular/core";
import { Router, ActivatedRoute } from '@angular/router';
import { Subscription } from 'rxjs';
@Component({
selector: 'filter',
templateUrl: '../template/course-filter.html'
})
export class FilterComponent implements OnInit{
@Input() filterMap: any;
ngOnInit() {
if (this.filterMap[0])
this.filterData = this.filterMap[0];
}
}
问题:
重新加载页面后,两个组件都会被初始化并提供所需的输出。
如果 URL 发生更改,则会发送对服务器的调用,并且 filterMap 来自服务,但 Component_B 不会再次初始化,并且过滤器屏幕每次都保留旧数据。
【问题讨论】:
标签: angular typescript angular2-routing