Angular IO: возвращение обещаний - PullRequest
0 голосов
/ 05 мая 2018

У меня проблема с моей системой.

В основном, у меня есть сущность:

import { Produto } from "./produto.model";
import { Empresa } from "./empresa.model";
import { Mensagem } from "./mensagem.model";

export class Nfe{

    public codNfe: number;
    public numeroNfe: number;
    public dataEmissao: Date;
    public valorTotal: number;
    public empresa: Empresa;
    public produtos: Array<Produto>;
    public mensagens: Mensagem;

    constructor(){};
}

И услуга:

  constructor(private http: Http) { }

      public getNFE(numero: string): Promise<Nfe>{
        return this.http.get(`${URL_API}nfe?numeroNfe=${numero}`)
          .toPromise()
          .then((response: any) => {
            return response.json()
          });
      }

И вид:

export class ExibirNfeComponent implements OnInit {

  public nfe: Nfe;
  constructor(private service: NfeService) { 

  }

  ngOnInit() {
    this.service.getNFE('26180406057223028939650050000133071050336085')
    .then((nfe: Nfe) => {
      this.nfe = nfe;
    })
  }

}

<div class="row">
  <div class="col-sm-2">Id: {{nfe.codNfe}}</div>
</div>

Когда я вызываю мой экран, я получаю эту ошибку:

ОШИБКА TypeError: Невозможно прочитать свойство 'codNfe' из неопределенного

Я предполагаю, что это происходит, потому что службе требуется некоторое время, чтобы ответить. Мне нужен способ, чтобы представление ожидало, пока мой объект не заполнится.

Как я могу это сделать?

Обновление 1

Я поставил несколько консольных логов:

  ngOnInit() {
    console.log('Begin OnInit')
    console.log(this.nfe)
    this.service.getNFE('26180406057223028939650050000133071050336085')
    .then((nfe: Nfe) => {
      this.nfe = nfe;
      console.log(this.nfe)
    });
    console.log('End OnInit');
  }

посмотрите результаты: введите описание изображения здесь

Ответы [ 2 ]

0 голосов
/ 05 мая 2018

Я нашел проблему. Это был просто мой JSON-фреймворк. Структура была матрицей, и мое приложение получило объект.

Спасибо за все

0 голосов
/ 05 мая 2018

Вы используете переменную nfe в своем шаблоне до того, как он будет определен.

{{nfe.codNfe}}

Это то, что говорится в сообщении. Вы должны сделать проверку, прежде чем использовать его. Для этого есть ярлык, добавив ?.

Измените эту часть на

{{nfe?.codeNfe}}

Вопросительный знак проверит, является ли nfe неопределенным или пустым, и получает доступ только к codeNfe, если это не так.

...