Saltar al contenido

Angular 2 http se llama observable dos veces

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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *