- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
编辑:我在此处发布的代码与我最初编写的代码一样运行良好。我的学生界面中有一个愚蠢的拼写错误,因此每个学生对象的值“ID”始终未定义。我很生气,我花了好几天才意识到这一点。谢谢大家的回答。
我目前正在学习 Angular,但在组件的 OnInit 方法中设置属性时遇到了问题。我正在使用服务组件从 json 文件中获取数据并将其分配给名为“student”的自定义接口(interface)的实例。
当以数组形式抓取所有学生数据以显示在表格中时,一切正常。但是,当试图仅获取一名学生的信息以显示在“详细信息”模板上时,我收到“类型错误:_co.student 未定义”。
将“*ngIf='student'”添加到模板会消除错误消息,但不会填充模板。
这里是抓取服务组件中定义的数据的函数
private studentURL = 'assets/college-apps.json';
constructor(private http: HttpClient){}
getStudents(): Observable<Student[]> {
return this.http.get<Student[]>(this.studentURL);
}
getStudent(id: number): Observable<Student> {
return this.getStudents().pipe(map(students => students.find(student => student.ID === id)));
}
这是学生详细信息组件中的 ngOnInit 方法
student: Student;
constructor(private route: ActivatedRoute, private router: Router, private studentService: StudentService) {}
ngOnInit() {
let id = +this.route.snapshot.paramMap.get('id');
this.studentService.getStudent(id).subscribe(
student => this.student = student
)
}
这是模板
<mat-card *ngIf='student'>
<mat-card-title>{{student.firstName}} {{student.lastName}}'s Details</mat-card-title>
<mat-card-content let stude>First Name: {{student.firstName}} </mat-card-content>
<mat-card-content>Last Name: {{student.lastName}} </mat-card-content>
<mat-card-content>High School: {{student.highSchool}} </mat-card-content>
<mat-card-content>GPA: {{student.gpa}} </mat-card-content>
<mat-card-content>Reading SAT Score: {{student.readingSatScore}} </mat-card-content>
<mat-card-content>Math SAT Score: {{student.mathSatScore}} </mat-card-content>
<a mat-stroked-button [routerLink]="['']">Back</a>
</mat-card>
最佳答案
因为 this.student
是在模板首次呈现时在异步回调(在订阅中)中分配的 this.student
未定义。当 http 调用返回一个值时,它是 this.student
获取一个值,直到那时当 angular 尝试渲染模板时它会产生未定义的错误。为了解决这种情况,angular 拥有一个名为 safe navigation operator 的运算符.
The Angular safe navigation operator, ?, guards against null and undefined values in property paths in templates.
<mat-card>
<mat-card-title>{{student?.firstName}} {{student?.lastName}}'s Details</mat-card-title>
<mat-card-content>First Name: {{student?.firstName}} </mat-card-content>
<mat-card-content>Last Name: {{student?.lastName}} </mat-card-content>
<mat-card-content>High School: {{student?.highSchool}} </mat-card-content>
<mat-card-content>GPA: {{student?.gpa}} </mat-card-content>
<mat-card-content>Reading SAT Score: {{student?.readingSatScore}} </mat-card-content>
<mat-card-content>Math SAT Score: {{student?.mathSatScore}} </mat-card-content>
<a mat-stroked-button [routerLink]="['']">Back</a>
</mat-card>
这里是概念的简单演示 https://stackblitz.com/edit/angular-gem5sk
尝试删除模板中的 ?
之一,您将在控制台中看到未定义的错误。
还请注意,在 http 调用完成并将值分配给 this.student
之前,模板中的相关位置将为空,这可能是糟糕的用户体验,尤其是对于持续时间长的 http 调用。为此,应用程序中必须包含某种加载程序机制,但这与这个问题有很大关系。写在这里只是为了补充信息。
还放置带有异步 block 的 console.log
以正确查看是否从 http 调用返回值
ngOnInit() {
let id = +this.route.snapshot.paramMap.get('id');
this.studentService.getStudent(id).subscribe(student => {
this.student = student
console.log(this.student); // prints when the request completes
});
console.log(this.student); // always prints undefined, and gets printed before above console.log
}
关于angular - ngOnInit 中的属性集导致 "type error: this.student is undefined",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56908854/
我对这些术语感到困惑。 假设我们有一个 Student 类,那么 的含义是什么 class Student{ public: Student(const Student& a){ ..
嘿伙计们,我可以得到一些关于这个java项目的帮助吗我的问题是这一行Student s = new Student(r.getChar(),r.getChar(),r.getNum(),r.getNu
这个问题在这里已经有了答案: What causes error "No enclosing instance of type Foo is accessible" and how do I fix
在我的一次面试中,一位面试官问我: 给定一个 Student 类和两个对象 s1 和 s2: s1 = new Student(); s2 = new Student(); s1 == s2 如何返回
这个问题在这里已经有了答案: Why can a "private" method be accessed from a different instance? (4 个答案) 关闭 7 年前。 那
我想让我的类(class)在存储在列表中时可以排序(按年龄)。 我读到这个:IComparable Vs IComparer我让我的类(class)可排序。 public class Student
我有一个 List和 String firstName="George" .我想从与 "George" 匹配的列表中提取学生对象没有迭代列表。可能吗? 可能是需要某些方法覆盖或任何使其工作的方法。 p
我收到一个错误extraqualification 'student::' on member 'student' [-fpermissive]。 还有为什么 name::name 这样的语法会用在构
嗨,我正在为 C 类制作这个程序,我已经绞尽脑汁,我来到这里,因为我不能去我的老师或辅导部门,因为当我不工作时他们不可用。 . 我在使用这两个函数时遇到问题 void examination_seat
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 9 年前。 Improve th
请考虑以下代码: class Student { } enum StudentType { } static void foo(IDictionary> students) { } static
What should i do?, i try many ways to solve this problem but still uncaught type error .push and .ma
每当我想在 C++ 上使用模板在二叉树上添加一个元素时,我就会遇到这个错误,而且我很难修复它, 所以这里是我的代码是 Tree.c 文件: template ostream & operator
创建数据库“student”后,当我设置该数据库的权限时,出现错误,并显示消息“错误 1146(42S02):表“student.db”不存在。我不明白为什么会发生这种错误,尽管我确实创建了数据库。
我正在尝试创建一个允许变量赋值的函数,但我不断收到错误: private static void DatabaseSelect(string ToBeSelected, string WhichTab
我认为展示一些经典的 CS 问题并让人们展示他们的算法优化技巧会很有趣。希望我们能够看到一些巧妙的技术来解决我们可以在实践中实现的抽象问题。 理想情况下,解决方案将以具有大 O 分类的伪代码呈现。这种
我是 Java 初学者,陷入了一项任务。如果有人能帮助我,我将非常感激。我有一个具有这些属性的学生类(class) - 姓名、化学分数、数学分数和物理分数。在主课中,我与几个学生创建了一个 Array
我有一个 Java 类 class Student { String name; int age; } 此外,我还有 Student 类 student1 和 student2 的两个
我正在探索 Java 8 功能以从 say Student 对象列表中删除空对象,我有以下代码 import java.util.ArrayList; import java.util.Arrays;
我正在学习 C++,我需要在 C++ 中创建结构“Student”并使用它(我使用 Microsoft Visual C++ 2010 Express) 我创建了Student.cpp文件 #incl
我是一名优秀的程序员,十分优秀!