输入和输出相同的变量

cuc*_*uru 10 getter-setter angular angular5

我有一个可以从父母和孩子编辑的变量.

parent.html:

 <div *ngIf="editEnabled">
  <mat-icon (click)="disableEdit()">cancel</mat-icon>
</div>

<child [(editEnabled)]="editEnabled"></child>
Run Code Online (Sandbox Code Playgroud)

parent.ts:

export class ParentComponent {

   editEnabled: boolean;

   disableEdit(){
     this.editEnabled = false;
   }
}
Run Code Online (Sandbox Code Playgroud)

Child.html:

 <div *ngIf="!editEnabled">
  <mat-icon (click)="enableEdit()">settings</mat-icon>
</div>
Run Code Online (Sandbox Code Playgroud)

child.ts

private _editEnabled: boolean;

@Input()
 set editEnabled(value: boolean) {
  this._editEnabled = value;

}
get editEnabled(): boolean {
 return this._editEnabled;
}

enableEdit(){
     this.editEnabled = true;
}
Run Code Online (Sandbox Code Playgroud)

但我不能在两个组件之间通信editEnabled.

我的错误在哪里?

Gia*_*Voß 17

定义双键变量时,需要使用变量名定义一个@ Input-decorator:

@Input() editEnabled: boolean;
Run Code Online (Sandbox Code Playgroud)

和一个带有变量名的@ Output-decorator Change然后,因为这个发出变量的变化事件:

@Output() editEnabledChange: EventEmitter<boolean> = new EventEmitter<boolean>();
Run Code Online (Sandbox Code Playgroud)

然后在更改子组件内的变量时,调用this.editEnabledChange.emit(true).你的双重绑定[(...)]是正确的!


Jav*_* R. 6

如果不想editEnabledChange每次更改变量correct时都添加-Emitter ,则可以编写:

_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>();
Run Code Online (Sandbox Code Playgroud)
<app-pin [(correct)]="isPinCorrect"></app-pin>
Run Code Online (Sandbox Code Playgroud)