Angular 不更新 View (redux, ionic ...)
Angular does not update View (redux, ionic ...)
我有一个非常简单的 Ionic 页面。此页面显示 Reduxstate.In 此页面的状态,我有一个按钮可以进入另一个页面,在那里我可以更改状态并 return 返回。
如果我 return 返回视图将不会更新。我花了很长时间研究为什么这不起作用。很遗憾,没有成功。
组件
export class AssetDetailTechnicPage {
@select(['asset', 'asset'])
asset$: Observable<Asset>;
}
模板
<ion-content *ngIf="asset$ | async as asset">
<!--Leistung für Systemeinheit-->
<ion-card *ngIf="asset.assetSubKind.assetKindId === 2 && (asset.totalMemory || asset.hardDiskCapacity || asset.hardDiskTyp || asset.opticalDriveType
|| asset.bios || asset.displaySize || asset.cpu || asset.gpu)">
<ion-card-header>
<ion-icon name="build"></ion-icon> {{'PERFORMANCE' | translate}}
</ion-card-header>
<ion-card-content>
<ion-label color="primary" *ngIf="asset.totalMemory">
{{'MAIN_MEMORY' | translate}}:
</ion-label> {{asset.totalMemory}}
<ion-label color="primary" *ngIf="asset.hardDiskCapacity">
{{'HDD_CAPACITY' | translate}}:
</ion-label> {{asset.hardDiskCapacity}}
<ion-label color="primary" *ngIf="asset.hardDiskTyp">
{{'HDD_TYPE' | translate}}:
</ion-label> {{asset.hardDiskTyp}}
<ion-label color="primary" *ngIf="asset.opticalDriveType">
{{'OPTICAL_DRIVE' | translate}}:
</ion-label> {{asset.opticalDriveType}}
...... something similar goes on
试一试:
- 该页面位于 Ionic 超级选项卡组件中。我首先认为这与插件 ionic super-tabs 有关。我拿出来了也没用
可能跟redux有关?也许状态没有改变?也许 Angular 区不会发生这种情况?这就是为什么我重写了一点
@select(['asset', 'asset'])
asset$: Observable<Asset>;
asset: Asset;
constructor(private navCtrl: NavController) {
this.asset$.subscribe(asset => {
this.asset = asset;
console.log(NgZone.isInAngularZone());
});
}
editAsset() {
this.navCtrl.push(CreateAssetPage, {
edit: true
});
}
接受所有更改并将其存储在组件中。控制台输出始终为真(始终位于 Angular 区域)。为什么视图没有更新?
上次我尝试手动触发 changeDetection,但是这次
导致错误。
constructor(private navCtrl: NavController, private changeRef: ChangeDetectorRef) {
this.asset$.subscribe(asset => {
this.asset = asset;
console.log(NgZone.isInAngularZone());
if(this.asset) {
this.changeRef.detectChanges();
}
});
}
如果我从内容中删除 if 语句,一切正常...随便
<ng-container *ngIf="asset$ | async as asset">
<ion-content>
....
我有一个非常简单的 Ionic 页面。此页面显示 Reduxstate.In 此页面的状态,我有一个按钮可以进入另一个页面,在那里我可以更改状态并 return 返回。 如果我 return 返回视图将不会更新。我花了很长时间研究为什么这不起作用。很遗憾,没有成功。
组件
export class AssetDetailTechnicPage {
@select(['asset', 'asset'])
asset$: Observable<Asset>;
}
模板
<ion-content *ngIf="asset$ | async as asset">
<!--Leistung für Systemeinheit-->
<ion-card *ngIf="asset.assetSubKind.assetKindId === 2 && (asset.totalMemory || asset.hardDiskCapacity || asset.hardDiskTyp || asset.opticalDriveType
|| asset.bios || asset.displaySize || asset.cpu || asset.gpu)">
<ion-card-header>
<ion-icon name="build"></ion-icon> {{'PERFORMANCE' | translate}}
</ion-card-header>
<ion-card-content>
<ion-label color="primary" *ngIf="asset.totalMemory">
{{'MAIN_MEMORY' | translate}}:
</ion-label> {{asset.totalMemory}}
<ion-label color="primary" *ngIf="asset.hardDiskCapacity">
{{'HDD_CAPACITY' | translate}}:
</ion-label> {{asset.hardDiskCapacity}}
<ion-label color="primary" *ngIf="asset.hardDiskTyp">
{{'HDD_TYPE' | translate}}:
</ion-label> {{asset.hardDiskTyp}}
<ion-label color="primary" *ngIf="asset.opticalDriveType">
{{'OPTICAL_DRIVE' | translate}}:
</ion-label> {{asset.opticalDriveType}}
...... something similar goes on
试一试:
- 该页面位于 Ionic 超级选项卡组件中。我首先认为这与插件 ionic super-tabs 有关。我拿出来了也没用
可能跟redux有关?也许状态没有改变?也许 Angular 区不会发生这种情况?这就是为什么我重写了一点
@select(['asset', 'asset']) asset$: Observable<Asset>; asset: Asset; constructor(private navCtrl: NavController) { this.asset$.subscribe(asset => { this.asset = asset; console.log(NgZone.isInAngularZone()); }); } editAsset() { this.navCtrl.push(CreateAssetPage, { edit: true }); }
接受所有更改并将其存储在组件中。控制台输出始终为真(始终位于 Angular 区域)。为什么视图没有更新?
上次我尝试手动触发 changeDetection,但是这次 导致错误。
constructor(private navCtrl: NavController, private changeRef: ChangeDetectorRef) { this.asset$.subscribe(asset => { this.asset = asset; console.log(NgZone.isInAngularZone()); if(this.asset) { this.changeRef.detectChanges(); } }); }
如果我从内容中删除 if 语句,一切正常...随便
<ng-container *ngIf="asset$ | async as asset">
<ion-content>
....