問(wèn)題原因
這個(gè)問(wèn)題涉及到Angular的一個(gè)特性——變化檢測(cè)(Change Detection)。所用的框架是ABP框架,框架自動(dòng)生成的頁(yè)面中,添加了changeDetection這條屬性。這條屬性指明了當(dāng)前組件的變化檢測(cè)策略是OnPush。
@Component({
templateUrl: './home.component.html',
styleUrls: ['./home.component.css'],
animations: [appModuleAnimation()],
changeDetection:ChangeDetectionStrategy.OnPush
})
關(guān)于變化檢測(cè)策略,有兩種:
Default:Default策略是默認(rèn)策略,只要有值發(fā)生變化,就對(duì)組件及其子孫組件進(jìn)行檢查。
OnPush:OnPush策略是只有當(dāng)輸入數(shù)據(jù)(@Input)的引用發(fā)生變化或者有事件觸發(fā)時(shí),組件才進(jìn)行變化檢測(cè)。這種策略檢查不徹底,但效率高。
解放方案方案一,直接刪掉這條屬性賦值方案二,手動(dòng)進(jìn)行變化檢測(cè)
方案一很簡(jiǎn)單,就是直接刪掉組件中這條變化檢測(cè)策略的賦值語(yǔ)句。這樣組件將采用默認(rèn)策略,缺點(diǎn)就是效率變低了。
方案二就是在調(diào)用接口成功后,手動(dòng)調(diào)用變化檢測(cè)機(jī)制的觸發(fā)函數(shù)。這里要用到變化檢測(cè)對(duì)象。
首先引入變化檢測(cè)的模塊
import { ChangeDetectorRef } from “angular”;
然后聲明變化檢測(cè)對(duì)象
constructor(private changeDetection:ChangeDetectorRef) {}
在接口調(diào)用成功后調(diào)用變化檢測(cè)方法
this.platformDataProxy.getSumData(input)
.subscribe((result: SumDataDto) => {
if (result) {
this.sumDataDto = result;
this.changeDetection.detectChanges();
}
});
有點(diǎn)手動(dòng)調(diào)用C#的垃圾回收機(jī)制的味道。
參考資料:
https://links.jianshu.com/go?to=https://segmentfault.com/a/1190000010928087
https://links.jianshu.com/go?to=https://www.cnblogs.com/lskzj/p/11143233.html
更多編程相關(guān)知識(shí),請(qǐng)?jiān)L問(wèn):編程教學(xué)!!
更多關(guān)于云服務(wù)器,域名注冊(cè),虛擬主機(jī)的問(wèn)題,請(qǐng)?jiān)L問(wèn)西部數(shù)碼官網(wǎng):m.ps-sw.cn