Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

309
Visualizações
Obtenga control de formulario desde un elemento sin procesar en Angular2

Digamos que estoy escribiendo una directiva de atributo personalizado para usar en elementos de formulario Angular2. Quiero poder usar mi atributo así:

 <form [formGroup]="myFormGroup"> <input type="text" [myHighlight] formControlName="name" /> </form>

Dentro de mi directiva tengo algo como esto:

 @Directive({selector: '[myHighlight]'}) export class MyHighlightDirective { constructor (private el: ElementRef) { this.el.nativeElement.style.backgroundColor = 'yellow'; } };

Pero ahora digamos que quiero hacer algo en todos los cambios en el control de entrada. Tal vez quiera aleatorizar el color en cada cambio.

El HostListener('onChange') de la guía Angular2 funciona cuando el usuario está escribiendo en el cuadro de entrada. Pero no se activa para eventos setValue que se llaman en el control de formulario, incluso con emitEvent establecido en verdadero.Los documentos de Angular en Forms dicen que setValue hará que se emita un evento valueChanges en el objeto de control de formulario. Pero no quiero tener que pasar esto a la directiva cada vez que lo uso, ya que es torpe.

¿Hay alguna otra forma de que la directiva obtenga acceso al control de formulario original, dado que solo tiene la referencia del elemento?

about 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

Angular DI al rescate!

Puede usar el sistema de Inyección de Dependencia Angular para inyectar el FormControl adjunto al elemento host de su directiva.

 @Directive({selector: '[myHighlight]'}) export class MyHighlightDirective { constructor (private el: ElementRef, private formControl: FormControl) { // have fun with formControl.valueChanges ....... } };

Por qué esto funciona:

Angular registra directivas en el inyector del elemento al que se adjunta la directiva. Entonces, cuando solicite una instancia de una directiva en particular, la primera búsqueda será primero en el elemento host. (Lo mismo se aplica a los componentes)

about 4 years ago · Santiago Trujillo Relatório

0

Inyectar NgControl que es tipo de FormControlName

 import { NgControl } from '@angular/forms'; @Directive({selector: '[myHighlight]'}) export class MyHighlightDirective { constructor (private el: ElementRef, private formControl: NgControl) { this.el.nativeElement.style.backgroundColor = 'yellow'; .... //listen to validation status this.formControl.statusChanges.subscribe((state)=>{ ... }); } };
about 4 years ago · Santiago Trujillo Relatório

0

Lo que funcionó para mí fue

 @ContentChild(NgModel) public set model(model: NgModel) { ... }

y puede acceder al control con model.control .

about 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda