[英]TypeError: Cannot read property '_id' of undefined angular7
我有一個組件員工我正在嘗試創建一個表單,為此我創建了“員工組件”、“員工服務”和“員工模型”
在 employee.component.html 我有以下表格
<form #employeeform="ngForm" (ngSubmit)="onSubmit(employeeform)">
<input type="hidden" name="_id" [(ngModel)]="employeeservice.selectedEmployee._id" #_id="ngModel"/>
</form>
在 employee.component.ts 我有下面的代碼
import { Component, OnInit } from '@angular/core';
import { EmployeeService } from '../shared/employee.service';
@Component({
selector: 'app-employee',
templateUrl: './employee.component.html',
styleUrls: ['./employee.component.css'],
providers : [EmployeeService]
});
export class EmployeeComponent implements OnInit {
constructor(private employeeservice : EmployeeService) { }
ngOnInit() {
}
}
這是我在員工組件中導入的 employee.service.ts 文件
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs';
import { Employee } from './employee.model';
@Injectable({
providedIn: 'root'
})
export class EmployeeService {
selectedEmployee : Employee;
employees: Employee[];
constructor() { }
}
這是我在員工服務中導入的 employee.model.ts
export class Employee {
_id: string;
name: string;
position : string;
office : string;
salary : number;
}
當我運行命令“ng serve”時,我的瀏覽器控制台出現以下錯誤
EmployeeComponent.html:9 ERROR TypeError: Cannot read property '_id' of undefined
at Object.eval [as updateDirectives] (EmployeeComponent.html:9)
at Object.debugUpdateDirectives [as updateDirectives] (core.js:23911)
at checkAndUpdateView (core.js:23307)
at callViewAction (core.js:23548)
at execComponentViewsAction (core.js:23490)
at checkAndUpdateView (core.js:23313)
at callViewAction (core.js:23548)
at execComponentViewsAction (core.js:23490)
at checkAndUpdateView (core.js:23313)
我是否缺少表單需要的任何導入或可能是什么錯誤。 我是初學者,正在嘗試學習角度。 我用谷歌搜索了解決方案,但找不到任何相關的解決方案。 請幫幫我
我建議您在 EmployeeComponent 中創建一個員工實例,並且每次打開該組件時 - 從服務中檢索它並將其定位到 html 代碼。 就像是:
export class EmployeeComponent implements OnInit {
employee: Employee;
constructor(private employeeservice : EmployeeService) {
this.employee = employeeservice.getSelectedEmployee();
}
ngOnInit() {
}
}
然后在 html 中:
<form #employeeform="ngForm" (ngSubmit)="onSubmit(employeeform)">
<input type="hidden" name="_id" [(ngModel)]="employee._id" #_id="ngModel"/>
</form>
或者用 Injection 再傳一遍。 目前,問題是您的 EmployeeComponent 不能像您想要的那樣定位(從 html 傳遞到服務變量),所以您得到 -未定義錯誤。
最初,當加載組件時, employee.service
沒有為selectedEmployee
設置值。 呈現 html 並且[(ngModel)]="employeeservice.selectedEmployee._id"
期望值為employeeservice.selectedEmployee._id
。 但是employeeservice.selectedEmployee
尚未初始化,因此出現錯誤。
如果您沒有設置employeeservice.selectedEmployee._id
,我建議您使用默認的 _id 。
為此使用[(ngModel)]="employeeservice.selectedEmployee? employeeservice.selectedEmployee._id: 0"
正如錯誤所說:您想訪問 _id 但selectedEmployee
從未真正定義過。
您可以僅在 html 元素上使用*ngIf
定義該元素時才顯示該元素,或者為其提供默認值,例如selectedEmployee: Employee = {}
(相應地設置類所需的任何變量)
您的 employee.service.ts 文件應該是這樣的。
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs';
import { Employee } from './employee.model';
@Injectable({
providedIn: 'root'
})
export class EmployeeService {
selectedEmployee: Employee = {
_id: '',
name: '',
position: '',
office: '',
salary: null
};
employees: Employee[];
constructor() { }
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.