javascript - Angular 5 TypeError:无法读取未定义的属性
问题描述
我的 utils 服务使用 express 框架从 mysql 数据库返回数据
import { Injectable } from '@angular/core';
import { Http, HttpModule, Headers, RequestOptions } from '@angular/http';
import { Component, OnInit } from '@angular/core';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/map';
@Injectable()
export class UtilsService implements OnInit{
public authData : any[];
constructor(private http : Http) {
}
ngOnInit() { }
getUserData() {
const reqData = JSON.parse(localStorage.getItem('AuthUser'));
return this.http.post('/get/logindata',reqData)
.map(result => result.json().data);
}
}
我的组件部分
import { Component, OnInit } from '@angular/core';
import { UtilsService } from 'app/appservices/utils.service';
// Subscribers and mapping to get resutl
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/map';
@Component({
selector: 'app-navbar',
templateUrl: './navbar.component.html',
styleUrls: ['./navbar.component.scss']
})
export class NavbarComponent implements OnInit{
result : any;
constructor(private utils : UtilsService) {
this.getLogData();
}
ngOnInit() {}
getLogData() {
this.utils.getUserData().subscribe(res=> this.result = res);
}
}
HTML 视图
<div class="row">
<span>{{ result.DTP_User_Admin }}</span>
</div>
当我尝试在 html 中绑定数据时,它会给出
ERROR TypeError: Cannot read property 'DTP_User_Admin' of undefined.
但是当我使用 console.log(this.result); 时,订阅会返回一个具有值的对象;我正在使用 Angular 5.2.9
解决方案
服务异步返回数据。模板在数据可用之前显示,并且在尝试访问时发生错误,result.DTP_User_Admin
而result
仍然未定义。以下是一些可能的解决方案:
方法 1 - 声明时分配默认值result
:
result = {};
方法 2 - 使用安全导航运算符:
{{ result?.DTP_User_Admin }}
方法 3 -仅在定义*ngIf
时用于显示元素:result
<span *ngIf="result">{{ result.DTP_User_Admin }}</span>
推荐阅读
- swift - Swift 中奇怪的 UI 错误
- hive - 错误:org.apache.thrift.transport.TTransportException java.net.SocketException: Broken pipe (Write failed) (State=08S01,code=0)
- vue.js - 页面加载后创建 VUE 组件
- javascript - 如何样式化谷歌地图信息窗口
- spring-boot - 如何在 JPA 中调整日期时间长度?
- javascript - 如果 api 响应 Angular 中没有数据,则显示 div
- c++ - 具有奇怪行为的 C++ std::vector push_back
- google-chrome - 如何选择内存缓存和磁盘缓存
- javascript - Javascript 等于“0”返回真
- docker - Kubernetes中的Redis哨兵集群,哨兵无法到达redis master