Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

242
Views
Directiva que no funciona para valores no numéricos

Tengo una directiva para prohibir ingresar símbolos no numéricos en la entrada

Aquí está la directiva

 import { NgControl } from "@angular/forms"; import { HostListener, Directive } from "@angular/core"; @Directive({ exportAs: "number-directive", selector: "number-directive, [number-directive]", }) export class NumberDirective { private el: NgControl; constructor(ngControl: NgControl) { this.el = ngControl; } // Listen for the input event to also handle copy and paste. @HostListener("input", ["$event.target.value"]) onInput(value: string): void { // Use NgControl patchValue to prevent the issue on validation this.el.control.patchValue(value.replace(/[^0-9]/g, "").slice(0)); } }

Así es como lo uso en input

 <input type="text" tabindex="0" class="search__input form-control-md + {{class}}" [value]="config.value" [required]="config.required" [attr.maxlength]="config.maxLength" [attr.minLength]="config.minLength" #inputElem number-directive />

Pero todavía puedo escribir aaaaa o cualquier palabra.

¿Dónde puede estar mi problema?

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Sospecha de dos causas fundamentales:

  1. Olvidé agregar NumberDirective a las declarations de app.module.ts .

    Debe agregar NumberDirective a las declarations de app.module.ts para registrar la directiva.

 @NgModule({ ... declarations: [..., NumberDirective], }) export class AppModule {}
  1. No hay proveedor para NgControl para su elemento <input> .

    Recibirá el siguiente mensaje de error como faltante [(ngModel)] para el elemento de entrada. La directiva espera que sea un NgControl . Por lo tanto, debe tener [(ngModel)] .

    O necesita [formControl]="configControl" para su elemento <input> .

Error: R3InjectorError(AppModule)[NgControl -> NgControl -> NgControl]: NullInjectorError: ¡No hay proveedor para NgControl!

 <input type="text" tabindex="0" class="search__input form-control-md + {{ class }}" [value]="config.value" [required]="config.required" [attr.maxlength]="config.maxLength" [attr.minLength]="config.minLength" #inputElem number-directive [(ngModel)]="config.value" />

O

 <input type="text" tabindex="0" class="search__input form-control-md + {{ class }}" [value]="config.value" [required]="config.required" [attr.maxlength]="config.maxLength" [attr.minLength]="config.minLength" #inputElem number-directive [formControl]="configControl" />
 configControl = new FormControl();

Solución de muestra en StackBlitz

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!