angular - 如何使用角度从服务中检索 api 数据以显示在控制台上
问题描述
我在从 asp.net 检索数据时遇到问题。我正在尝试获取控制台上显示的所有预订餐厅预订数据。它只在控制台上显示未定义。
下面是从 asp.net 核心获取数据的服务代码
import { Booking } from './../_models/booking';
import { environment } from 'src/environments/environment';
import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { Observable } from 'rxjs';
@Injectable({
providedIn: 'root'
})
export class BookingService {
MainUrl = 'http://localhost:5000/api/Book/';
constructor(private http: HttpClient) { }
getBooks(): Observable<Booking[]> {
return this.http.get<Booking[]>(this.MainUrl);
}
getBook(id): Observable<Booking> {
return this.http.get<Booking>(this.MainUrl + id);
}
}
下面是 app.component 文件
import { Component, OnInit } from '@angular/core';
import { BookingService } from './_services/booking.service';
import { HttpClient } from '@angular/common/http';
import { ActivatedRoute } from '@angular/router';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit {
bookings: any;
modal: any;
constructor(private bookingService: BookingService, private http: HttpClient, private route: ActivatedRoute ) { }
ngOnInit() {
console.log(this.bookings);
}
loadBooks() {
this.bookingService.getBooks().subscribe(data =>
this.bookings = data);
}
}
下面是 app.module 文件
import { BookingService } from './_services/booking.service';
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { TestComponent } from './test/test.component';
import { HttpClientModule } from '@angular/common/http';
@NgModule({
declarations: [
AppComponent,
TestComponent
],
imports: [
BrowserModule,
HttpClientModule,
AppRoutingModule
],
providers: [BookingService],
bootstrap: [
AppComponent
]
})
export class AppModule { }
解决方案
每次将组件渲染到视图时,ngOnInit() 只会触发一次。您的指示是记录预订变量,该变量在开始时是一个统一化的值。
loadBooks 方法应该在 ngOnInit() 中,否则你将永远不会使用它,因此 bookings 永远不会更新它的值。
我会将 console.log() 移到 subscribe 方法的回调中,然后将 loadBooks 放入 ngOnInit()
ngOnInit() {
this.loadBooks();
}
loadBooks() {
this.bookingService.getBooks().subscribe(data => {
this.bookings = data;
console.log(bookings);
}
);
}
顺便说一句,由于您的应用程序现在似乎没有将预订用于除登录之外的任何其他内容,您也可以直接将 loadBooks() 代码简化为
loadBooks() {
this.bookingService.getBooks().subscribe(data =>
console.log(data));
}
推荐阅读
- powerbi - 在 PowerBi 中从 SQL 刷新数据
- java - Javax-Persistance:实体没有使用 Java 记录的主键
- hibernate - 为 grails 中的 hasMany 字段设置 XmlAttribute
- sql - 从运输表中获取独特的车道
- google-colaboratory - Colab 的生产力:直接从网络(例如 Kaggle)数据库加载还是上传到 colab 目录然后解压?
- python - 在下拉列表中使用名称
- python - 分析字符串查看元音和 2 个连续字母
- android - 颤振应用程序在内部测试中崩溃(在我的手机上工作正常)
- php - Laravel 简单授权 - 有时不工作 - “无效凭据”。
- python - 为什么模型文本不显示在 html 中?