web-dev-qa-db-fra.com

Angular 2 Setter et Getter

J'essaie de créer un service pour analyser les données de différents composants sur différents itinéraires.

Si j'appelle le service de suivi sur le même composant, j'obtiens le résultat souhaité, mais si j'essaie d'obtenir les résultats définis d'un autre composant, le service retourne non défini.

Voici mon service: -

import {Injectable} from '@angular/core';

@Injectable()
export class TestService {

  public _test:any;

  set test(value:any) {
    this._test = value
  }

  get test():any {
    return this._test;
  }
}

Je règle le service comme: -

this.testService.test = 3;

et je reçois les données de service dans mon composant en utilisant les éléments suivants: -

console.log(this.testService.test)

Comme mentionné précédemment, cela fonctionne parfaitement si je communique au sein du même composant, j'ai les mêmes importations, fournisseurs et constructeur.

Aussi juste une note les composants sont des composants frères

Quelqu'un pourrait-il m'aider ou me diriger dans la bonne direction? Ce serait très apprécié.

Si vous avez besoin de code supplémentaire, faites le moi savoir.

4
Tony Hensler

Si vous souhaitez partager un service entre des composants qui ne sont pas des enfants du composant parent, vous devez inscrire le service dans le module et non dans le composant. Lorsque vous enregistrez un service dans un composant, celui-ci n'est disponible que pour ce composant et ses enfants.

Quelque chose comme ça:

@NgModule({
  declarations: [
    AppComponent,
    ProductListComponent,
    StarComponent
  ],
  imports: [
    BrowserModule,
    FormsModule,
    HttpModule
  ],
  providers: [ TestService ],
  bootstrap: [AppComponent]
})
export class AppModule { }
7
DeborahK

Essayez d’initialiser testService var comme ce code à l’intérieur du constructeur de votre composant Component. Cela pourrait fonctionner si la variable non définie est "testService" .

constructor (private testService : TestService ){
      //at this time testService its already initialized.
     console.log(this.testService.test);
}
0
Abel Valdez

Si vous essayez d'interagir entre deux composants de modules différents, vous devez importer votre service dans le module d'application (c'est-à-dire le module principal). De cette manière, la méthode get ne renvoie pas 

0
arun kumar