我有一个父级组件,包含四个选项卡,每个选项卡都是单个组件。如果使用[hidden],则在组件之间切换时,我不会丢失数据,但是当我使用* ngIf时,我会丢失填充在组件输入值内部的数据。我们如何避免丢失数据?
答案 0 :(得分:1)
这是因为当您使用[hidden]
时,包含数据的组件不会被销毁,只是不会显示。当您使用ngIf
时,组件将被销毁,您的数据也将被销毁。
为避免这种情况,您可以使用服务来跟踪数据。服务是可以散布数据的类,即使所有组件都被破坏,该服务仍将拥有数据。
服务可以像这样简单:
import { Injectable } from "@angular/core";
@Injectable()
export class ExampleService {
someDataYouWantToKeep:string = "data"
someOtherDataYouWantToKeep:number = 1
}
然后在组件中可以像这样使用它:
import { Component, OnInit } from '@angular/core';
import { ExampleService } from '<path to file>';
@Component({
selector: 'app-setup',
templateUrl: './setup.component.html',
styleUrls: ['./setup.component.scss']
})
export class ExampleComponent implements OnInit {
constructor(private service: ExampleService) { }
ngOnInit() {
console.log(this.service.someDataYouWantToKeep)
this.service.someOtherDataYouWantToKeep = 2
}
}
在构造函数中,您可以向组件注入private service: ExampleService
,然后与this.service
一起使用。
答案 1 :(得分:0)
正如@mika所说,如果您想避免丢失数据,则有两种选择:
*ngIf
指令,而应使用[hidden]
ngOnDestroy
钩子将数据保存在某处。此解决方案可能会导致性能问题,具体取决于您如何保存(本地存储,数据库等)