Angular2:在父级上刷新不会直观地更新子数据

时间:2017-05-17 13:46:13

标签: angular typescript angular-routing page-refresh

这有点难以描述,因为有多个(错误的)结果,我只是不知道问题所在。但是,预期的结果很明确,如果遗漏了任何内容,我可以更新问题。

情况

显示个人资料详细信息(父级)时,应通过更改路径/profile/id中的参数来导航到另一个个人资料详细信息。因此,我订阅了the accepted answer of this question中提到的param。

// PARENT
constructor(private _route: ActivatedRoute) {
    this.profileId = _route.snapshot.params['id'];
}

ngOnInit() {
    this._route.params.subscribe(params => {
        this.profileId = params['id'];
        this.getResultByAsyncFunctionParent();
    }); 
}

配置文件详细信息存在于一些HTML代码和一些子代中。父更新中的所有数据,但子中的代码不更新(应更新)。大多数孩子都使用相同的id,并使用@InputngOnChanges()向下传递。我可以通过调试应用程序的流程来确认是否使用了正确的id来获取预期的数据,并且调用了所有需要的方法。

// CHILD
@Input() childprofileId: string;

ngOnChanges(changes: SimpleChanges) {
    if (changes['childprofileId']) {
        if (this.childprofileId != null) {
            this.getResultByAsynFunctionChild();
        }
    }
}

Parent使用HTML中的Child,如

<app-projectview [childprofileId]="profileId"></app-projectview>

问题

即使Child的模型发生变化,视图也不会更新。 如何强制更新子项(无需导航到空白页面并导航回来或类似的东西)?我已尝试ApplicationRef.tick()中提到的NgZone.run(callback)ChangeDetectorRef.detectChanges()// CHILD getResultByAsynFunctionChild(): void { this._planningService.getCollection().subscribe( (toReturnPlanning: Planning[]) => { this.planning = toReturnPlanning; if (this.planning != null) { ... // Chart data logic, assign planningData in data } // Reassign the new data in the chart this.barChartData[0].data = data; } }); } ,但这些似乎并不符合我的情况。

当前结果

显示的结果不是一个,而是四个可能(错误),我认为这与我的异步功能有关。但是,解决问题应该与这些功能无关。

我们首先像所描述的情况一样导航,从一个配置文件细节导航到另一个。

  1. 儿童没有更新,仍会显示上一个个人资料中的数据。
  2. 儿童 更新并合并上一个和当前个人资料中的数据。
  3. 儿童 更新并合并上一个和空对象的数据。
  4. Child 更新并合并当前和空对象的数据。
  5. the accepted answer of this question

    • IMG 1 - 起点:导航前的计划(正确)
    • IMG 2 - 端点:导航后计划(不正确)
    • IMG 3 - 预期结果:导航后计划(正确)

    异步功能示例

    {{1}}

    修改

    • 添加了案例3的可视示例
    • 添加了异步功能示例

0 个答案:

没有答案