0

J'ai un tuyau personnalisé et une directive que je voudrais partager certaines données. J'ai créé un service, qui devrait gérer cela. Je reçois l'erreur suivante:Aucun fournisseur pour le service dans le tuyau

Error: No provider for MyService

Voici le code:

@Injectable() 
export class MyService { 
    private data: any; 
    get Data():any { 
     return this.data; 
    } 
    set Data(d: any) { 
     this.data = d; 
    } 
} 

La directive devrait fournir le service:

@Directive({ 
    selector: '[my-directive]', 
    providers: [MyService], 
}) 
export class MyDirective { 
    constructor(private serv: MyService) {} 
} 

Le tuyau doit obtenir le service aussi bien, quand il est utilisé sur le même composant:

@Pipe({ 
    name: 'myPipe' 
}) 
export class MyPipe { 
    constructor(private serv: MyService) {} 
    transform(value: any) { 
     return value + 'foo'; 
    } 
} 

C'est utilisé par exemple sur une entrée comme ceci:

<input [value]="text | myPipe" my-directive /> 

Après avoir lu les documents sur angular2 DI, et cherchai à ce sujet, je ne pouvais pas trouver quelque chose que je fait de mal. Autant que je sache, cela devrait fonctionner. Des idées pourquoi pas?

ps: Utilisation 2.x angulaire Ionic2

Répondre

0

Essayez d'ajouter le tableau des fournisseurs à un composant qui a cette directive avec le tuyau. Je pense que ça devrait marcher.

+0

Malheureusement, je ne peux pas faire cela, parce que j'essaie de créer une directive tierce que quelqu'un d'autre va utiliser. Je n'ai donc pas accès au composant sur lequel cette directive va être utilisée. – zolipapa

+0

Dans ce cas, vous devez ajouter le fournisseur dans votre définition de module dans MyModule.forRoot. –

0

Vous pouvez déclarer votre service dans ngModule.providers et, plus tard, injecter dans votre constructeur tout ce que vous voulez l'utiliser. Si Votre service fait partie d'un autre module, vous devez importer ce module. Une fois que vous avez le service dans le fournisseur plus tard, vous n'avez pas besoin de déclarer dans le fournisseur de votre pipe ou directive.

Si vous voulez une nouvelle instance dans chaque composant ou canal que vous utilisez ce service, ne faites pas cette partie de ngModule.providers mais vous devez la déclarer dans chaque fournisseur de canal ou de directive.

+0

Ensuite, chaque directive dans laquelle j'injecte mon service aura la même instance de service. Ce que je voudrais réaliser, c'est d'avoir différentes instances du service pour chaque instance de directive que je place dans mes templates. – zolipapa