我做错了什么?

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

当前回答

在我的例子中,包含使用*ngFor导致此错误的组件的模块不包含在app.module.ts中。在imports数组中包含它为我解决了这个问题。

其他回答

另一个导致OP错误的拼写错误可以用在:

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

你应该用of代替:

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

在我的例子中,=和"之间应该没有空格,

错误的:

*ngFor = "let talk of talks"

正确的:

*ngFor="let talk of talks"

我忘记用“@Input”来注释我的组件(哎呀!)

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() {}

}

对我来说,长话短说,我无意中降到了角- β -16。

让…语法只在2.0.0-beta.17+中有效

如果在这个版本以下的任何版本上尝试let语法。您将生成这个错误。

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

在我的例子中,包含使用*ngFor导致此错误的组件的模块不包含在app.module.ts中。在imports数组中包含它为我解决了这个问题。