使用Switchery设置样式的自定义复选框输入组件

凯莉弗雷耶

我正在尝试创建一个样式为Switchery的自定义复选框组件,该组件可用于其他<input type="checkbox" ... />组件一样的形式

我现在拥有的代码负责样式设置:

import {Component,ViewChild,AfterViewInit,Input} from 'angular2/core';
import switchery from 'switchery';

@Component({
  selector: 'switchery-checkbox',
  template: `<input #checkbox type="checkbox" class="js-switch"/>`,
})
export class SwitcheryComponent implements AfterViewInit {
  @Input() options: Switchery.Options = {};
  @ViewChild('checkbox') checkbox: any;
  ngAfterViewInit() {
    new switchery(this.checkbox.nativeElement,
                  this.options);
  }
}

我必须添加什么才能在以下代码中的模板中使用它?理想情况下,它应该实现的所有功能<input type="checkbox" />

<switchery-checkbox
     [(ngModel)]="model.onOrOff"
     ngControl="onOrOff"
     [disabled]="disabledCondition"
     ... >
</switchery-checkbox>
蒂埃里圣堂武士

实际上,您需要使组件“符合ngModel”,但要实现自定义值访问器。

方法如下:

@Component({
  selector: 'switchery-checkbox',
  template: `
    <input #checkbox type="checkbox" (change)="onChange($event.target.checked)" class="js-switch"/>
  `,
  (...)
})
export class SwitcheryComponent implements AfterViewInit, ControlValueAccessor {
  @Input() options: Switchery.Options = {};
  @Input() disabled:boolean = false;
  @ViewChild('checkbox') checkbox: any;

  value: boolean = false;

  onChange = (_) => {};
  onTouched = () => {};

  writeValue(value: any): void {
    this.value = value;
    this.setValue(this.value);
  }

  registerOnChange(fn: (_: any) => void): void { this.onChange = fn; }
  registerOnTouched(fn: () => void): void { this.onTouched = fn; }

  ngAfterViewInit() {
    this.switcher = new switchery(this.checkbox.nativeElement,
              this.options);
    this.setValue(this.value);
    this.setDisabled(this.disabled);
  }

  ngOnChanges(changes: {[propName: string]: SimpleChange}) {
    if (changes && changes.disabled) {
      this.setDisabled(changes.disabled.currentValue);
    }
  }

  setValue(value) {
    if (this.switcher) {
      var element = this.switcher.element;
      element.checked = value
    }
  }

  setDisabled(value) {
    if (this.switcher) {
      if (value) {
        this.switcher.disable();
      } else {
        this.switcher.enable();
      }
    }
  }
}

最后,您需要将值访问器注册到providers组件的中:

const CUSTOM_VALUE_ACCESSOR = new Provider(
  NG_VALUE_ACCESSOR, {useExisting: forwardRef(() => SwitcheryComponent), multi: true});

@Component({
  selector: 'switchery-checkbox',
  template: `
    <input #checkbox type="checkbox" (change)="onChange($event.target.checked)" class="js-switch"/>
  `,
  providers: [ CUSTOM_VALUE_ACCESSOR ]
})
export class SwitcheryComponent implements AfterViewInit, ControlValueAccessor {
  (...)
}

这样,您可以通过以下方式使用指令:

<switchery-checkbox [disabled]="disabled"
       [(ngModel)]="value" ngControl="cb"
       #cb="ngForm"></switchery-checkbox>

请参阅以下代码:https ://plnkr.co/edit/z1gAC5U0pgMSq0wicGHC ? p = preview

有关更多详细信息,请参见本文(“与NgModel兼容的组件”一节):

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

定义自定义复选框样式

来自分类Dev

CSS如何设置自定义复选框刻度符号的“内容” /“背景”属性的样式?

来自分类Dev

自定义Bootstrap-Vue复选框组件

来自分类Dev

使用KnockoutJS的“自定义样式”复选框不响应“检查”数据绑定

来自分类Dev

