Виняток: Неможливо прив’язати до 'ngFor', оскільки це не відома рідна властивість


286

Що я роблю неправильно?

import {bootstrap, Component} from 'angular2/angular2'

@Component({
  selector: 'conf-talks',
  template: `<div *ngFor="talk of talks">
     {{talk.title}} by {{talk.speaker}}
     <p>{{talk.description}}
   </div>`
})
class ConfTalks {
  talks = [ {title: 't1', speaker: 'Brian', description: 'talk 1'},
            {title: 't2', speaker: 'Julie', description: 'talk 2'}];
}
@Component({
  selector: 'my-app',
  directives: [ConfTalks],
  template: '<conf-talks></conf-talks>'
})
class App {}
bootstrap(App, [])

Помилка є

EXCEPTION: Template parse errors:
Can't bind to 'ngFor' since it isn't a known native property
("<div [ERROR ->]*ngFor="talk of talks">

Відповіді:


644

Я пропустив letперед talk:

<div *ngFor="let talk of talks">

Зауважте, що з бета.17 використання #...декларації локальних змінних усередині структурних директив на зразок NgFor застаріле. Використовуйте letзамість цього.

<div *ngFor="#talk of talks"> тепер стає <div *ngFor="let talk of talks">

Оригінальна відповідь:

Я пропустив #перед talk:

<div *ngFor="#talk of talks">

Це так просто забути #. Я бажаю , щоб повідомлення про помилку Кутовий виняток замість цього сказати:
you forgot that # again.


Для чого саме амперсанд? Я вирішив власні проблеми, але не знаю, що це навіть робить.
datatype_void

4
@datatype_void, хеш ( #) використовується для оголошення локальної змінної шаблону
Марк Райкок

Я спробував використати синтаксис "нехай" замість # він створив "Не вдається зв’язати з" ngFor ", оскільки це не відома рідна властивість". Та сама поведінка, яку ви бачили у своєму первинному запитанні. Я змінив його на # і, здавалося, працює без проблем. Я використовую angular2.0.0-rc.1, і у мене також була така ж поведінка з angular2.0.0-beta.17
Chadley08

1
@ Chadley08, створіть планкер. Це має працювати. Ось rc.1 punker і beta.17 plunker, які обидва працюють добре.
Марк Райкок

Ось проблема з питання про помилкове повідомлення про помилку: github.com/angular/angular/isissue/10644
Alexander Taylor

79

Ще однією помилкою, що призводить до помилки ОП, може бути використання in:

<div *ngFor="let talk in talks">

Ви повинні використовувати ofзамість цього:

<div *ngFor="let talk of talks">

21

Ця заява використовується в бета-версії Angular2 .....

Надалі використовуйте нехай замість #

нехай ключове слово використовується для оголошення локальної змінної


13

У моєму випадку це був маленький лист f. Я ділюсь цією відповіддю лише тому, що це перший результат у Google

обов’язково напишіть *ngFor


10

У куті 7 це виправлено додаванням цих рядків у .module.tsфайл:

import { CommonModule } from '@angular/common'; imports: [CommonModule]


2
Здивований, що цього питання більше не має. Повністю забув імпортувати CommonModule в один із моїх модулів і сам наткнувся на цю помилку.
Аллен Руфоло

8

Ви повинні використовувати ключове слово let для декларації локальних змінних, наприклад * ngFor = "хай буде розмова"


5

Для мене, якщо скоротити довгу історію, я ненароком перейшов до кутової бета-16.

Синтаксис нехай ... дійсно ТОЛЬКО дійсний у 2.0.0-beta.17 +

Якщо ви спробуєте синтаксис дозволити на чомусь нижче цієї версії. Ви генеруєте цю помилку.

Або перейдіть на angular-beta-17 або використовуйте #item в синтаксисі елементів.



2

Я забув помітити свій компонент за допомогою " @ Input " (До!)

book-list.component.html (Порушення коду):

<app-book-item
  *ngFor="let book of book$ | async"
  [book]="book">  <-- Can't bind to 'book' since it isn't a known property of 'app-book-item'
</app-book-item>

Виправлена ​​версія book-item.component.ts :

import { Component, OnInit, Input } from '@angular/core';

import { Book } from '../model/book';
import { BookService } from '../services/book.service';

@Component({
  selector: 'app-book-item',
  templateUrl: './book-item.component.html',
  styleUrls: ['./book-item.component.css']
})
export class BookItemComponent implements OnInit {

  @Input()
  public book: Book;

  constructor(private bookService: BookService)  { }

  ngOnInit() {}

}

2

Також не намагайтеся використовувати чистий TypeScript у цьому ... Я хотів більше відповідати forвикористанню та використанню, *ngFor="const filter of filters"і я отримав ngЗа не відомою помилкою властивості. Просто заміна const на let працює.

Як сказав @ alexander-abakumov ofзамінений на in.


моє питання було замість "з" я використовував "в"
Ішимве Обайн Консолятор

0

У моєму випадку модуль, що містить компонент, що використовує * ngFor, що призводить до цієї помилки, не був включений у app.module.ts. Включення його там до масиву імпорту вирішило проблему для мене.


0

Тільки, щоб висвітлити ще один випадок, коли я отримував ту саму помилку, і причину використовував в замість з в ітератора

Неправильний шлях let file in files

Правильний шлях let file of files


0

Використовуй це

<div *ngFor="let talk of talks> 
   {{talk.title}} 
   {{talk.speaker}}
   <p>{{talk.description}} 
</div>

Вам потрібно вказати змінну для ітерації над масивом об'єкта

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.