Aquí (cómo inyectar ng-bootstrap NgbDateParserFormatter en una utilidad class) ya se ha hecho una pregunta similar, sin embargo, se refiere a la inyección en la clase static , donde la inyección no funciona en absoluto.

¡Ni siquiera puedo inyectar la implementación nativa (interna) de esta clase en un componente angular!

Así que si lo declaro de la siguiente manera:

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

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

Y usar de la siguiente manera:


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

Por lo tanto, no se producen excepciones ni errores, pero el código en cuestión produce esto:

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

Esto me parece que en lugar de llamar al método format, de alguna manera ... ¿simplemente imprime el código?

La documentación de ng-bootstrap nunca dice nada explícitamente sobre si esta implementación es inyectable / utilizable fuera del módulo: https://ng-bootstrap.github.io/#/components/datepicker/overview#date-model

Así que ... estoy completamente perdido aquí ...

EDITAR: tal vez ni siquiera necesito inyectar este objeto, solo quiero poder analizar hacia y desde el formato NdbDateStruct e ISO, así que básicamente en el código de la plantilla necesito poder producir la fecha seleccionada exactamente como se presenta en la interfaz de usuario (y viceversa)

EDIT2: Traje el código de implementación original para NgbDateISOParserFormatter a mi proyecto y nada ha cambiado. Entonces, aparentemente, esto no tiene nada que ver con la inyección, sino que lo que sucede es que cada vez que una función devuelve un literal de plantilla con interpolación, no devuelve un literal interpolado, sino un texto de una función que se supone que ejecuta la interpolación. En todo caso, esto es AÚN MÁS frustrante para mí ...

0
62mkv 1 sep. 2020 a las 14:30

1 respuesta

La mejor respuesta

Un stackblitz simple (usando @ 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)
    })
  }

Darle datos = "2020/01/16"

Esta es la razón porque creo que tu error está en otro lugar.

0
Eliseo 1 sep. 2020 a las 15:38