【问题标题】:Angular 2 Polymer and a PaperChechboxSelectedDirectiveAngular 2 聚合物和 PaperChechboxSelectedDirective
【发布时间】:2016-09-14 09:20:31
【问题描述】:

我正在尝试让 Ng2 与聚合物一起工作。为此,我的目标是创建一些指令来监听纸张元素并转换事件或做任何需要做的事情来让角度理解用户交互。

如果我这样做:

<paper-checkbox [checked]="bar" (change)="bar = $event.target.__data__.checked">
    Mark all as complete
</paper-checkbox>

我得到了使用 Ng2 的双向绑定(奇怪的是,我必须查看 data 才能找到复选框的值......任何关于那个人的指针?)。

所以一切正常,但我想减少仪式并有一个指令来获取我的“bar”表达式并通过 onChange 处理程序设置它。这可能吗?

纸张复选框指令

  @Directive({selector: 'paper-checkbox'})
  class PaperChechboxSelectedDirective {

    @Output() checkedChange:EventEmitter<any> = new EventEmitter();

    constructor(private element: ElementRef) {
      console.log('PaperChechboxSelectedDirective');
    }

    @HostListener('iron-change', ['$event'])
    onChange(e) {

    }
  }

【问题讨论】:

  • 您想在指令中获取表达式bar 的值?

标签: checkbox angular polymer paper-elements


【解决方案1】:

您可以像这样使用双向绑定:

@Directive({selector: 'paper-checkbox'})
class PaperChechboxSelectedDirective {
  @Input() checked: boolean;
  @Output() checkedChange:EventEmitter<any> = new EventEmitter();
  el: any;
  constructor(elRef: ElementRef) {
    this.el = elRef.nativeElement;
  }
  ngOnInit() {
     this.el.checked = this.checked;
  }
  @HostListener('iron-change', ['$event'])
  onChange(e) {
    this.checkedChange.emit(this.el.checked);
  }
}

然后在你的模板上

<paper-checkbox [(checked)]="bar">
  Mark all as complete
</paper-checkbox>

在这里查看我的工作示例https://plnkr.co/edit/FzfNqxMNbVPxuwhf9Dbq?p=preview

或者不用指令你可以写得简单一点:

<paper-checkbox [checked]="bar" (change)="bar = $event.target.checked">
   Mark all as complete
</paper-checkbox>

对应的plunker在这里https://plnkr.co/edit/nVSdJGAwlXGEcHZXCOqV?p=preview

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2017-05-10
  • 1970-01-01
  • 1970-01-01
  • 2018-02-20
  • 1970-01-01
  • 1970-01-01
  • 2017-02-25
  • 1970-01-01
相关资源
最近更新 更多