constructor(private anotherService?: MyAnotherService) {
// doThings with anotherService
}
5 Réponses :
supprimez simplement le '?'
myVariable: any;
constructor(private anotherService: MyAnotherService) {
this.myVariable = [];
}
ou pour les paramètres:
import {MyAnotherService} from '/pathto your service';
constructor(private anotherService: MyAnotherService) {
//prodedures
}
Le constructeur doit généralement être utilisé uniquement pour l'injection de dépendances
<my-component [state]="'joining'"></my-component>
export class MyService{
state: string;
constructor() {
console.log(this.state) // => undefined
}
ngOnInit() {
console.log(this.state) // => 'joining'
}
}
Vous pouvez voir dans ce cas, j'essaye de construire un service, @ Input decorator doit être utilisé avec @ Component uniquement. Ai-je raison?
peut envoyer ---> stackoverflow .com / questions / 51027711 /…
vous pouvez l'utiliser comme modèle ou variable
Considérez ceci:
ng serve de développement, mais pas dans AOT < / a>, activez "strictMetadataEmit": true pour obtenir des détails sur ce qui ne va pas. @Optional () pour les dépendances facultatives . < / li>
La pratique courante est d'y mettre aussi peu de logique que possible. La plupart du temps, le constructeur est utilisé pour injecter des dépendances.
ngOnInit() {
this.anotherService.getValue().subscribe((value) => {
// do something
});
}
puis l'utiliser dans d'autres fonctions
constructor(private anotherService: AnotherService) {
// **don't** do Things with anotherService
}
La fonction ngOnInit () sera appelé lorsque le DOM du composant a été créé, toutes les dépendances ont été injectées et toutes les entrées ont été liées. Il est courant d'utiliser ngOnInit () même si la logique ne dépend pas du DOM, de la liaison d'entrée ou de l'injection Dependencie.
Vous pouvez utiliser un jeton d'injection facultatif
token.ts
import {INTEGER_TOKEN} from './token';
import {Injectable, Inject, Optional} from '@angular/core';
@Injectable({
providedIn: 'root',
})
export class MyService{
constructor(@Optional() @Inject(INTEGER_TOKEN) private someInteger?: number) {
// doThings with someInteger
}
app.module.ts
import {INTEGER_TOKEN} from './token';
@NgModule({
//...
],
providers: [
{
provide: INTEGER_TOKEN,
useValue: 1 //Or factory if you need one
},
import {InjectionToken} from '@angular/core';
export const INTEGER_TOKEN= new InjectionToken<number>('IntegerToken');
pourquoi passez-vous 'private someInteger?: number'
C'est l'une des configurations que j'aimerais avoir à disposition lors de la phase de construction, rien que ça. N'est-ce pas normal dans Typescript d'avoir ce genre de constructeur?
Le constructeur doit généralement être utilisé uniquement pour l'injection de dépendances
Avez-vous besoin que ce service soit déclaré en tant que fournisseur tree-shakable ?
Comment créez-vous une instance de ce service? Laissez-vous toujours la DI angulaire le faire? Alors, comment fournissez-vous le paramètre entier?
@David J'ai ajouté la modification pour clarifier pourquoi je voudrais que le service soit créé avec ou sans la relation avec Angular