同一个变量的输入和输出
input and output for the same variable
我有一个可以从 parent 和 child 编辑的变量。
parent.html:
<div *ngIf="editEnabled">
<mat-icon (click)="disableEdit()">cancel</mat-icon>
</div>
<child [(editEnabled)]="editEnabled"></child>
parent.ts:
export class ParentComponent {
editEnabled: boolean;
disableEdit(){
this.editEnabled = false;
}
}
Child.html:
<div *ngIf="!editEnabled">
<mat-icon (click)="enableEdit()">settings</mat-icon>
</div>
child.ts
private _editEnabled: boolean;
@Input()
set editEnabled(value: boolean) {
this._editEnabled = value;
}
get editEnabled(): boolean {
return this._editEnabled;
}
enableEdit(){
this.editEnabled = true;
}
但我无法在两个组件之间传达 editEnabled。
我的错误在哪里?
定义双绑定变量时,需要定义一个@Input-decorator,变量名:
@Input() editEnabled: boolean;
和一个带有变量名和后面的 Change
的 @Output-decorator,因为这个会发出变量的变化事件:
@Output() editEnabledChange: EventEmitter<boolean> = new EventEmitter<boolean>();
然后在更改子组件内的变量时,调用this.editEnabledChange.emit(true)
。您与 [(...)]
的双重绑定是正确的!
如果您不想在每次更改变量 correct
时都添加 editEnabledChange
-发射器,您可以这样写:
_correct: boolean;
@Input()
set correct(val: boolean) {
this.correctChange.emit(val);
this._correct = val;
}
get correct() {
return this._correct;
}
@Output()
correctChange: EventEmitter<boolean> = new EventEmitter<boolean>();
<app-pin [(correct)]="isPinCorrect"></app-pin>
我有一个可以从 parent 和 child 编辑的变量。
parent.html:
<div *ngIf="editEnabled">
<mat-icon (click)="disableEdit()">cancel</mat-icon>
</div>
<child [(editEnabled)]="editEnabled"></child>
parent.ts:
export class ParentComponent {
editEnabled: boolean;
disableEdit(){
this.editEnabled = false;
}
}
Child.html:
<div *ngIf="!editEnabled">
<mat-icon (click)="enableEdit()">settings</mat-icon>
</div>
child.ts
private _editEnabled: boolean;
@Input()
set editEnabled(value: boolean) {
this._editEnabled = value;
}
get editEnabled(): boolean {
return this._editEnabled;
}
enableEdit(){
this.editEnabled = true;
}
但我无法在两个组件之间传达 editEnabled。
我的错误在哪里?
定义双绑定变量时,需要定义一个@Input-decorator,变量名:
@Input() editEnabled: boolean;
和一个带有变量名和后面的 Change
的 @Output-decorator,因为这个会发出变量的变化事件:
@Output() editEnabledChange: EventEmitter<boolean> = new EventEmitter<boolean>();
然后在更改子组件内的变量时,调用this.editEnabledChange.emit(true)
。您与 [(...)]
的双重绑定是正确的!
如果您不想在每次更改变量 correct
时都添加 editEnabledChange
-发射器,您可以这样写:
_correct: boolean;
@Input()
set correct(val: boolean) {
this.correctChange.emit(val);
this._correct = val;
}
get correct() {
return this._correct;
}
@Output()
correctChange: EventEmitter<boolean> = new EventEmitter<boolean>();
<app-pin [(correct)]="isPinCorrect"></app-pin>