【问题标题】:Angular custom component required需要 Angular 自定义组件
【发布时间】:2018-05-18 07:51:23
【问题描述】:

有没有办法可以在我的自定义组件上使用required 属性? 我的组件如下所示:

import { Component, Input, forwardRef } from '@angular/core';
import { Platform } from 'ionic-angular';
import { NG_VALUE_ACCESSOR, ControlValueAccessor } from '@angular/forms';

export const CUSTOM_INPUT_CONTROL_VALUE_ACCESSOR: any = {
  provide: NG_VALUE_ACCESSOR,
  useExisting: forwardRef(() => DatePickerComponent),
  multi: true
};

@Component({
  selector: 'date-picker',
  templateUrl: 'date-picker.html',
  providers: [CUSTOM_INPUT_CONTROL_VALUE_ACCESSOR]
})
export class DatePickerComponent implements ControlValueAccessor {
  @Input("label") label: string;
  @Input("pickerFormat") pickerFormat: string;
  @Input("displayFormat") displayFormat: string;
  @Input("max") max: string;
  @Input("min") min: string;
  @Input("cancelText") cancel: string;
  @Input("doneText") done: string;
  @Input("valid") valid: boolean;
  @Input("disabled") disabled: boolean;

  private _mobile: boolean = false;
  private _date: string;

  constructor(private plt: Platform) {
    if (plt.is("mobile"))
      this._mobile = true;
  }

  get date(): string {
    return this._date;
  }

  set date(value: string) {
    this._date = value;
    this.onChange(this._date);
  }

  public onChange(value: any): void { }

  public onTouched(): void { }

  public writeValue(obj: any): void {
    if (this.date !== obj) {
      this.date = obj;
    }
  }

  public registerOnChange(fn: any): void {
    this.onChange = fn;
  }

  public registerOnTouched(fn: any): void {
    this.onTouched = fn;
  }
}

如果_date(或date)为空或无效日期(因为最小值/最大值),我希望我使用此组件禁用提交按钮的表单。 有什么方法可以为我的组件实现类似的东西吗?

感谢您的帮助!

【问题讨论】:

    标签: angular ionic-framework ionic3 custom-component required


    【解决方案1】:

    让它实现Validator接口:

    export class DatePickerComponent implements ControlValueAccessor, Validator {...}
    

    它只需要一个函数,validate

    public validate(c: FormControl) {
      // Business logic. If no error, return null, if not : 
      return { required: true };
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-13
      • 2014-09-16
      • 2011-05-12
      • 2020-02-07
      • 2016-02-06
      • 2014-04-11
      • 1970-01-01
      • 2021-02-03
      相关资源
      最近更新 更多