2017-02-06 4 views
0

я работаю на Angular2 и MySQL, нужен совет по инъекционным услугам с использованием наблюдаемых,Angular2 объекту синтаксического анализа JSON с помощью наблюдаемых

Я создал службу, чтобы получить все данные из API с помощью getTable(), но теперь я m застрял в реализации другой службы для фильтрации и анализа данных json и использовать только epoch_time и temp из объекта данных (ниже) и подписаться на него с помощью Observables. Я использую Angular2 v2.2

service.ts:

@Injectable() 
export class TabuleService { 

     //private headers = new Headers({'Content-Type': 'application/json'}); 
     private _Url = 'http://localhost:3000'; // URL to web api 

     constructor(private _http: Http) {} 

     getTable(): Observable<Tabule[]> { 
     const url = this._Url+'/temperature'; 
     return this._http.get(url) 
        .map(res => res.json()) 
        .catch(this.handleError); 
     } 

     getTemp(): Observable<testing[]> { 
     const url = this._Url+'/temperature'; 
     return this._http.get(url) 
        .map(this.extractData) 
        //.filter(temp=>temp.mac==='3s-ds-23-sf-23-ce-32') 
        .catch(this.handleError); 
     }    

    private extractData(res: Response){ 
     let body =res.json(); 
     console.log(body.data); 
     return body.data || { }; 

    } 

данных объектов

epoch_time_stamp:1486257208633 
    mac:"3s-ds-23-sf-xx-xx-xx" 
    task_id:2 
    temp:"23" 
    time_stamp:"2017-02-05T01:13:28.000Z" 

    epoch_time_stamp:1486257208733 
    mac:"3s-ds-23-sf-xx-xx-xx" 
    task_id:3 
    temp:"26" 
    time_stamp:"2017-02-05T01:15:28.000Z" 
+0

в .map(), вы можете изменить этот объект, который приходит из API. вам просто нужно выполнить нормальный js-код. extractData() вернет целые данные объекта ответа. –

+1

Я не понимаю, в чем проблема –

+0

Я пытаюсь получить данные только с этими свойствами temp: "26" epoch_time_stamp: 1486257208633 –

ответ

0

Observable.filter не будет работать для этой проблемы вы описываете. В вашем методе .map вам нужно добавить логику, которая «очищает» ваши данные по вашему усмотрению.

.: например

getTemp(): Observable<testing[]> { 
    const url = this._Url+'/temperature'; 
    return this._http.get(url) 
     .map(res => { 
      let temp = res.json(); 
      //Add logic here that loops through temp and cleans value 
      return temp; 
      }).catch(this.handleError); 
     } 
+0

thankyou ... first im, фильтруя данные на основе mac_id i, придумал этот подход var data2 = data.filter (function (da) {return da.mac == "43-d3-f4- d3-5v-3r" }) сейчас im попытаться выполнить цикл, используя метод foreach, но im неспособный чтобы найти ошибку тип возвращаемого значения не определен data2.forEach (функция (эл) {возвращение {время: el.time, температура: el.temp}} ) @nzjun –

+0

Привет Рам. Попробуйте использовать функцию стрелки, если вы можете использовать синтаксис ES6. Кроме того, вам может понадобиться сопоставить ваши данные, а не возвращать по одному элементу за раз. var data = {}; data2.forEach ((el) => {data.push ({time: el.time, temp: el.temp})}); возвращать данные; – nzjun90

+0

Спасибо за вашу поддержку. Я понял сейчас –