«ERROR TypeError: Невозможно прочесть имя свойства undefined» в Angular 6

Это мой employee.component.html

<div class = "row">
  <div class = "input-field col s12">
    <input type = "text" name = "name" #name = "ngModel" [(ngModel)] = "employeeService?.selectedEmployee.name" placeholder = "Enter full name"
      required>
    <label>Name :
      <label class = "red-text">*</label>
    </label>
  </div>
</div>

Ниже один - employee.component.ts.

import { Component, OnInit } from '@angular/core';
import { NgForm } from '@angular/forms';
import { EmployeeService } from '../shared/employee.service';
import { Employee } from '../shared/employee.model';


@Component({
  selector: 'app-employee',
  templateUrl: './employee.component.html',
  styleUrls: ['./employee.component.css'],
  providers: [EmployeeService]
})
export class EmployeeComponent implements OnInit {

  constructor(public employeeService: EmployeeService) { }

  ngOnInit() {
    this.resetForm();
  }

  resetForm(form?: NgForm) {
    if (form) {
      form.reset();
      this.employeeService.selectedEmployee = {
        name: '',
        position: '',
        office: '',
        salary: null
      };
    }
  }

}
    

Chrome выдает ошибку "ERROR TypeError: Невозможно прочитать имя свойства неопределенного" при загрузке моей начальной загрузки angular.

замените if (form) на if (true) и посмотрите, исчезла ли ошибка

Ayoub k 04.09.2018 08:05
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
1
1 263
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Cannot read property 'name' of undefined”

Означает, что некоторая ссылка на имя неверна. В вашем коде только один: employeeService?.selectedEmployee.name, поэтому employeeService?.selectedEmployee - это undefined.

Исправить

Убедитесь, что selectedEmployee не является неопределенным, или используйте безопасную навигацию employeeService?.selectedEmployee?.name

Я пробовал это, но сначала выдает ошибку => Ошибка парсера: знак '?.' оператор не может использоваться в назначении в столбце 40 в [employeeService? .selectedEmployee? ._ id = $ event] в @ 10: 61

Srinath Srs 04.09.2018 08:37

Попробуй это.

<input type = "text" name = "name" #name = "ngModel" [(ngModel)] = "employeeService?.selectedEmployee?.name" placeholder = "Enter full name" required>

Добавьте еще один ? после selectedEmplyee. Это решит проблему.

Причина ошибки при запуске приложения selectedEmplyee в employeeService не определена. Поэтому убедитесь, что переменная не неопределенный.

Я пробовал это, но сначала выдает ошибку => Ошибка парсера: знак '?.' оператор не может использоваться в назначении в столбце 40 в [employeeService? .selectedEmployee? ._ id = $ event] в @ 10: 61

Srinath Srs 04.09.2018 08:31
Ответ принят как подходящий

добавить Safe Navigation Operator ( ?. ) из-за employeeService?.selectedEmployee undefined

Демо Stackblitz

component.html

<input type = "text" name = "name" #name = "ngModel" [(ngModel)] = "employeeService?.selectedEmployee.name" placeholder = "Enter full name" required>

component.ts

import { Component,ViewChild } from '@angular/core';
import { EmployeeService } from './employee.service';
import {NgForm} from '@angular/forms';

@ViewChild('myForm') myForm:any;
  constructor(public employeeService: EmployeeService) { }

  ngOnInit() {
    this.resetForm(this.myForm);
  }

  resetForm(form?: NgForm) {
    if (form) {
      form.reset();
      this.employeeService.selectedEmployee = {
        name: '',
        position: '',
        office: '',
        salary: null
      };
    }
  }

Я пробовал это, но не позволяет и выдает ошибку => Ошибка парсера: знак '?.' оператор не может использоваться в назначении в столбце 40 в [employeeService? .selectedEmployee? ._ id = $ event] в @ 10: 61

Srinath Srs 04.09.2018 08:26

Демо StackBlitz также не работает ... я прикрепил ss ниже здесь, в разделе комментариев.

Srinath Srs 04.09.2018 09:24

вам нужно создать экземпляр объекта employeeService.selectedEmployee, чтобы он не был неопределенным, чтобы создать экземпляр объекта в конструкторе или ngOnInit (), и вы не можете использовать оператор безопасной навигации (?.) в ngModel

например:

 ngOnInit(){
this.employeeService.selectedEmployee=new Employee ();
    }

Другие вопросы по теме