Я читаю через запрос к моей базе данных, он отлично выполняет запрос, потому что я могу читать через консоль, JSON в порядке, но таблица не заполняется.
это мой компонент
@Component({
selector: 'app-envios',
templateUrl: './envios.component.html',
styleUrls: ['./envios.component.css']
})
export class EnviosComponent {
constructor(private conexion: ConexionService) {}
envios: Envio[];
@Input() idnum: number
ngOnInit() {
}
buscarEnvio()
{
const idnum = parseInt((document.getElementById('idenvio')as HTMLInputElement).value);
console.log(idnum);
this.conexion.consultarEnvio(idnum);
}
}
И это моя служба связи
export class ConexionService {
envio : Envio[];
private api = 'http://localhost:8080/ProyectoFinal/webapi';
consultarEnvio(id: Number)
{
const path = `${this.api}/estadoenvio/${id}`;
return this.http.get<Envio[]>(path).subscribe(envio => {
console.log(envio);
});;
}
}
Это HTML
<div class="container-fluid">
<div class="input-group">
<input type="text" class="form-control" placeholder="CC" id="idenvio">
<span class="input-group-btn">
<button type="submit" class="btn btn-danger" type="button" (click)="buscarEnvio()">Buscar</button>
</span>
</div>
<br>
<div class="col" id="tabla">
<table class="table table-border">
<thead>
<tr class="table-danger">
<th scope="col">Id del envío</th>
<th scope="col">Nombre del destinatario</th>
<th scope="col">Dirreción de envío</th>
<th scope="col">Código Postal</th>
<th scope="col">Intentos de entrega</th>
<th scope="col">Estado del envio</th>
</tr>
</thead>
<tbody>
<tr class="table-danger" *ngFor="let envio of envios">
<td class="table-danger">{{envio.idEnvio}}</td>
<td class="table-danger">{{envio.nombreDestinatario}}</td>
<td class="table-danger">{{envio.direccionCompleta}}</td>
<td class="table-danger">{{envio.codigoPostal}}</td>
<td class="table-danger">{{envio.numIntentosEntrega}}</td>
<td class="table-danger">{{envio.idEstadoEnvio}}</td>
</tr>
</tbody>
</table>
</div>
</div>
Если вам это нужно, это интерфейс
export interface Envio
{
idEnvio : number;
nombreDestinatario: string;
DNINIF: string;
codigoPostal: string;
direccionCompleta:string;
idEstadoEnvio: string;
numIntentosEntrega: number;
}
Если я отлаживаю, я вижу, что Json правильный JSON ОК
Привет, мой компонент envios, envios: Envio[];
Поместите строку в OP, где вы устанавливаете переменную envios. Вам нужно установить его в методе consultarEnvio
Я добавил envio : Envio[]; в начале класса conexion.service (там, где consultarEnvio) есть, но все равно не работает
Это просто набор текста. Вам нужно вернуть this.http.get<Envio[]>(path).subscribe(envio => { console.log(envio); this.envios = envio; });;
Проблема в том, что вы не устанавливаете свою переменную envios
, которая используется для отображения данных (согласно вашему html).
Метод consultarEnvio
возвращает обещание, поэтому вам нужно установить свою переменную в обратном вызове вашего асинхронного метода.
Ваш код должен выглядеть так:
conexionService:
export class ConexionService {
envio : Envio[];
private api = 'http://localhost:8080/ProyectoFinal/webapi';
consultarEnvio(id: Number)
{
const path = `${this.api}/estadoenvio/${id}`;
return this.http.get<Envio[]>(path).then(envio => {
return envio;
});
}
}
Составная часть:
@Component({
selector: 'app-envios',
templateUrl: './envios.component.html',
styleUrls: ['./envios.component.css']
})
export class EnviosComponent {
constructor(private conexion: ConexionService) {}
envios: Envio[];
@Input() idnum: number
ngOnInit() {
}
buscarEnvio()
{
const idnum = parseInt((document.getElementById('idenvio')as HTMLInputElement).value);
console.log(idnum);
this.conexion.consultarEnvio(idnum).then((envioResult) => {
this.envios = envioResult;
});
}
}
buscarEnvio()
{
const idnum = parseInt((document.getElementById('idenvio')as HTMLInputElement).value);
console.log(idnum);
this.conexion.consultarEnvio(idnum).then((envioResult) => {
this.envios = envioResult;
});
}
Он на самом деле возвращает подписку.. Боюсь, это не сработает..
@MikeOne, вы совершенно правы, это должно сработать, если он использует «тогда» вместо «подписаться», не так ли?
.. Я.. не думаю? Разве я что-то упускаю, я нигде не вижу обещания? Может быть, я вас неправильно понимаю?
Вы не назначаете никакого ответа массиву envio
. В subscribe()
назначьте ответ на envio
Обновленный компонент:
@Component({
selector: 'app-envios',
templateUrl: './envios.component.html',
styleUrls: ['./envios.component.css']
})
export class EnviosComponent {
constructor(private conexion: ConexionService) {}
envios: Envio[];
@Input() idnum: number
ngOnInit() {
}
buscarEnvio()
{
const idnum = parseInt((document.getElementById('idenvio')as HTMLInputElement).value);
console.log(idnum);
this.conexion.consultarEnvio(idnum).subscribe(data=>{
this.envios=data;
}
}
}
Обновленный сервис:
export class ConexionService {
private api = 'http://localhost:8080/ProyectoFinal/webapi';
consultarEnvio(id: Number)
{
const path = `${this.api}/estadoenvio/${id}`;
return this.http.get<Envio[]>(path);
}
}
Привет, я буквально скопировал это из вашего ответа, и он все еще не работает, я проверил консоль, и JSON все еще в порядке :(
@NetbeansNoob: смотрите мой обновленный ответ. Вам нужно изменить способ подписки на данные.
я пробовал это, но я получаю эту ошибку, когда он компилирует ОШИБКУ в src/app/envios/envios.component.ts(31,54): ошибка TS2551: свойство «подписаться» не существует для типа «Подписка». Вы имели в виду "отписаться"?
Нет. Вы также должны обновить Сервис. Смотрите мой код
Паван ты лучший.
Спасибо тебе за все, ты настоящий MVP
@NetbeansNoob: обязательно отметьте это как ответ, это поможет другим, кто находится в похожей лодке.
Я вижу пару улучшений:
Где вы устанавливаете envios..?