实际上,我处于有两个屏幕的情况。一个是listComponent,另一个是DetailComponent。
在ListComponent.ts上
this.activatedRoute.queryParamMap.subscribe((params) => {
console.log('param:' + params.get('updatedIndex'));
})
当我点击列表中的任何项目时,我导航到ListDetails屏幕,并且在那里我对项目进行了一些更改。我希望每当我返回时,这些更改都能反映在ListComponent上。所以我在detailComponent中所做的是
this.routerExtension.navigate([], {
relativeTo: this.activatedRoute, queryParams: {
updatedIndex: this.listIndex
}, queryParamsHandling: 'merge'
})
据我了解,这将更新我的路线中的queryparams。每当我返回listcomponent屏幕时,可观察到的queryParamMap都会触发。但是,当我第一次在ListComponent上导航时,我的queryParamMap仅触发一次。
下面是我的路线。
const routes: Routes = [
{ path: "list-details", component: ListDetailsComponent },
{ path: "", component: MyListComponent },
];
答案 0 :(得分:0)
创建一个可观察对象并从屏幕1监听它,然后通过屏幕2将所有更新推送到该可观察对象并关闭它。
notify.service.ts
import { Injectable } from '@angular/core';
import { Subject } from 'rxjs-compat/Subject';
@Injectable({
providedIn: 'root'
})
export class NotifyService {
private refreshDataForView = new Subject<any>();
refreshDataForParentViewObservable$ = this.refreshDataForView.asObservable();
public relaodDataForParentView(data: any) {
if (data) {
this.refreshDataForView.next(data);
}
}
}
第二个componenet.ts
constructor(
private notifyService: NotifyService
) { }
goBack() {
this.notifyService.relaodDataForParentView({ data: 'any data you wanrt to pass here ' });
this.router.back();
}
第一个component.ts
reloadDataSubscription: any;
constructor(
private notifyService: NotifyService
) {}
ngOnInit() {
this.reloadDataSubscription = this.notifyService.refreshDataForParentViewObservable$
.subscribe((res) => {
console.log('======', res);
// do what you want to do with the data passed from second view
});
}