Я делаю http-запрос на сервер JSON и помещаю значение в переменную, когда я делаю console.info(), он показывает мне всю информацию из json, но когда я пытаюсь использовать интерполяцию, чтобы передать информацию в шаблон , мне выдает эту ошибку
ERROR TypeError: Cannot read property 'numero' of undefined
A отметил, что json имеет ноль на своем имени, как я могу это решить?
Мой сервис:
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { API } from '../../../app.api';
@Injectable({
providedIn: 'root'
})
export class TarefadetalheService {
constructor(private http: HttpClient) { }
recuperaDetalhes(): any{
return this.http.get("http://localhost:4000/tarefadetalhe")
}
}
Вот моя страница, которая вызывает службу:
import { Component, OnInit } from '@angular/core';
import { NavParams } from '@ionic/angular';
import { TarefadetalheService } from './tarefadetalhe.service';
import { Tarefa } from '../../models/tarefa.model';
@Component({
selector: 'app-tarefas-detalhe',
templateUrl: './tarefas-detalhe.page.html',
styleUrls: ['./tarefas-detalhe.page.scss'],
})
export class TarefasDetalhePage implements OnInit {
idTarefa = null
tarefa: any
constructor(private navParams: NavParams, private getTarefaDetalhe: TarefadetalheService) { }
ngOnInit() {
this.idTarefa = this.navParams.get('id_tarefa');
this.getTarefaDetalhe.recuperaDetalhes().subscribe((data)=>{
this.tarefa = data[0] //now it works
})
}
}
Вот мой шаблон:
<ion-header>
<ion-toolbar>
<ion-title>{{tarefa.numero}}</ion-title>
</ion-toolbar>
</ion-header>
<ion-content padding>
ID da tarefa é: {{idTarefa}}
</ion-content>
Как видите, теперь я могу отображать данные так, как хотел, но это постоянно выдает ошибку, я просто попытался запустить ionic serve еще раз, и никакого эффекта.

Я пытался сделать {{tarefa[0].numero}}, но таким образом он даже не показывает мне данные в шаблоне.
Смотрите ответ здесь: stackoverflow.com/questions/38544503/…
Возможный дубликат Доступ к определенному элементу массива в шаблоне Angular2



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Как насчет захвата индекса json, как показано ниже:
this.tarefa = data[0]
console.info(this.tarefa)//Here I can show the data
и тогда {{tarefa.numero}} должно работать на вас.
Теперь данные рендерятся, но продолжают выдавать ошибку, как видите... Я отредактировал вопрос
Как уже говорили другие, this.tarefa - это массив, объект со всеми данными, которые вам нужны, находится в первом элементе массива.
Либо доступ к нему через
this.tarefa[0].numero
или когда вы извлекаете данные и сохраняете их в переменной tarefa, просто сохраняйте 1-й (и единственный) элемент массива.
this.tarefa = data[0]
Второе предложение сработало для меня, и шаблон теперь в порядке, но консоль продолжает выдавать мне ошибку, и я не знаю, почему :/
вы должны вызывать tarefa.numero до того, как запрос на получение к API будет фактически завершен.
Итак, я должен сделать Async и ждать ?? Я знаю, что он делает, но я не знаю, как реализовать, не могли бы вы мне помочь?
Извините, я не очень хорошо знаю Angular. Вам не нужно использовать асинхронное ожидание, но вам нужно указать Angular НЕ загружать шаблон до тех пор, пока данные не будут фактически получены.
Проверьте этот вопрос stackoverflow.com/questions/44900769/…
@TiagoSilveira хахаха, это круто!
Это массив,
tarefa[0].numeroдолжен работать нормально