我创建了一个简单的测试项目来学习一些基本的Angular ,如CRUD函数,ngFor和HttpClient方法(get,post)。
现在我已经创建了一个带有API键的firebase数据库,并添加了一些数据,这样我就可以尝试获取数据并使用ngFor在html表中显示。
我遇到了一个问题,我相信我的代码是正确的,但我不能在屏幕上显示任何数据,chrome没有抛出任何错误,我的编译器也没有。我用http从数据库中获取数据。get方法,然后使用内置到angular中的管道METHOD将对象数据Map到对象数组,一旦这样做,我就能够订阅数据并尝试在我的html表中使用它,但后面没有显示任何内容。我已经附上了我的代码文件下面,如果有人可以看看,并帮助我,这将是伟大的。
对象类CODE
export class Courses {
name: string;
roomNumber: string;
teacher: string;
id?: string;
}
课程组件代码(课程。component.ts)
import { Component, OnInit } from '@angular/core';
import { CoursesService } from '../courses.service';
import { Courses } from '../courses';
@Component({
selector: 'app-courses',
templateUrl: './courses.component.html'
})
export class CoursesComponent implements OnInit {
courses;
constructor(service: CoursesService) {
this.courses = service.fetchCourses();
}
ngOnInit(): void{
}
}
课程服务代码
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { map } from 'rxjs/operators';
import { Courses } from './courses';
@Injectable({
providedIn: 'root'
})
export class CoursesService {
listofCourses: Courses[] = [];
constructor(private httpClient: HttpClient) { }
fetchCourses() {
return this.httpClient.get<{ [key: string]: Courses }>('https://testang-6c37f-default-rtdb.firebaseio.com/courses.json')
.pipe(map((response) => {
const courses = [];
for (const key in response) {
if (response.hasOwnProperty(key)) {
courses.push({ ...response[key], id: key })
}
}
return courses;
}))
.subscribe(courses => {
console.log(courses)
this.listofCourses = courses;
});
}
}
课程html代码
<h2>Course List</h2>
<table class="table table-bordered">
<tr>
<th>Name</th>
<th>Room Number</th>
<th>Teacher</th>
</tr>
<tr *ngFor="let course of listofCourses">
<td>{{course.name}}</td>
<td>{{course.roomNumber}}</td>
<td>{{course.teacher}}</td>
</tr>
</table>
应用程序模块代码
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { AppComponent } from './app.component';
import { CoursesService } from './courses.service';
import { CoursesComponent } from './courses/courses.component';
import { ReactiveFormsModule } from '@angular/forms';
import { HttpClientModule } from '@angular/common/http';
@NgModule({
declarations: [
AppComponent,
CoursesComponent
],
imports: [
BrowserModule,
ReactiveFormsModule,
HttpClientModule
],
providers: [
CoursesService
],
bootstrap: [AppComponent]
})
export class AppModule { }
1条答案
按热度按时间goqiplq21#
当前代码的一些问题。
1.您正在创建
courses
变量,但没有使用类型声明它。将courses
声明为Observable<Course[]>
类型。2.1.将变量赋值移动到
ngOnInit
生命周期中,而不是使用建议的构造函数。2.2.当前代码将Subscription分配给
courses
变量。修改CoursesService
中的fetchCourses
方法。2.2.1.移除
.subscribe()
。返回值为Observable<Course[]>
。1.当我们将
courses
定义为Observable<Course[]>
时,在HTML中使用async
管道订阅Observable。Demo @ StackBlitz