gpt4 book ai didi

angular - *ngFor 中的双向数据绑定(bind)

转载 作者:太空狗 更新时间:2023-10-29 17:45:49 25 4
gpt4 key购买 nike

我创建了一个用作开关的组件。您可以像使用复选框一样使用它。这是精简版。

我的开关.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);
}
}

我的计划是这样使用它:

父组件.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)
}
}

同样,这是简化的,但我认为说明了我的期望。我的期望是,当单击开关时, View 从“关闭”更新为“打开”,并记录该选项的值。问题是记录的值如下所示:

{options: {option1: false}}

我相信被迭代的项目是只读的。我知道我可以解决这个问题,但我想知道我正在尝试做的事情是否可行或不明智,以及为什么它不起作用。

最佳答案

Angular "de-sugars" the [(x)] syntax into an x input property for property binding and an xChange output property for event binding. -- reference

因此,如果您将输入属性命名为value,则必须将输出属性命名为valueChange:

@Output() valueChange = new EventEmitter <boolean> ();

这是您唯一遗漏的拼图。您现在在父组件和子组件之间具有双向数据绑定(bind)。

如果你想在子组件改变/emit()值时执行一些逻辑,在父组件中捕获(valueChange)事件:

(valueChange)='logItem(item)'>

Plunker


我也建议

console.log(JSON.stringify(item))

关于angular - *ngFor 中的双向数据绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37625265/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com