Al fin después de tanto trabajar hemos hallado la solución de esta duda que tantos usuarios de nuestro espacio presentan. Si tienes algo que aportar puedes dejar tu información.
Solución:
Su subscribe
se debe poner en el componente en lugar del servicio. La razón por la que su componente es suscrito a los datos devueltos por el servicio, y más adelante puede darse de baja o agregar más control (como denunciar) si es necesario. El código se verá así después de los cambios.
En su componente:
ngOnInit()
this.loadData();
loadData()
this._service.getData().subscribe(data => this.pages = data);
En tu servicio:
getData()
return this.http.get('./src/data.json')
.map((res:Response) => res.json());
this._service.getData()
devuelve un Asunto, no una lista de PageContent. Podrías cambiar tu loadData
me gusta :
loadData()
this._service.getData().subscribe(data => this.pages = data);
console.log("Load data !");
y quitar el subscribe
parte de tu getData
método (de DemoService
). Acabo de probar esto, y el ngOnInit
se llama una vez
En inglés, cuando te suscribes a una transmisión (Observable
) el código dentro de la primera función dentro del bloque de suscripción se ejecutará cuando ese observable emita datos.
Si te suscribes dos veces se llamará dos veces, etc.
Dado que se está suscribiendo varias veces, la primera función (llamada función siguiente) dentro del bloque de suscripción se ejecutará varias veces.
Solo debes suscribirte a una transmisión una vez dentro ngOnInit
.
Cuando desee emitir datos en la transmisión, puede usar un Sujeto RXJS para esto y hacer que el Sujeto emita posteriormente a la transmisión a la que está suscrito usando el mapa plano RXJS.
Si te ha sido de ayuda este artículo, te agradeceríamos que lo compartas con más seniors de esta forma contrubuyes a dar difusión a nuestra información.