J'ai créé une directive à partir de https://www.davebennett.tech / angular-4-input-numbers-directive / afin que je puisse limiter les utilisateurs à saisir uniquement des chiffres dans le numéro de téléphone. Dans le fichier src / app / app.sharerd.module.ts
, j'ai fait le code ci-dessous pour importer la directive:
<input type="text" name="phone" myNumberOnly ... > ... ...
Maintenant, sous / src /
dossier J'ai créé des dossiers nommés modules/auth/component/
.
Sous auth.module.ts
dans le / src / auth /
, j'ai fait ce qui suit:
import { NgModule } from '@angular/core'; import { SharedModule } from '../../app/app.shared.module'; ... ...
Maintenant, dans le signup.html
sous / src / auth / component /
:
import { NumberOnlyDirective } from './number.directive'; declarations: [..., ..., NumberOnlyDirective], ... export class SharedModule { }
Je peux toujours saisir des caractères / caractères spéciaux, etc. dans la zone de texte, cependant, je n'ai vu aucune erreur dans la console / cli.
3 Réponses :
Lorsque vous utilisez une directive / pipe personnalisée dans un module partagé, vous devez l'exporter également.
Fondamentalement, dans votre tutoriel, il a créé la directive et l'a déclarée dans le module d'application. Mais dans votre exemple, vous mettez votre directive dans un module partagé, vous devez donc mettre votre directive dans le crochet des déclarations mais aussi dans les exports.
shared.module.ts :
@NgModule({ /* ... */ declarations: [YourDirective], exports: [YourDirective] /* ... */ })
Trois astuces de débogage de directive rapide:
debugger;
dans le constructeur de votre directive. Vous saurez alors avec certitude quand cela fonctionne et vous pourrez le supprimer. selector: '[magicFeature]'
et non du selector: 'magicFeature'
ng serve
pour vous assurer que tout est actualisé. Essayez ceci:
import { Directive, ElementRef, HostListener, Input } from '@angular/core'; import { NgControl } from '@angular/forms'; @Directive({ selector: 'input[type=number], input[numbersOnly]' }) export class NumbersOnlyInputDirective { constructor(private elRef: ElementRef) { } @HostListener('input', ['$event']) onInputChange(event) { const initalValue = this.elRef.nativeElement.value; this.elRef.nativeElement.value = initalValue.replace(/[^0-9]*/g, ''); if ( initalValue !== this.elRef.nativeElement.value) { event.stopPropagation(); } } }
Essayez de mettre votre NumberOnlyDirective également dans les exportations de votre module partagé.
Ajoutez ceci comme votre réponse.