Angular (поставщик услуг)

Пожалуйста, мне нужна твоя помощь. я разрабатываю гибридное приложение с ionic, angular, cordova, и я создал сервис под названием csservice

import {Injectable} from "@angular/core";
import {HttpClient} from "@angular/common/http";
import {Observable} from "rxjs";

@Injectable()
export class PiecesService {
 private donnes: any;


constructor(public http: HttpClient) {
  }

 getCote(nomCote, nomRobot) {
this.http.get('./assets/etat_pieces.json').subscribe(
  data => {
    this.donnes = data;
    console.log(this.donnes);
    for (var i = 0; i < this.donnes.cote.length; i++) {
      if (this.donnes.cote[i].nom = nomCote) {
        for (var j = 0; j < this.donnes.cote[i].robots.length; j++)
          if (this.donnes.cote[i].robots[j].nom = nomRobot) {
            console.log(this.donnes.cote[i].robots[j].pieces);
            return this.donnes.cote[i].robots[j].pieces;
          }
      }
    }
    return this.donnes;
  });
 }
}

и страница частей.ц

import { Component } from '@angular/core';
import {PiecesService} from "../services/pieces-service";
import { NavController, LoadingController } from 'ionic-angular';
import {Observable} from "rxjs";
//import {HttpClient} from "@angular/common/http";
@Component({
 selector: 'page-pieces',
 templateUrl: 'pieces.html'
  })
 export class PiecesPage {
 info:any;

 constructor(public nav: NavController, public piecesService: PiecesService) {

  this.info = piecesService.getCote("Gauche", "Robot 2 DC 0912");
  console.log(this.info);

    }

  }

.. проблема в том, что я не могу прочитать данные в кусках из службы, о которой упомянуто как неопределенное в console.log(this.info);

пожалуйста, помогите мне.

4 ответа

1) Сначала создайте функцию в служебном файле, как,

public getAll(actionUrl: string): Observable<any[]> {
  return this.http.get<any[]>(API_URL + actionUrl);
}

Где (API_URL = базовый URL)

Вызовите эту функцию из файла компонента, как,

this.piecesService.getAll('./assets/etat_pieces.json')
  .subscribe((response: any) => {
    console.log(response.data);
  });

Теперь вы можете получить результат.

Замените подписку в PiecesService на карту, а затем в куски.

 piecesService.getCote("Gauche", "Robot 2 DC 0912").subscribe(value => this.info = value);

Попробуйте использовать async/await. Или просто верните наблюдаемый http и подпишите его в UsedComponent(Page Pieces.ts).

Ваша функция getCote ничего не возвращает. Обычно вы не звоните по подписке, пока не окажетесь там, где хотите использовать свои данные, и должны вернуть наблюдаемое в поле getCote вместо этого, а затем подписаться на него в вашем компоненте. Или используйте асинхронную трубу.

Вы могли бы использовать map Функция на наблюдаемом для преобразования данных, прежде чем другая часть вашего кода подпишется на него.

Ваш код может выглядеть так:

cs.service.ts:

getCote(nomCote, nomRobot) {
  return this.http.get('./assets/etat_pieces.json').map(
    data => {
      this.donnes = data;
      console.log(this.donnes);
      for (var i = 0; i < this.donnes.cote.length; i++) {
        if (this.donnes.cote[i].nom = nomCote) {
          for (var j = 0; j < this.donnes.cote[i].robots.length; j++)
            if (this.donnes.cote[i].robots[j].nom = nomRobot) {
              console.log(this.donnes.cote[i].robots[j].pieces);
             return this.donnes.cote[i].robots[j].pieces;
            }
        }
      }
      return this.donnes;
  });
}

parts.component.ts:

piecesService.getCote("Gauche", "Robot 2 DC 0912")
  .subscribe(info => console.log(this.info));

Вы могли бы, вероятно, очистить код внутри функции карты, которую я добавил, используя map/filter/ lower (подробнее здесь). Или, по крайней мере, с помощью циклов foreach. Я не уверен, почему вы храните данные на this.donnes но, может быть, вы пытаетесь кэшировать это или что-то...

Другие вопросы по тегам