ОШИБКА TypeError: невозможно прочитать свойство «длина» неопределенного

В этой части моего кода есть ошибка

<img src="../../../assets/gms-logo.png" alt="logo" routerLink="/overview" alt="website icon">

Но когда я проверил папку с ресурсами, gms-logo.png все еще там, а в angular-cli.json тоже есть активы. Путь тоже правильный.

Однако недавно я работал над функцией поиска. Итак, моя гипотеза такова.

Начала ли программа поиск, даже если пользователь все еще не сфокусирован на типе ввода? Как это исправить?

Ниже мой html для поиска и показ его сегмента предложения

<input type="text" placeholder="Search" (keyup)="onSearch($event.target.value)">        
<div class="suggestion"  *ngIf="results.length > 0">
     <div *ngFor="let result of results ">
          <a href="" target="_blank">
                {{ result.name }}
          </a>
     </div>
</div>

Ниже мой компонент

results: Object;



 onSearch(name) {
            this.search
            .searchEmployee(name)
            .subscribe(
                name => this.results = name,//alert(searchName),this.route.navigate(['/information/employees/']),
                error => alert(error),
                );
}

comment
вы можете получить доступ к своему img, например, assets/gms-logo.png   -  person CharanRoot    schedule 22.06.2017


Ответы (6)


Вам нужно инициализировать переменную results как массив.

В вашем компоненте добавьте:

results = [];

Другой вариант - изменить оператор *ngIf вашего предложения div, чтобы проверить, определен ли results:

<div class="suggestion"  *ngIf="results">
   <div *ngFor="let result of results ">
          <a href="" target="_blank">
                {{ result.name }}
       </a>
   </div>
</div>
person Levi Fuller    schedule 22.06.2017
comment
Спасибо. Я установил результат в объект. Вот почему. Спасибо - person Char; 22.06.2017
comment
Нет проблем - дерзайте! - person Levi Fuller; 22.06.2017
comment
Другой вариант: results?.length > 0. - person developer033; 22.06.2017
comment
@ developer033 Везде искал исправление, так как другие решения не работали для массива объектов Observable. Но ?. моментально исправил! Благодаря тонну! - person Sukanya Pai; 18.08.2019
comment
Я добавил приватный список пользователей: User[]=[]; а потом работает. Спасибо - person Rejwanul Reja; 28.08.2020

Оператор безопасной навигации ( ? . ) и пустые пути свойств

Оператор безопасной навигации Angular (?.) — это быстрый и удобный способ защиты от нулевых и неопределенных значений в путях свойств. Вот он, защита от сбоя рендеринга представления, если currentHero имеет значение null.

Таким образом, в вашем примере вы также можете использовать оператор безопасной навигации ( ?. ):

<div class="suggestion"  *ngIf="results?.length > 0">
    <div *ngFor="let result of results ">
        <a href="" target="_blank">
            {{ result.name }}
        </a>
    </div>
</div>
person Šime Tokić    schedule 20.01.2019

Инициализация переменной для очистки решила мою проблему.

 DoctorList: any[] = [];
person Arun Prasad E S    schedule 14.06.2019

Я застрял в похожей ситуации, когда даже после назначения results в качестве массива (как показано ниже) ошибка сохранялась.

results: Array<any>;

С использованием '?' ( Safe Navigation Operator ) хорошо сработал для меня.

*ngIf="results?.length"

Оператор безопасной навигации (?) можно использовать, чтобы Angular не выдавал ошибки при попытке доступа к свойствам несуществующего объекта.

В этом примере length оценивается только в том случае, если значение results не равно Null или Undefined.

person Dikshit Sharma    schedule 19.03.2020

вы можете просто инициализировать свой массив в объявлении:

    result: Array<any>;

если стиль проблемы сохраняется, вы должны проверить нуль в своем методе, например:

onSearch(name) {
        this.search
        .searchEmployee(name)
        .subscribe(
            name =>
if(name!=null){
this.results = 
name,//alert(searchName),this.route.navigate(['/information/employees/']),
}

            error => alert(error),
            );
}
person Othmane Daanouni    schedule 17.03.2019

У меня такая же проблема. Я нашел 2 способа исправить это

  1. Назначить результат как массив

    результат = []

в HTML

*ngIf="results.length"
  1. Использовать ?

    *ngIf="результаты?.длина"

person DINESH Adhikari    schedule 18.03.2020