Y a-t-il un moyen d'injecter une dépendance dans une usine de décorateur, à l'aide de DI? Prenons le code suivant comme exemple simplifié: ici, le comportement prévu de la personne code> Decorator est pour accéder à une personne est-il possible du tout d'implémenter le nom code> décorateur code> pour le code ci-dessus ? p> p> code > Dépendance et utilisez-la pour définir la propriété
nom code> de la classe. p>
4 Réponses :
C'est un peu délicat de le faire, car les décorateurs sont exécutés au moment de la construction, pas au moment de l'exécution. Lorsque le décorateur est exécuté, il n'y a pas d'instance de la classe.
retour dans ng2.beta.10, j'ai utilisé ceci pour obtenir les données du service (ne pensez pas que vous puissiez du composant, mais je pourrais me tromper ... ): p>
// some-route.ts @CanActivate((next, prev) => { let store: any = getSingleton(Store); }) // injector.ts import {Injector} from 'angular2/core' let appInjectorRef: Injector; export const appInjector = (injector?: Injector) => { if (injector) appInjectorRef = injector; return appInjectorRef; } export function getSingleton(token: any) { let injector: Injector = appInjector(); return injector.get(token); }
Quelques crédits à Github.com/angular/angular/issues/4112#issuecomment-15381157 2 avec exemple Plunker.
Dans ~ 2.0.0 AppInjectorC () renvoie non défini.
Vous pouvez suivre:
export class AnnotationExample { @PersonName name: string; constructor() { alert(this.name); } } function PersonName(/*target: Function, fnName: string, fn: any*/) { return {value: 'amit'}; } var whatIs = new AnnotationExample();
La question concerne la manière dont on irait injecter un service dans un décorateur. Pas comment utiliser un décorateur. Plus précisément, ils souhaitent accéder à une dépendance code> code> à l'intérieur du décorateur, puis définissez la valeur de la propriété décorée nom code> dans le
hellocomponent code>.
Actuellement, pour injecter des dépendances dans mes décorateurs (et d'autres classes de module supplémentaires), j'utilise cette solution de contournement: après avoir été injecté sur le composant racine, il permet d'utiliser la méthode Static Obtenir la méthode. Pour obtenir des dépendances pendant l'exécution des fonctions d'exécution.
Toujours à la recherche d'une meilleure solution. p> p>
Je pense que vous avez oublié d'ajouter le code de votre définition de module, n'est-ce pas? Quelque chose comme l'ajout .then () code> jusqu'au bout afin de définir les valeurs de dépendance?
Une façon de le faire en angulaire 7 est la suivante:
décorateur.service. TS strud> p> autre.service.ts strong> p>
Voulez-vous définir la valeur pour
nom code> à partir de
@personname () code> décorateur?
Oui c'est vrai.