#angular
#угловой
Вопрос:
У меня есть список флажков, созданный с использованием:
<div *ngFor="let rule of rules">
<div class="form-check">
<input type="checkbox" [(ngModel)]="rule.isActive" name="{{rule.ruleId}}" id="{{rule.ruleId}}" class="form-check-input">
<label class="form-check-label"> {{rule.description}} - {{rule.message}}</label>
</div>
</div>
Все это в приведенной ниже форме:
<form #ruleForm="ngForm" (ngSubmit)="updateRule(ruleForm.value)" novalidate>
в методе UpdateRule есть ли возможность узнать, какой из флажков изменился? Я должен сделать сохранение, но вместо того, чтобы сохранять их все, я хочу сохранить только те, которые изменились.
Комментарии:
1. можете ли вы опубликовать образцы данных для правил?
Ответ №1:
вы можете отслеживать проверенные идентификаторы правил, вы можете сделать это следующим образом :
component.html
<div *ngFor="let rule of rules">
<div class="form-check">
<input type="checkbox" (change)="onCheck($event,rule.ruleId)" [checked]="rule.isActive" value="{{rule.ruleId}}" name="{{rule.ruleId}}" id="{{rule.ruleId}}" class="form-check-input">
<label class="form-check-label"> {{rule.description}} - {{rule.message}}</label>
</div>
</div>
Component.ts
activeRulesIds= []; // declare and initialize'
...........
...........
...........
onCheck(event, $value) {
if (event.target.checked) {
this.activeRulesIds.push($value);
}
else {
this.activeRulesIds.splice(this.activeRulesIds.indexOf($value), 1);
}
}
Комментарии:
1. Этот код только вводит в activeRulesIds проверенные правила, но не измененные правила. Я думаю, что использовать вспомогательную переменную, [проверено] и (изменить) — это плохое использование Angular. Конечно, код работает, но лично я предпочитаю «более угловой ответ»
Ответ №2:
Просто добавьте новое свойство в ваше «правило» (например, вы можете вызвать «измененное») и разделите [(ngModel)] в [ngModel] и (ngModelChange)
<input type="checkbox" [ngModel]="rule.isActive"
(ngModelChange)="rule.changed=true;rule.isActive=$event">
После этого отправляйте только те правила, которые rule.changed==true
const send=rules.filter(x=>x.changed);