#angular #api #http #frontend #client-server
Вопрос:
Я пытаюсь получить данные из вызова api с помощью Angular и привязать их к переменной.
Код компонента приложения выглядит следующим образом.
export class AppComponent {
title = 'Conveyor';
clr = 'green';
serialPortName = "COM123"
constructor(private convServer:ConvServerService)
{
}
ngOnInit() {
this.convServer.getPortName().subscribe((data)=>
{
console.warn(data);
this.serialPortName = data['title'];
})
}
}
Вызов api происходит отсюда. Он содержит следующие данные в формате json.
{
"userId": 1,
"id": 1,
"title": "delectus aut autem",
"completed": false
}
Код услуги выглядит следующим образом:
import { Injectable } from '@angular/core';
import { getLocaleDateFormat } from '@angular/common';
import {HttpClient} from '@angular/common/http'
@Injectable({
providedIn: 'root'
})
export class ConvServerService {
constructor(private http:HttpClient) {
}
getPortName() {
let url= "https://jsonplaceholder.typicode.com/todos/1";
return this.http.get(url);
}
}
Данные отображаются правильно в веб-консоли, как показано на следующем рисунке.
Данные отображаются правильно в веб-консоли, но когда я хочу получить конкретные данные, такие как данные [«название»], это приводит к ошибке
Element implicitly has an 'any' type because expression of type '"title"' can't be used to index type 'Object'. Property 'title' does not exist on type 'Object'.ts(7053)
Как я могу это решить? Я также новичок в угловой и веб — разработке. Есть какие-нибудь предложения?
Ответ №1:
попробуйте это:
this.serialPortName = data.title;
Я предполагаю, что вы получаете объект, а не массив объектов
Комментарии:
1. Я использовал это и уже ответил на него, но для этого вам также нужно изменить тип данных
data
наdata:any
и @Akbar спасибо за ваш ответ
Ответ №2:
Ответ на это заключается в том, что я изменил тип данных на любой, используя data:any
и this.serialPortName = data.title;
Измененная ngOnInit()
функция class AppComponent
находится здесь
ngOnInit() {
this.convServer.getPortName().subscribe((data:any)=>
{
console.warn(data);
this.serialPortName = data.title;
})
}
Теперь он работает идеально