#angular
#angular
Вопрос:
У меня есть несколько флажков, сгенерированных из массива объектов, полученных из API, каждый флажок представляет собой ингредиент тарелки, который можно переключать, и когда пользователь закончит настраивать тарелку, он сможет отправить тарелку с ее ингредиентами.
Итак, у меня есть * ngFor, подобный этому, где я отображаю ингредиенты тарелки:
<div
class="col-sm-6 affiancato"
*ngFor="let ingrediente of ingredientiPlu"
>
<div class="form-check">
<label class="custom-constrol">
<input
class="form-check-input"
checked="true"
type="checkbox"
[value]="ingrediente"
(change)="checkVariante(ingrediente, $event)"
/>
{{ ingrediente.desc }}
</label>
</div>
</div>
В то время как ingrediente — это следующий класс:
export class Varianti {
constructor(
public id?: string,
public desc?: string,
public prezzo?: number,
public prezzo_meno?: number,
public menu?: number[],
public stato?: string,
public ingrediente?: boolean
){}
}
variante.ingrediente
это свойство объекта, по которому я фильтрую объект в двух подмассивах:
varianti.filter((variante: Varianti) => {
variante.ingrediente
? this.ingredientiPlu.push(variante)
: this.variantiPlu.push(variante);
});
Как я могу получить все отмеченные флажки для объекта Variant при нажатии кнопки?
Ответ №1:
В вашей функции изменения вы могли бы сделать что-то вроде этого:
checkVariante(): void {
/** other code */
/** on change filter all true ingrediente to a component variable allChecked */
this.allChecked = this.ingredientiPlu.filter(i => i.ingrediente);
}
Комментарии:
1. На самом деле
ingrediente: boolean
это не поле, в котором указывается, отмечен объект или нет, но это свойство объекта.2. Что тогда им управляет? Я в замешательстве, потому что в конце вашего вопроса вы заявляете, что хотите получить все отмеченные флажки, которые соответствуют связанному объекту Variant. Если это так, вы должны использовать [ngModel], чтобы привязать значение ingrediente к флажку
3. на самом деле я не могу добавить другой параметр в Varianti, который будет управлять, отмечен объект или нет, поскольку я должен повторно отправить объект на сервер как есть. итак, я искал что-то вроде цикла или idk, что будет перебирать флажки и получать значение объекта из тех, которые отмечены
4. Какое значение задает начальное состояние флажка?
5. по умолчанию флажок не установлен, поэтому флажки не установлены, в то время как другая категория флажков по умолчанию установила значение true в html
Ответ №2:
Решается путем создания массива, Varianti
в который я нажимаю или удаляю объект (change)
следующим образом:
<div
class="col-sm-6 affiancato"
*ngFor="let variante of variantiPlu"
>
<input
class="form-check-input"
type="checkbox"
(change)="checkVariante(variante, $event)"
/>
{{
variante.desc
}}
</div>
checkVariante(oVariante: Varianti, event: any): void {
const variante = Object.assign({}, oVariante); // cloning Varianti object to don't affect the original one.
if (event.target.checked) { // checking if the checkbox has been checked
variante.prezzo = variante.ingrediente ? 0 : variante.prezzo; // changing object properties
variante.stato = variante.ingrediente ? 'SENZA' : 'PIU';
this.checkedVariants.push(variante); // pushing object to Varianti[]
}else {
this.checkedVariants = this.checkedVariants.filter(v => v.id !== variante.id); // if the checkbox has been unchecked removing the object from the array
}
console.log(this.checkedVariants);
}