Я создал компонент, который должен быть коммутатором. Вы использовали бы его так же, как и флажок. Это урезанная версия.Двусторонняя привязка данных в * ngFor
мои-switch.component.ts:
import {Component, Input, Output, EventEmitter} from '@angular/core';
@Component({
selector: 'my-switch',
template: `<a (click)='toggle()'>
<span *ngIf='value'>{{onText}}</span>
<span *ngIf='!value'>{{offText}}</span>
</a>`
})
export class MySwitchComponent {
@Input() onText: string = 'On';
@Input() offText: string = 'Off';
@Input() value: boolean;
@Output() change = new EventEmitter <boolean>();
position: string;
toggle() {
this.value = !this.value;
this.change.emit(this.value);
}
}
Мой план, чтобы использовать его как это:
родитель-component.ts
import {Component} from '@angular/core';
import {MySwitchComponent} from 'my-switch.component';
@Component({
selector: 'my-sites',
directives: [MySwitchComponent]
template: `<table>
<tr *ngFor='let item of items'>
<td>
<my-switch
[(value)]='item.options.option1'
(change)='logItem(item)'>
</my-switch>
</td>
</tr>
</table>`
})
export class MySitesComponent {
items: Object[] = [
{options: { option1: false }}
];
logItem(item) {
console.log(item)
}
}
Опять же, это упрощается, но я думаю, что иллюстрирует то, что я ожидаю. Мое ожидание заключается в том, что при щелчке переключателя, просмотр обновляется с «Выкл.» До «Вкл.», И значение параметра записывается в журнал. Проблема заключается в том, что значение, которое записывается выглядит следующим образом:
{options: {option1: false}}
Моя вера в том, что элементы итерируемая над доступны только для чтения. Я знаю, что я могу обойти эту проблему, но я хотел бы знать, возможно ли, что я пытаюсь сделать, или плохо информирован, а также почему это не работает.