J'ai une constance globale comme le répertoire racine que je veux que chaque composant ait accès à. Dans une autre question Stackoverflow, la réponse était de créer une classe de constantes et d'importer cela à chaque composant.
Y a-t-il un moyen de bootstrap une classe de constantes de sorte que chaque composant de l'application lui ait accès sans aucune importation supplémentaire? P>
Je l'ai jusqu'à présent mais cela ne fonctionne pas, comment puis-je boiter La classe Constantes, puis accédez à mes composants? p>
constantes.ts code> p> main.ts < / code> p> aléatoire.component.ts code> p>
3 Réponses :
import {Component,bind,provide} from 'angular2/core';
import {bootstrap} from 'angular2/platform/browser';
import {FORM_DIRECTIVES} from 'angular2/form';
import {Directive, ElementRef, Renderer, Input,ViewChild,AfterViewInit} from 'angular2/core';
import {Constants} from 'src/constants'
import {ViewChild, Component, Injectable} from 'angular2/core';
@Component({
selector: 'my-app',
template: `{{test}}`,
})
export class App {
test: string;
constructor(cs:Constants){
this.test = cs.root_dir;
}
}
bootstrap(App, [Constants]);
Demo
Pour répondre à vos questions:
Tous les composants à l'aide de la classe Constantes devront importer votre fichier de constantes. P> LI>
Afin d'utiliser la classe Constantes, vous devez l'injecter dans le constructeur de tout composants de consommation, en supprimant la fonction injector.get () de Random.Component.TS comme: P> LI >
ul> Vous pouvez également décorer votre classe constante sous forme d'un Voici un plumeur de travail. P> < P> Il est avantageux de bootstrap les constantes partagées au niveau de l'application afin que seule une instance de la classe soit créée et partagée entre tous les composants. P> P> @Injectable code> et @Inject code> dans le constructeur de votre composant . P>
Y a-t-il un avantage à l'injecter dans le constructeur? Est-ce ce qui le fait donc que par exemple est créé?
DI facilite la configuration et donc faciles à tester. Sinon, c'est codé dur et les tests peuvent devenir assez lourds.
@ClickTisnick C'est le modèle recommandé pour obtenir une flexibilité maximale DI pour tester, NGUPGrade et Utilisation de TransfertRef, voir Stackoverflow.com/a/35351649/ 1774183
import {Component, Inject} from 'angular2/core'
import { Constants } from './constants';
@Component({
selector: 'test',
template: `
Constants: <strong>{{ urlTemplate }}</strong>
`
})
export class AppComponent{
constructor(@Inject (Constants) constants: Constants){
this.urlTemplate = constants.root_dir;
}
}
Je suis nouveau à Angular2, ce n'est pas si ce qui précède est le meilleur moyen d'obtenir ce que vous voulez, j'espère que cela aidera
Tu es juste là. Vous devez juste passer
constantes code> via le constructeur:constructeur (constantes: constantes) {} code> (vous devrez l'importer de toute façon ou que TS se plaint.