【问题标题】:How to use new Forms with ng2-bootstrap Timepicker如何通过 ng2-bootstrap Timepicker 使用新表单
【发布时间】:2016-12-12 06:27:44
【问题描述】:

我正在创建自己的包含 ng2-bootstrap timepicker 组件的组件。出于某种原因,我似乎无法让新的 Angular 2 FormControl 正常工作,即使使用使用 @angular/forms 的组件的最新版本。

这里是组件的链接:ng2-bootstrap timepicker

这是我的代码的简单版本:

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

import { FormControl, FORM_DIRECTIVES } from '@angular/forms';
import { TimepickerComponent } from 'ng2-bootstrap/ng2-bootstrap';

@Component({
  selector: 'my-timepicker',
  directives: [ REACTIVE_FORM_DIRECTIVES, TimepickerComponent ],
  template: `
  <div class="well">
    <timepicker
      [(ngModel)]="initialValue"
      [formControl]="timePickerControl"
      [hourStep]="hourStep"
      [minuteStep]="minuteStep"
      [showMeridian]="showMeridian"
      [readonlyInput]="disabled"
      [mousewheel]="mousewheel"
      [arrowkeys]="arrowkeys"
      [showSpinners]="showSpinners"
      [min]="min"
      [max]="max"
    ></timepicker>
  </div>
`
})
export class TimePickerComponent implements OnInit {
  timePickerControl: FormControl;
  initialValue: Date;
  hourStep: number = 1;
  minuteStep: number = 1;
  showMeridian: boolean = true;
  mousewheel: boolean = true;
  arrowkeys: boolean = true;
  showSpinners: boolean = true;
  min: Date;
  max: Date;

ngOnInit() {
  this.initialValue = new Date();
  this.timePickerControl = new FormControl(this.initialValue, Validators.required);
  }
}

这是我在尝试使用该组件时看到的错误:

No provider for NgModel ("
<div class="well">
    [ERROR ->]<timepicker
      [(ngModel)]="initialValue"
      [formControl]="timePickerControl"
")

在我的app.ts 中,我确保包含以下调用:

provideForms()
disableDeprecatedForms()

【问题讨论】:

  • 如果删除 [formControl] 属性会发生什么?
  • 取出[formControl] 将允许应用程序运行,但我希望父应用程序能够传入我可以绑定到我的&lt;timepicker&gt; 的FormControl

标签: html angularjs typescript controls ng2-bootstrap


【解决方案1】:
import { FORM_DIRECTIVES } from '@angular/forms';
import { TimepickerComponent } from 'ng2-bootstrap/ng2-bootstrap';

@Component({
  selector: 'my-timepicker',
  directives: [FORM_DIRECTIVES, TimepickerComponent ],
  template: `
  <div class="well">
    <timepicker
      [(ngModel)]="initialValue"
      [hourStep]="hourStep"
      [minuteStep]="minuteStep"
      [showMeridian]="showMeridian"
      [readonlyInput]="disabled"
      [mousewheel]="mousewheel"
      [arrowkeys]="arrowkeys"
      [showSpinners]="showSpinners"
      [min]="min"
      [max]="max"
      name="aTimePicker"
      required
    ></timepicker>
  </div>
`
})
export class TimePickerComponent implements OnInit {
  initialValue: Date;
  hourStep: number = 1;
  minuteStep: number = 1;
  showMeridian: boolean = true;
  mousewheel: boolean = true;
  arrowkeys: boolean = true;
  showSpinners: boolean = true;
  min: Date;
  max: Date;

ngOnInit() {
  this.initialValue = new Date();
  }
}

我在使用 datepicker 时遇到了类似的问题,我在上面的 sn-p 中进行了一些更改,以反映我为使其正常工作所做的工作,我尚未测试更改,但请告诉我进展如何,希望它至少是一个起点。

据我所知,您目前不需要REACTIVE_FORM_DIRECTIVES,因为您没有在任何地方使用它。

【讨论】:

  • 那么这不是一个反应形式的解决方案!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-20
  • 1970-01-01
  • 1970-01-01
  • 2018-11-07
  • 1970-01-01
相关资源
最近更新 更多