html 如何在Angular 服务中保存组件数据?

g6baxovj  于 2022-12-16  发布在  Angular
关注(0)|答案(3)|浏览(155)

我目前在Angular上有一个骰子游戏组件,掷骰子的结果保存在TypeScript数组中,然后以HTML显示。现在我被告知需要将结果保存在服务中,这样,如果我转到另一个页面并返回,仍然显示相同的结果。我已经搜索了各种方法,但我只能找到将数据从一个组件保存到另一个组件的方法。不在同一个。2如果有人知道我如何能做到这一点,请帮助!3这是我的代码。4问候,

diceResults: number[] = [];

  rollTheDice() {
    for (let i in this.diceGame) {
      for (let a = 0; a < this.diceGame[i].numberOfDices; a++) {
        this.diceResults.push((Math.random() * (this.diceGame[i].numberOfFaces - 1) + 1))
      }
    }
  }

 <button *ngFor="let dice of diceResults" class="btn btn-large bg-warning m-1">{{ dice | number: '1.0-0' }}</button>
pxq42qpu

pxq42qpu1#

建立在@ CallMeAnytime好的回答上。
要声明一个服务,你需要在模块中指定它为提供者,为了简单起见,在app.module.ts中这样说:

@NgModule({
  declarations: [AppComponent],
  imports: [...],
  providers: [YourServiceName],
})
export class AppModule {}

然后创建服务文件yourServiceName.service.ts

@Injectable({providedIn: 'root'}) //Note that you will need to declare it as `@Injectable`. 
export class YourServiceName {
  private _diceResults: number[] | null = null;
  public set diceResults(result: number[] | null) {
    this._diceResults = result;
    if(result != null) localStorage.setItem("diceResults", JSON.stringify(result));
    else localStorage.removeItem("diceResults");
  }

  public get diceResults(): number[] | null {
    if(this._diceResults == null) {
      const data = localStorage.getItem("diceResults");
      this._diceResults = JSON.parse(data)
    }
    return this._diceResults;
  }
}

然后将变量、getter和setter声明为前面提到的@CallMeAnytimeOkay。
要使用该变量,您需要将服务注入到组件中。

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.scss'],
})
export class AppComponent {
  diceResults: number[] = [];

  constructor(public yourService: YourServiceName) { }

  rollTheDice() {
    for (let i in this.diceGame) {
      for (let a = 0; a < this.diceGame[i].numberOfDices; a++) {
        this.diceResults.push((Math.random() * (this.diceGame[i].numberOfFaces - 1) + 1))
      }
    }
    this.yourService.diceResults = this.diceResults;
  }
}
5us2dqdw

5us2dqdw2#

您可以按如下方式将数据保存在服务中:

export YourServiceName {
private diceResults: number[] = [];

}

在该服务中创建getter和setter:

setDice(diceValues : number[]) {
this.diceResults = diceValues
}
getDice():void {
return this.diceResults
}

然后可以在组件中调用这些。

igsr9ssn

igsr9ssn3#

创建一个新的服务,该服务应监督数据保存并实现该服务中的逻辑。它应具有一个合适的对象来存储值。它应具有操作该对象的函数,最好具有一个保存要持久化的值的参数。
然后将服务注入到创建/计算骰子结果的组件中,然后以结果作为参数从服务调用操作方法,例如当您按下按钮时。
进一步阅读:Angular Data Tutorial

相关问题