问题现象
在开发过程中,遇到前台页面数据不更新的问题。前台页面中采用了插值表达式绑定后台数据字段,在后台调用接口成功后会修改数据字段,但此时前台页面没有自动更新。如下文代码所示,就是很基础的插值表达式的使用,并无特别之处。
<span class="info-box-number text-success">{
{sumDataDto.thirdAll}}</span>
this.platformDataProxy.getSumData(input)
.subscribe((result: SumDataDto) => {
if (result) {
this.sumDataDto = result;
}
});
问题原因
这个问题涉及到Angular的一个特性——变化检测(Change Detection)。所用的框架是ABP框架,框架自动生成的页面中,添加了changeDetection
这条属性。这条属性指明了当前组件的变化检测策略是OnPush
。
@Component({
templateUrl: './home.component.html',
styleUrls: ['./home.component.css'],
animations: [appModuleAnimation()],
changeDetection:ChangeDetectionStrategy.OnPush
})
关于变化检测策略,有两种: