例外:无法绑定到“ ngFor”,因为它不是已知的本机属性


285

我究竟做错了什么?

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">

Answers:


644

我错过lettalk

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

请注意,自beta.17版本起,不赞成使用#...在类似NgFor的结构指令内部声明局部变量。使用let代替。

<div *ngFor="#talk of talks"> 现在变成 <div *ngFor="let talk of talks">

原始答案:

我错过#talk

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

很容易忘记这一点#。我希望Angular异常错误消息改为::
you forgot that # again


“&”号到底是做什么用的?我已经解决了自己的问题,但是我不确定这样做的结果。
datatype_void

4
@datatype_void,使用哈希(#)声明局部模板变量
Mark Rajcok '16

我尝试使用“ let”语法代替#,它产生了“由于它不是已知的本机属性而无法绑定到'ngFor'”。与您在原始问题中看到的行为相同。我将其改回#,它似乎可以正常工作。我正在使用angular2.0.0-rc.1,并且我也遇到了与angular2.0.0-beta.17相同的行为
Chadley08 2016年

1
@ Chadley08,创建一个punker。它应该工作。这是一个rc.1 punkerbeta.17 plunker,两者都可以正常工作。
Mark Rajcok '16

这是一个关于错误消息的误导性的Angular问题:github.com/angular/angular/issues/10644
Alexander Taylor


21

此声明在Angular2 Beta版本中使用.....

此后使用let代替

let关键字用于声明局部变量



10

在angular 7中,通过将以下行添加到.module.ts文件中来解决此问题:

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


2
感到惊讶的是,它没有更多的赞誉。完全忘记了在我的一个模块中导入CommonModule并自己遇到了这个错误。
艾伦·鲁弗洛

8

您应使用let关键字声明局部变量,例如* ngFor =“ let talk of talks”


5

对我而言,总而言之,我无意中将其降级为angular-beta-16。

let ...语法仅在2.0.0-beta.17 +中有效

如果对该版本以下的任何内容尝试使用let语法。您将生成此错误。

升级到angular-beta-17或在items语法中使用#item。



2

我忘了用“ @Input ” 注释组件(Doh!)

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",并得到了ngFor不是一个已知的属性错误。只是用let代替const是可行的。

正如@ alexander-abakumov所说的那样,由of代替in


我的问题不是“ of”,而是“ in”
Ishimwe Aubain Consolateur

0

在我的情况下,使用* ngFor包含组件的模块导致此错误,但未包含在app.module.ts中。将其包含在导入数组中为我解决了这个问题。


0

只是为了掩饰,当我得到同样的错误,究其原因是使用更多的情况,而不是在迭代器

错误的方法 let file in files

正确的方法 let file of files


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.