代码之家  ›  专栏  ›  技术社区  ›  cucuru

同一变量的输入和输出

  •  4
  • cucuru  · 技术社区  · 6 年前

    我有一个可以从父级和子级编辑的变量。

    父级.html:

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

    父.ts:

    export class ParentComponent {
    
       editEnabled: boolean;
    
       disableEdit(){
         this.editEnabled = false;
       }
    }
    

    child.html:

     <div *ngIf="!editEnabled">
      <mat-icon (click)="enableEdit()">settings</mat-icon>
    </div>
    

    儿童TS

    private _editEnabled: boolean;
    
    @Input()
     set editEnabled(value: boolean) {
      this._editEnabled = value;
    
    }
    get editEnabled(): boolean {
     return this._editEnabled;
    }
    
    enableEdit(){
         this.editEnabled = true;
    }
    

    但我无法在两个组件之间实现editEnabled通信。

    我的错误在哪里?

    2 回复  |  直到 6 年前
        1
  •  8
  •   Giacomo Voß    6 年前

    定义双绑定变量时,需要用变量名定义一个@input decorator:

    @Input() editEnabled: boolean;
    

    以及一个带有变量名和 Change 之后,因为这个函数会发出变量的变化事件:

    @Output() editEnabledChange: EventEmitter<boolean> = new EventEmitter<boolean>();
    

    然后,当更改子组件中的变量时,调用 this.editEnabledChange.emit(true) . 你的双重束缚 [(...)] 是正确的!

        2
  •  3
  •   Javan R.    6 年前

    如果不想添加 editEnabledChange -每次更改变量时发射器 correct 你可以写:

    _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>