首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何进一步封装一个表单字段组件?

如何进一步封装一个表单字段组件?
EN

Stack Overflow用户
提问于 2019-02-13 13:47:02
回答 1查看 123关注 0票数 0

现在我在很多地方使用ngx-daterangepicker-material和下面的重复代码,我想封装成独立的组件以便重用。

代码语言:javascript
复制
<div class="fx-date-range-container">
  <span class="summary">Summary</span>
  <input class="fx-date-range" type="text" matInput
         ngxDaterangepickerMd
         [locale]="{applyLabel: 'ok', format: 'MM-DD-YYYY'}"
         [drops]="'down'"
         [opens]="'right'"
         [ranges]="ranges"
         [showCustomRangeLabel]="false"
         [alwaysShowCalendars]="true"
         [keepCalendarOpeningWithRange]="true"
         [showCancel]="true"
         autocomplete="off"
         [(ngModel)]="selectedDateRange"
         (change)="getCampaignFXASummary()"
         name="daterange"/>
  <mat-icon class="icon-date-range" matSuffix>keyboard_arrow_down</mat-icon>
</div>

组件名称为fx-date-range-picker。这是一个演示,我的问题是如何设置ngModel并将值传递给fx-date-range-picker组件。

也许我应该实现writeValue函数,但不确定如何编写。

https://ngx-daterangepicker-material-demo.stackblitz.io

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-13 14:34:59

您需要实现ControlValueAccessor

请参阅有关ControlValueAccessorangular.io文档

要实现的函数应如下所示:

代码语言:javascript
复制
  export class [yourClass] implements ControlValueAccessor {      
  protected onChange: (value: any) => void = NOOP;
  protected internalValue: number;

  get value(): number {
    return this.internalValue;
  }

  set value(value: number) {
    if (value !== this.internalValue) {
      this.internalValue = value;
      this.onChange(value);
    }
  }

  writeValue(value) {
    this.value = value;
}
registerOnChange(fn) { this.onChange = fn;  }
registerOnTouched(fn) {  }

请看下面的帖子来解释它:https://blog.angularindepth.com/never-again-be-confused-when-implementing-controlvalueaccessor-in-angular-forms-93b9eee9ee83

祝好运!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54663362

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档