如何注入 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"
这是因为我觉得你的错误在别的地方
这里(
我什至无法将此 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"
这是因为我觉得你的错误在别的地方