使用“输入”键发送带有自定义复选框/放射图像的表单

来自分类Dev

使用复选框单击自定义列表

来自分类Dev

使用自定义CSS复选框的Boostrap折叠

来自分类Dev

使用Javascript获取复选框的自定义属性

来自分类Dev

自定义Android复选框

来自分类Dev

自定义复选框问题

来自分类Dev

如何在自定义复选框视图中保留支持库复选框的样式?

来自分类Dev

自定义复选框样式-标签在选中/取消选中时跳转

来自分类Dev

对话框中的自定义复选框样式

来自分类Dev

样式不适用于自定义复选框和单选按钮

来自分类Dev

如何自定义处于不确定状态的复选框的样式?

来自分类Dev

对话框中的自定义复选框样式

来自分类Dev

如何为复选框图像创建自定义WPF XAML样式

来自分类Dev

样式不适用于自定义复选框和单选按钮

来自分类Dev

使用自定义适配器在listview中将复选框设置为不可编辑

来自分类Dev

设置为使用自定义设计隐藏时,复选框选项卡索引不起作用

来自分类Dev

聚合物1:如何使用自定义元素动态设置纸张复选框标签

来自分类Dev

Div内的左对齐自定义复选框和中心文本(输入+ Div)

来自分类Dev

Div内的左对齐自定义复选框和中心文本(输入+ Div)

来自分类Dev

Google 搜索栏 - 通过输入复选框添加自定义搜索文本

来自分类Dev

Vuejs 将 vee-validate 传递给自定义复选框输入

来自分类Dev

如何通过Selenium识别类型复选框的引导程序自定义控制输入

来自分类Dev

设置所有输入的样式,但复选框和单选

来自分类Dev

设置所有输入的样式,但复选框和单选

来自分类Dev

输入类型复选框无法正确设置样式

Related 相关文章

  1. 1

    定义自定义复选框样式

  2. 2

    CSS如何设置自定义复选框刻度符号的“内容” /“背景”属性的样式?

  3. 3

    自定义Bootstrap-Vue复选框组件

  4. 4

    使用KnockoutJS的“自定义样式”复选框不响应“检查”数据绑定

  5. 5

    使用“输入”键发送带有自定义复选框/放射图像的表单

  6. 6

    使用复选框单击自定义列表

  7. 7

    使用自定义CSS复选框的Boostrap折叠

  8. 8

    使用Javascript获取复选框的自定义属性

  9. 9

    自定义Android复选框

  10. 10

    自定义复选框问题

  11. 11

    如何在自定义复选框视图中保留支持库复选框的样式?

  12. 12

    自定义复选框样式-标签在选中/取消选中时跳转

  13. 13

    对话框中的自定义复选框样式

  14. 14

    样式不适用于自定义复选框和单选按钮

  15. 15

    如何自定义处于不确定状态的复选框的样式?

  16. 16

    对话框中的自定义复选框样式

  17. 17

    如何为复选框图像创建自定义WPF XAML样式

  18. 18

    样式不适用于自定义复选框和单选按钮

  19. 19

    使用自定义适配器在listview中将复选框设置为不可编辑

  20. 20

    设置为使用自定义设计隐藏时,复选框选项卡索引不起作用

  21. 21

    聚合物1:如何使用自定义元素动态设置纸张复选框标签

  22. 22

    Div内的左对齐自定义复选框和中心文本(输入+ Div)

  23. 23

    Div内的左对齐自定义复选框和中心文本(输入+ Div)

  24. 24

    Google 搜索栏 - 通过输入复选框添加自定义搜索文本

  25. 25

    Vuejs 将 vee-validate 传递给自定义复选框输入

  26. 26

    如何通过Selenium识别类型复选框的引导程序自定义控制输入

  27. 27

    设置所有输入的样式,但复选框和单选

  28. 28

    设置所有输入的样式,但复选框和单选

  29. 29

    输入类型复选框无法正确设置样式

热门标签

归档