Angular: el servicio compartido entre componentes no funciona

Tengo un servicio donde declaro mi variable. En mi componente uso esta variable para poner datos en ella.

Servicio:

@Injectable() export class DataService { public msgs = []; constructor() { } } 

Ahora uso esta variable en mi componente:

 export class MessagesComponent implements OnInit { constructor(private dataService: DataService){} ngOnInit() { this.getData(); } getData(){ let msgs = []; if (diffr <= this.geomessage[i].range) { this.geomessage[i].dist = diffr; msgs.push(this.geomessage[i]); //console.log("this message: ", this.geomessage[i]); //DEBUG } this.dataService.msgs = msgs; } } 

Solo he publicado el código necesario. El this.dataService.msgs llenó de mensajes funciona bien. Cuando llegué a otro componente, los datos de this.dataService.msgs aún existen, pero cuando vuelvo al this.dataService.msgs Messagescomponent este this.dataService.msgs undefined está undefined hasta que lo vuelva a llenar, pero necesito los datos que this.dataService.msgs . ¿Alguien sabe cómo hacer esto?

Gracias

Si está proporcionando su servicio de datos dentro de la matriz de proveedores de su anotación @Component ,

 @Component({ ... providers: [DataService], })... 

este servicio será un singleton (creará una nueva instancia) para este componente (y son hijos si no han proporcionado este servicio también bajo su anotación).

Si desea utilizar este servicio entre múltiples componentes y compartir la misma instancia del servicio; debe proporcionar este servicio en un componente / módulo que sea el padre de estos componentes en el árbol DI. Si se trata de un servicio global, sugiero proporcionarlo solo en su AppModule (o en un módulo compartido).

 @NgModule({ providers:[DataService] }) 

Solo una rápida explicación sobre la respuesta de echonax, es que el proveedor funciona como una jerarquía. Si lo agrega al módulo de la aplicación, funcionará en toda la aplicación y, por lo tanto, no debe “proporcionarlo” en ningún otro lado. Sin embargo, si no necesita el servicio ‘globalmente’, solo bríndelo en el componente principal.