同一个变量的输入和输出

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>