如何保存最后的组件更改?
How to save last components changes?
存在由条件 ngif 激活的组件。
使用可以执行 activity,例如打开菜单、设置活动元素或仅在文本区域内写入文本。
在该用户将此组件留给另一个 ngif 之后。
用户 returns 到上一个组件后。
如何恢复最后 activity、组件更改以继续工作?
我知道,使用服务可能会解决,但是mu组件也有它自己的逻辑。
with ngIf 组件被销毁并根据值创建。我认为您应该将数据保存在相关组件的 OnDestroy 挂钩中的主机组件中,使用@output 并在主机组件中处理此事件,并在需要时使用@input 将数据传递给组件。
父组件HTML
<app-child-component *ngIf="showThisComponent == 'comp1' " (saveData)="onSaveData($event)" [showData]="showThisData[comp1]"
/>
父组件.ts
onSomeAction() {
this.showThisComponent = 'comp1';
}
onSaveData(data) {
this.showThisData[comp1] = data;
}
子组件.ts
@Input() showData: any;
@Output() saveData: new EventEmitter<any>();
ngOnDestroy() {
this.saveData.emit(data);
}
你可以在这些方面做些事情我希望你明白了。
因为 ngIf
指令总是销毁不满足条件的组件,所以你不应该使用 ngIf
到 "toggle" 将实时数据存储在内部而不存储在其他地方的组件当它被摧毁时。我建议改用 CSS 来切换组件可见性。
<your-component [ngStyle]="{'display' : yourToggleExpressions ? 'none' : 'block'}"><your-component/>
这样,当它仍然 运行 落后时,你就可以从 UI 中隐藏它。
你应该使用 canDeactivated
守卫,它将在 ngOnDestroy
之前调用。
interface CanDeactivate<T> {
canDeactivate(component: T,
currentRoute: ActivatedRouteSnapshot,
currentState: RouterStateSnapshot,
nextState?: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean
}
存在由条件 ngif 激活的组件。
使用可以执行 activity,例如打开菜单、设置活动元素或仅在文本区域内写入文本。
在该用户将此组件留给另一个 ngif 之后。
用户 returns 到上一个组件后。
如何恢复最后 activity、组件更改以继续工作?
我知道,使用服务可能会解决,但是mu组件也有它自己的逻辑。
with ngIf 组件被销毁并根据值创建。我认为您应该将数据保存在相关组件的 OnDestroy 挂钩中的主机组件中,使用@output 并在主机组件中处理此事件,并在需要时使用@input 将数据传递给组件。
父组件HTML
<app-child-component *ngIf="showThisComponent == 'comp1' " (saveData)="onSaveData($event)" [showData]="showThisData[comp1]"
/>
父组件.ts
onSomeAction() {
this.showThisComponent = 'comp1';
}
onSaveData(data) {
this.showThisData[comp1] = data;
}
子组件.ts
@Input() showData: any;
@Output() saveData: new EventEmitter<any>();
ngOnDestroy() {
this.saveData.emit(data);
}
你可以在这些方面做些事情我希望你明白了。
因为 ngIf
指令总是销毁不满足条件的组件,所以你不应该使用 ngIf
到 "toggle" 将实时数据存储在内部而不存储在其他地方的组件当它被摧毁时。我建议改用 CSS 来切换组件可见性。
<your-component [ngStyle]="{'display' : yourToggleExpressions ? 'none' : 'block'}"><your-component/>
这样,当它仍然 运行 落后时,你就可以从 UI 中隐藏它。
你应该使用 canDeactivated
守卫,它将在 ngOnDestroy
之前调用。
interface CanDeactivate<T> {
canDeactivate(component: T,
currentRoute: ActivatedRouteSnapshot,
currentState: RouterStateSnapshot,
nextState?: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean
}