You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular中NgxMatDatepickerBase无提供者错误的排查与解决

问题:Angular中使用@angular-material-components/datetime-picker多实例报错NullInjectorError

错误信息

core.mjs:10194 ERROR Error: Uncaught (in promise): NullInjectorError: R3InjectorError(AppModule)[NgxMatDatepickerBase -> NgxMatDatepickerBase]: 
  NullInjectorError: No provider for NgxMatDatepickerBase!
NullInjectorError: R3InjectorError(AppModule)[NgxMatDatepickerBase -> NgxMatDatepickerBase]: 
  NullInjectorError: No provider for NgxMatDatepickerBase!
    at NullInjector.get (core.mjs:8771:27)
    at R3Injector.get (core.mjs:9200:33)
    at R3Injector.get (core.mjs:9200:33)
    at ChainedInjector.get (core.mjs:13009:36)
    at lookupTokenUsingModuleInjector (core.mjs:4436:39)
    at getOrCreateInjectable (core.mjs:4484:12)
    at Module.ɵɵdirectiveInject (core.mjs:10780:12)
    at NodeInjectorFactory.NgxMatDatepickerActions_Factory [as factory] (angular-material-components-datetime-picker.mjs:132:129)
    at getNodeInjectable (core.mjs:4669:44)
    at instantiateAllDirectives (core.mjs:11600:27)
    at resolvePromise (zone.js:1193:31)
    at resolvePromise (zone.js:1147:17)
    at zone.js:1260:17
    at _ZoneDelegate.invokeTask (zone.js:402:31)
    at core.mjs:25998:55
    at AsyncStackTaggingZoneSpec.onInvokeTask (core.mjs:25998:36)
    at _ZoneDelegate.invokeTask (zone.js:401:60)
    at Object.onInvokeTask (core.mjs:26308:33)
    at _ZoneDelegate.invokeTask (zone.js:401:60)
    at Zone.runTask (zone.js:173:47)
handleError @ core.mjs:10194
next @ core.mjs:27087
next @ Subscriber.js:91
_next @ Subscriber.js:60
next @ Subscriber.js:31
(anonymous) @ Subject.js:34
errorContext @ errorContext.js:19
next @ Subject.js:27
emit @ core.mjs:22781
(anonymous) @ core.mjs:26347
invoke @ zone.js:368
run @ zone.js:129
runOutsideAngular @ core.mjs:26220
onHandleError @ core.mjs:26347
handleError @ zone.js:372
runGuarded @ zone.js:142
api.microtaskDrainDone @ zone.js:1054
drainMicroTaskQueue @ zone.js:588
invokeTask @ zone.js:487
invokeTask @ zone.js:1631
globalCallback @ zone.js:1662
globalZoneAwareCallback @ zone.js:1695
Show 22 more frames
Show less

代码配置

app.module.ts 导入项

imports: [
    BrowserModule,
    AppRoutingModule,
    BrowserAnimationsModule,
    MaterialModule,
    NgxMatDatetimePickerModule,
    NgxMatTimepickerModule,
    NgxMatNativeDateModule,
  ],

CreateCardComponent.component.ts

export class CreateCardComponent {

  @ViewChild('startDateTimepicker') startDateTimepicker: any;
  @ViewChild('endDateTimepicker') endDateTimepicker: any;

  public date = new Date();
  public disabled = false;
  public showSpinners = true;
  public showSeconds = false;
  public touchUi = false;
  public enableMeridian = false;
  public stepHour = 1;
  public stepMinute = 1;
  public stepSecond = 1;
  hideTime = false;
  disableMinute = false;
}

createCard.component.html 日期选择器代码

<mat-form-field class="width-30" appearance="outline">
      <mat-label>Start</mat-label>
      <input
        matInput [ngxMatDatetimePicker]="startDateTimepicker" placeholder="Choose a date"
        [disabled]="disabled">
      <mat-datepicker-toggle matSuffix [for]="$any(startDateTimepicker)"></mat-datepicker-toggle>
      <ngx-mat-datetime-picker
        #startDateTimepicker [showSpinners]="showSpinners" [showSeconds]="showSeconds"
        [stepHour]="stepHour" [stepMinute]="stepMinute" [stepSecond]="stepSecond"
        [touchUi]="touchUi" [enableMeridian]="enableMeridian"
        [disableMinute]="false" [hideTime]="false">
        <ngx-mat-datepicker-actions>
          <button mat-button ngxMatDatepickerCancel>Cancel</button>
          <button mat-raised-button color="primary" ngxMatDatepickerApply>Apply</button>
        </ngx-mat-datepicker-actions>
      </ngx-mat-datetime-picker>
    </mat-form-field>

    <mat-form-field class="width-30" appearance="outline">
      <mat-label>End</mat-label>
      <input
        matInput [ngxMatDatetimePicker]="endDateTimepicker" placeholder="Choose a date"
        [disabled]="disabled">
      <mat-datepicker-toggle matSuffix [for]="$any(endDateTimepicker)"></mat-datepicker-toggle>
      <ngx-mat-datetime-picker
        #endDateTimepicker [showSpinners]="showSpinners" [showSeconds]="showSeconds"
        [stepHour]="stepHour" [stepMinute]="stepMinute" [stepSecond]="stepSecond"
        [touchUi]="touchUi" [enableMeridian]="enableMeridian"
        [disableMinute]="false" [hideTime]="false">
      </ngx-mat-datetime-picker>
      <ngx-mat-datepicker-actions>
        <button mat-button ngxMatDatepickerCancel>Cancel</button>
        <button mat-raised-button color="primary" ngxMatDatepickerApply>Apply</button>
      </ngx-mat-datepicker-actions>
    </mat-form-field>

项目版本信息

"@angular-material-components/datetime-picker": "^16.0.1",
"@angular/core": "^16.0.0",

错误原因

问题出在第二个日期选择器的<ngx-mat-datepicker-actions>组件位置错误。该组件必须嵌套在<ngx-mat-datetime-picker>标签内部,因为它依赖的NgxMatDatepickerBase服务是由<ngx-mat-datetime-picker>提供的。当把<ngx-mat-datepicker-actions>放在日期选择器外部时,Angular无法找到对应的服务提供者,从而抛出NullInjectorError。

解决方案

将第二个日期选择器的<ngx-mat-datepicker-actions>移到<ngx-mat-datetime-picker>标签内部,与第一个日期选择器的结构保持一致。修正后的代码如下:

<mat-form-field class="width-30" appearance="outline">
  <mat-label>End</mat-label>
  <input
    matInput [ngxMatDatetimePicker]="endDateTimepicker" placeholder="Choose a date"
    [disabled]="disabled">
  <mat-datepicker-toggle matSuffix [for]="$any(endDateTimepicker)"></mat-datepicker-toggle>
  <ngx-mat-datetime-picker
    #endDateTimepicker [showSpinners]="showSpinners" [showSeconds]="showSeconds"
    [stepHour]="stepHour" [stepMinute]="stepMinute" [stepSecond]="stepSecond"
    [touchUi]="touchUi" [enableMeridian]="enableMeridian"
    [disableMinute]="false" [hideTime]="false">
    <!-- 将actions组件移到datetime-picker内部 -->
    <ngx-mat-datepicker-actions>
      <button mat-button ngxMatDatepickerCancel>Cancel</button>
      <button mat-raised-button color="primary" ngxMatDatepickerApply>Apply</button>
    </ngx-mat-datepicker-actions>
  </ngx-mat-datetime-picker>
</mat-form-field>

内容的提问来源于stack exchange,提问作者Tharindu Lakshan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 23:25:58