angular - 在 Angular 8 中更改组件时复选框不保持选中状态
问题描述
即使我离开我的组件,我也试图检查我的复选框列表。问题是我什至可以成功保存选定的复选框,但是当我离开组件并返回时,它们不会保持选中状态,我不知道我错过了什么
这是我的按钮,里面有复选框。
<mat-button-toggle-group class="row"
name="payments">
<mat-button-toggle class="col">
<button type="button"
[ngClass]="{'clicked': toggleState}"
class="payment-button"
(click)="togglePayments()">
<mat-icon aria-label="{{'csa.payments-title' | translate}}">payments</mat-icon>
<mat-icon>keyboard_arrow_down</mat-icon>
</button>
<div *ngIf="show"
class="toggle-checkbox">
<mat-checkbox *ngFor="let payment of payments"
class="col"
[value]="payment"
[checked]="paymentState[payment]"
(change)="onPaymentsChange($event, payment)"
[class.show]="show">
{{payment | translate}}
</mat-checkbox>
</div>
</mat-button-toggle>
</mat-button-toggle-group>
import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core'
import { ICategory, ICategoryDto } from '@app/api/models/api-models'
@Component({
selector: 'payments-button',
templateUrl: 'payments-button.component.html',
styleUrls: ['./payments-button.component.scss'],
})
export class PaymentsButtonComponent implements OnInit {
@Input() payments: ICategory[]
// @Output() getChecklist: EventEmitter<any> = new EventEmitter()
show = false
paymentState: { [key: string]: boolean }
constructor() {
this.paymentState = {}
}
ngOnInit() {
console.log('payments', this.payments)
/* if (this.payments) {
this.payments.forEach((payment: string) => {
console.log(payment)
})
} */
this.payments.forEach((payment: ICategory) => {
this.paymentState[payment.name] = false
})
}
togglePayments() {
this.show = !this.show
}
/**
* When users check/unckeck some payments.
* @param event click event
* @param payment payment selected
*/
onPaymentsChange(event, payment: string) {
this.paymentState[payment] = !this.paymentState[payment]
// this.getChecklist.emit(this.paymentState[payment])
}
}
这就是我调用组件的方式
<payments-button [payments]="this.categoriesAndCountries.payments"
(getChecklist)="onChecked($event)">
</payments-button>
getChecklist 除了返回 true 或 false 之外没有做任何事情。 https://imgur.com/a/KyzSArF 当我单击基本数据时,支票将返回为空关于我缺少什么的任何帮助?
解决方案
但是当我离开组件并回来时,它们不会保持检查状态
发生这种情况是因为您将付款状态保留在组件中,这也意味着当您的组件被销毁时,您会丢失组件拥有的所有数据。
解决此问题的一种方法是将状态存储在服务中:
paymentState.service.ts
paymentState: { [key: string]: boolean }
this.paymentState = {}
setPaymentItemState (item, value) {
this.paymentState[item] = value;
}
付款按钮.component.ts
get paymentState () {
return this.paymentStateService.paymentState;
}
constructor (private paymentStateService: PaymentStateService) { }
/* ... */
onPaymentsChange(event, payment: string) {
this.paymentStateService.setPaymentItemState(payment, !this.paymentState[payment])
}
/* ... */
推荐阅读
- node.js - Nodejs续集问题
- mysql - mysql。我如何 COUNT() 但在不同的列上插入不同的值?
- javascript - 使用 javascript/jquery 从先前输入的自动表单填充值
- python - 如何让机器人加入频道?
- r - 如何在 rvest 会话中发布
- pdf - 如何使用数学矩阵将markdown导出为pdf
- javascript - javascript中的映射方法给出了语法错误
- bash - 仅在特定行 bash 脚本上查找最大值
- p5.js - 有没有办法在“处理”中对同一个立方体的不同表面应用不同的纹理?
- regex - 打开Refine:比较单元格内的字符串,并删除某个字符后的所有内容