如何注入 NgbDateParserFormatter 的原生实现?

how to inject native implementation of NgbDateParserFormatter?

这里()已经问过一个类似的问题,但是它指的是注入 static class,其中注入不起作用全部.

我什至无法将此 class 的本机(内部)实现注入到 Angular 组件中!

所以如果我声明如下:

import { NgbDateParserFormatter } from '@ng-bootstrap/ng-bootstrap';

@Component({
...
})
export class RequestHistoryComponent implements OnInit, OnDestroy {
...
  constructor(
...
    protected datePickerFormatter: NgbDateParserFormatter
  ) {}

并按如下方式使用:


    if (model.requestSince) {
      const requestSinceValue: string = this.datePickerFormatter.format(model.requestSince);
      this.logService.log(`RequestSince value: ${requestSinceValue}`);
      res = { requestSince: requestSinceValue, ...res }
    }

所以,没有发生异常或错误,但是有问题的代码产生了这个:

RequestSince value: function (value) {\n if (value != null) {\n set(this, unit, value);\n hooks.updateOffset(this, keepTime);\n return this;\n } else {\n return get(this, unit);\n }\n }--"

在我看来,这似乎并没有实际调用 format 方法,而是以某种方式.. 只是打印了代码?

Ng-bootstrap 文档从未明确说明此实现是否在模块之外 injectable/usable:https://ng-bootstrap.github.io/#/components/datepicker/overview#date-model

所以..我在这里完全不知所措..

编辑:也许我什至不需要注入这个对象,我只想能够解析 NdbDateStruct 和 ISO 格式,所以基本上在模板代码中我需要能够生成选定的日期与 UI 中显示的完全一致(反之亦然)

EDIT2:我已经将 NgbDateISOParserFormatter 的原始实现代码带入我的项目中,没有任何改变。所以显然这与注入无关,而是当函数 return 是一个带有插值的模板文字时,它不是 return 一个插值文字,而是一个函数的文本,它应该是执行插值。如果有的话,这对我来说更令人沮丧..

一个简单的stackblitz(使用@ng-bootstrap/ng-bootstrap": 7.0.0)

  constructor(protected dateParser: NgbDateParserFormatter){}
  ngOnInit()
  {
    of({
       containsId:"1,2,3",
       requestSince:{year:2020,month:1,day:16},
       requestTill: {year:2020,month:1,day:16}
    }).subscribe(res=>{
      this.data=this.dateParser.format(res.requestSince)
    })
  }

给你数据="2020/01/16"

这是因为我觉得你的错误在别的地方