繁体   English   中英

类型错误:无法读取未定义的 angular7 的属性“_id”

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM