我做错了什么?

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

@Component({
  selector: 'conf-talks',
  template: `<div *ngFor="let talk in 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 'ngForIn' since it isn't a known native property
("<div [ERROR ->]*ngFor="let talk in talks">

当前回答

我的问题是,Visual Studio在复制粘贴时自动将*ngFor小写为*ngFor。

其他回答

如果你想使用of而不是切换到in,还有另一种选择。您可以使用6.1中介绍的KeyValuePipe。你可以很容易地迭代一个对象:

<div *ngFor="let item of object | keyvalue">
  {{item.key}}:{{item.value}}
</div>

我的解决方案是-只需从表达式^__^中删除'*'字符

<div ngFor="let talk in talks">

我输入了而不是ngFor表达式。

之前2 beta。17、它应该是:

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

从beta开始。17、使用let语法代替#。更多信息请参见下面的UPDATE。


注意ngFor语法“desugars”变成如下:

<template ngFor #talk [ngForOf]="talks">
  <div>...</div>
</template>

如果我们用in代替,它就变成了into

<template ngFor #talk [ngForIn]="talks">
  <div>...</div>
</template>

由于ngForIn不是一个具有同名输入属性的属性指令(不像ngIf), Angular会尝试查看它是否是模板元素的一个(已知的本机)属性,而它不是,因此会出现错误。

更新-从2-beta开始。17、使用let语法代替#。更新内容如下:

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

注意ngFor语法“desugars”变成如下:

<template ngFor let-talk [ngForOf]="talks">
  <div>...</div>
</template>

如果我们用in代替,它就变成了into

<template ngFor let-talk [ngForIn]="talks">
  <div>...</div>
</template>

基本上,如果你用一个新类创建一个弹出窗口,那么在那个时候你必须把那个类添加到

declarations: []

在base。module.ts或app。module.ts中

我的示例代码

########################## 我的组件 ##################################

@Component({
  selector: 'app-modal-content',
  templateUrl: './order-details.html',
  encapsulation: ViewEncapsulation.None,
  styles: []
})

export class NgbdModalContent {
  @Input() orderDetails: any;
  private orderId;
  private customer;
  private orderDate;
  private shipDate;
  private totalAmount;
  private salesTax;
  private shippingCost;
  private transactionStatus;
  private isPaid;
  private isMailSent;
  private paymentDate;

  // private orderDetails;

  constructor(public activeModal: NgbActiveModal) {
  }
}

########################### 基础模块 #################################

@NgModule({
    imports: [
        CommonModule,
        FormsModule
    ],
  declarations: [
    NavbarsComponent,
    NgbdModalContent,
  ]
})
export class BaseModule { }

我的问题是,Visual Studio在复制粘贴时自动将*ngFor小写为*ngFor。