Angular 2 : cannot get two ways binding to work in custom component

标签 angular custom-component

我正在尝试制作一个简单的 Angular 2 组件来显示开关按钮。 它几乎可以工作,除了使用 ngModel 时父值没有更新。

这是我的自定义组件:

import { Component, Input, Output, EventEmitter } from '@angular/core';

@Component({
selector: 'app-switch',
template:` 
<label class="switch">
  <input id="switch" type="checkbox" [(ngModel)]="checked">
  <div class="slider round"></div>
</label> `,   
styleUrls: ['./switch.component.css']
})
export class SwitchComponent {

    checkValue:boolean;
    @Output() checkChange = new EventEmitter();

    @Input()
    get checked() {
      return this.checkValue;
    }

    set checked(val) {
       this.checkValue = val;
       this.checkChange.emit(this.checkValue);
       console.log("from switch: value = " + this.checkValue);    
    }
}

这是带有 2 个自定义子组件实例的父组件。 - 第一个实例工作正常,但使用分离的属性 [] 和事件 () 绑定(bind) - 第二种是使用两种方式绑定(bind) [()] 但不起作用。知道我错过了什么吗?

import { Component } from '@angular/core';

@Component({
  selector: 'app-root',
  template:`
  <app-switch [checked]="checkValue" (checkChange)="onCheckChanged($event)"></app-switch>
  <div>checkBox :<span>{{checkValue}}</span></div>
  <hr/>
  <app-switch [(checked)]="switchValue" ></app-switch>
  <div>checkBox :<span>{{switchValue}}</span></div>`,
  styleUrls: ['./app.component.css']
})
export class AppComponent {
  title = 'app works!';
  checkValue:boolean = false;
  switchValue:boolean = false;

  onCheckChanged($event){
    console.log("from AppComponent : " + $event);
    this.checkValue = $event;

  }
}

对此有什么建议吗?

最佳答案

您的第二个实例需要一个输出 checkedChange 事件发射器,因为您要绑定(bind)到 checked 属性。命名稍有偏差(checkChangecheckedChange),因此它不允许您设置的双向绑定(bind)。

Demo Here

关于 Angular 2 : cannot get two ways binding to work in custom component,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43093050/

相关文章:

javascript - 如何以正确的方式表示两个日期之间的日期数组列表?

java - 如何确定自定义组件的正确 UI 实现

javafx-2 - 在 JavaFX Scene Builder : Attributes are reset and children removed 中加载带有自定义组件的 FXML 文件

javascript - 如何从Python中的字典数组中获取JavaScript中的对象数组?

angular - Angular 路由如何优先于静态站点上的文件路径

angular - 使用解析器 Angular 6 进行重定向

angular - SELECT的表单控件不会在选项列表更改时更新值

javascript - Angular 2 摆脱嵌套订阅

solr - 自定义 Solr 函数查询

javascript - 自定义 Extjs 4+ 字段结构的最佳方法