Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

362
Vistas
¿Cómo modificar datos en Observable en Angular 2?

Estoy trabajando en aprender Angular 2 y Typescript. Estoy creando una aplicación web simple que toma datos de una API WEB y los muestra en una lista. Luego, una vez que el usuario hace clic en un elemento de la lista, se le lleva a una página de detalles.

Tengo un servicio que creé para hacer la llamada a la API que hace lo siguiente:

 GetData() { let data = this.http.get('http://server.name/api/GetData') .map((res) => res.json()); return data; }

Luego, en un componente, me suscribo a los datos como este:

 this.myService.GetData() .subscribe((myService) => this.items = myService);

Cuando regrese http.get, me gustaría realizar algún procesamiento en los objetos JSON antes de regresar del método GetData(). Por ejemplo, agregue una nueva propiedad llamada ID. Esencialmente algo como el pseudocódigo a continuación:

 for each(item in data) { item.ID = newID(); //method for creating IDs }
  1. ¿Es esto algo que se puede hacer?
  2. En caso afirmativo, ¿es algo que DEBE hacerse o hay una mejor manera de lograr lo que estoy tratando de hacer?

Gracias

about 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Puede hacer el procesamiento en el código de su GetData, dentro del map :

 // For RxJS v5 this.http .get('http://server.name/api/GetData') .map(result => { const items = <any[]>result.json(); // could be SomeItem[] instead of any[] items.forEach(item => item.ID = ...); return items; }); // For RxJS v6 this.http .get('http://server.name/api/GetData') .pipe(map(result => { const items = <any[]>result.json(); // could be SomeItem[] instead of any[] items.forEach(item => item.ID = ...); return items; }));

Luego, cuando reciba el objeto en su suscripción, los elementos deben tener las identificaciones asignadas.

Aquí está la referencia a la documentación de RxJs Observable: http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#instance-method-map

about 4 years ago · Santiago Trujillo Denunciar

0

la idea es:

  • obtener el resultado
  • asigne el resultado para obtener solo el json
  • como su json es una matriz, produzca un Observable para cada dato, luego cambie su identificación y envíe los datos de vuelta
  • reunirlos de nuevo en una matriz

el operador mergeMap (reemplazado flatMap en rxjs 5.5+) se usa porque un operador Observable siempre devuelve un Observable, pero dado que creamos un Observable dentro del resultado mismo, produce un Observable>, mergeMap elimina una capa Observable. Espero que esto ayude

 GetData():Observable<WhateverWithIDInside[]> { let data = this.http.get('http://server.name/api/GetData') .map(res => res.json()) .mergeMap(dataArr => Observable.from(dataArr) .map(data => { data.ID = newID(); return data; }) .toArray() ); }
about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda