【发布时间】:2017-12-06 18:36:30
【问题描述】:
我有一个复选框组件(我自己的设计)并像这样使用它:
主要组件:
let allowChenge = false;
let field = {
text: 'text text text',
visible: true
}
checkField(value: boolean, field: any) {
// when I get value=false
if (this.allowChenge) {
this.field.visible = value;
} else {
this.field.visible = true;
}
}
主组件 HTML:
<p-checkbox
[value]="field.visible"
[text]="field.text"
[readonly]="false"
(onSelect)="checkField($event, field)"
></p-checkbox>
复选框组件:
@Component({
selector: 'p-checkbox',
template: `
<div style="float: left;">
<label
class="switch"
[class.checked]="value"
[style.opacity]="readonly ? '0.4' : '1.0'"
>
{{ text }}
</label>
</div>
`
})
export class CheckBoxComponent {
@Input() value: boolean;
@Input() readonly: boolean = false;
@Input() text: string;
@Output() onSelect: EventEmitter<any> = new EventEmitter();
constructor(public _elRef: ElementRef) {
}
ngOnChanges(changes: any) {
this.value = changes.value.currentValue;
}
select() {
if (!this.readonly) {
this.value = !this.value;
this.onSelect.emit(this.value);
}
}
}
在某些情况下,当我单击复选框时,我不需要更改 field 对象 visible 值。当field.visible = true 和我点击ckeckbox 时,复选框this.value 变为false。然后在父组件上我将它设置回true。但是复选框用值false表示。
【问题讨论】:
-
我知道你的代码中没有
ngModel,但它的底层机制是相同的:从变化检测器的角度来看,没有任何变化,所以你需要使用setTimeout()跨度> -
我尝试在 this.field.visible = true 周围使用 setTimeout();在父组件中。没有帮助。
-
ngModel 指令我在其他输入类型字段中使用。这里我根据值设置类,所以虽然我不使用任何输入 -> 我不需要使用 ngModel 指令。
-
我从来没有说过你应该使用
ngModel,我说它在这种行为的底层机制是相同的。
标签: angular checkbox components