无法绑定到'ngForOf',因为它不是'tr'的已知属性(最终版本)

Mou*_*ssi 98 angular2-template angular

我正在使用Angular2 Final版本(2.1.0).当我想显示公司列表时,我收到了这个错误.

file.component.ts:

public companies: any[] = [
    { "id": 0, "name": "Available" },
    { "id": 1, "name": "Ready" },
    { "id": 2, "name": "Started" }
];
Run Code Online (Sandbox Code Playgroud)

file.component.html:

<tbody>
  <tr *ngFor="let item of companies; let i =index">
     <td>{{i}}</td>
     <td>{{item.name}}</td>
  </tr>
</tbody>
Run Code Online (Sandbox Code Playgroud)

Gün*_*uer 203

加入BrowserModuleimports: []@NgModule(),如果它的根模块(AppModule),否则CommonModule.

// older Angular versions
// import {BrowserModule, CommonModule} from '@angular/common';

import { BrowserModule } from '@angular/platform-browser'
..
..
@NgModule({
  imports: [BrowserModule, /* or CommonModule */],
  ..
})
Run Code Online (Sandbox Code Playgroud)

  • 值得一提的是,CommonModule位于'@ angular/common'中,因此您必须确保从'@ angular/common'添加import {CommonModule} (4认同)
  • 我有类似的问题.我的应用程序有多个模块,导入浏览器模块语句需要添加到应用程序模块和另一个模块中. (3认同)
  • 是的我有多个模块.我忘了这个.它现在有效:)谢谢你 (2认同)
  • 有时它可能是一个简单的错字,在执行“*ngFor=”let乘客或乘客“&lt;---注意:“or”应该是“of”时会发生同样的错误;-) (2认同)
  • 在新版本的 Angular 中,“BrowserModule”是“@angular/platform-b​​rowser”的一部分。因此,您必须导入为:`import { BrowserModule } from '@angular/platform-b​​rowser'` (2认同)
  • 我也遇到了类似的问题,但即使尝试了这个,它仍然无法正常工作!我有多个模块,我忘记将“其他模块”导入到我的“根模块”中,这破坏了我的一些导入,包括“CommonModule”,并且它给了我同样的错误。谢谢你@Günter,这帮助我缩小了范围并找到了我真正的问题。希望这些额外的信息对某人有所帮助,我花了几个小时试图找到问题,dooh。 (2认同)

Mr_*_*een 31

就我而言,问题是我的队友*ngfor在模板中提到而不是*ngFor.奇怪的是没有正确的错误来处理这个问题(在Angular 4中).

  • 好吧,这可能会让我大吃一惊;) (2认同)
  • 类似:我写了“*ngFor=”让图表如果图表“”,注意“if”。“解析错误”消息会更好...... (2认同)

Cod*_*iee 29

您必须在使用这些内置指令(如ngFor,ngIf等)的组件中导入"CommonModule".

import { CommonModule } from "@angular/common";


@NgModule({
  imports: [
    CommonModule
  ]
})

export class ProductModule { }
Run Code Online (Sandbox Code Playgroud)

  • 你说在组件中导入它,然后显示代码将其导入模块 (3认同)
  • 这才是真正的答案 (2认同)

Was*_*siF 22

可能有任何可能的原因:

  1. module没有CommonModuleimports[]
  2. component使用的地方*ngFor不是 any 的一部分module
  3. 您可能在*ngForie**ngFor或其他中输入错误*ngfor
  4. 如果一切正常,则重新启动IDEie VS Code、IntelliJ 等。

  • 高超。忘记在声明数组中添加组件。 (5认同)
  • 这就是答案,涵盖了问题的所有可能原因。对我来说没有。2.谢谢! (3认同)
  • 重新启动 VS code 或停止 npm start 并再次启动它对我有用。 (3认同)

Rub*_*kér 18

对我来说,问题是我没有HouseModule在我的app.module.ts. 我有其他进口。

文件:app.module.ts

import { HouseModule } from './Modules/house/house.module';

@NgModule({
  imports: [
    HouseModule
  ]
})
Run Code Online (Sandbox Code Playgroud)

  • 还可以考虑重新启动“ngserve”,因为有时新添加的代码无法正确拾取。 (2认同)

Max*_*ord 17

如果您没有在功能模块中声明路由组件,也会发生这种情况。例如:

feature.routing.module.ts:

...
    {
        path: '',
        component: ViewComponent,
    }
...
Run Code Online (Sandbox Code Playgroud)

功能模块.ts:

     imports: [ FeatureRoutingModule ],
     declarations: [],
Run Code Online (Sandbox Code Playgroud)

注意 ViewComponent不在声明数组中,而它应该在。


Ben*_*ing 12

未来的读者

检查以下各项:

  1. 该组件在SINGLE angular 模块中声明
  2. 确保你有 import { CommonModule } from '@angular/common';
  3. 重新启动 IDE/编辑器
  4. 重新启动开发服务器 ( ng serve)


Mal*_*ine 9

我收到错误是因为我使用的组件未在模块的声明:[] 部分注册

添加组件后,错误消失了。我希望有一些比这个错误消息更模糊的东西来表明真正的问题。


Rut*_*hah 8

要记住的事情:

使用自定义模块(AppModule以外的模块)时,有必要在其中导入通用模块。

yourmodule.module.ts

import { CommonModule } from '@angular/common';

@NgModule({
  imports: [
    CommonModule
  ],
  exports:[ ],
  declarations: []
})
Run Code Online (Sandbox Code Playgroud)


Aks*_*rma 8

我遇到了同样的错误,您可以通过以下方法之一进行修复:

  1. 如果您没有任何嵌套模块

    一种。在您的App 模块中导入CommonModule

    湾 在App Module中添加*ngFor 的位置导入您的组件,在声明中定义

// file App.modules.ts
@NgModule({
  declarations: [
    LoginComponent // declarations of your component
  ],
  imports: [
    BrowserModule
    DemoMaterialModule,
    FormsModule,
    HttpClientModule,
    ReactiveFormsModule,
    AppRoutingModule,
    BrowserAnimationsModule,
    ServiceWorkerModule.register('ngsw-worker.js', { enabled: environment.production })
  ],
  providers: [
    ApiService, 
    CookieService, 
    {
      provide: HTTP_INTERCEPTORS,
      useClass: ApiInterceptor,
      multi: true
    }
  ],
  bootstrap: [AppComponent]
})

Run Code Online (Sandbox Code Playgroud)

C。如果您使用的是单独的模块文件,然后路由导入CommonModule你的路由模块中的其他导入CommonModule您的应用程序模块

// file app.routing.modules.ts
import { LoginComponent } from './login/login.component';
import { CommonModule } from "@angular/common";

const routes: Routes = [
  { path: '', component: LoginComponent },
  { path: 'login', component: LoginComponent }
];

@NgModule({
  imports: [RouterModule,RouterModule.forRoot(routes), CommonModule],
  exports: [RouterModule]
})
Run Code Online (Sandbox Code Playgroud)
  1. 如果您有嵌套模块,则在该特定模块中执行第一步

就我而言,第二种方法解决了我的问题。
希望能帮到你


小智 5

如果您要创建自己的模块,则在您自己的模块中的导入中添加CommonModule


Ahm*_*lfy 5

以防万一有人在尝试导入后仍然遇到错误CommonModule,请尝试重新启动服务器。它出奇地有效


Lok*_*ndu 5

将组件添加到您的 app.module

import { ModalComponent } from './modal/modal.component';

@NgModule({
  declarations: [ModalComponent],
  entryComponents: [ModalComponent],
  
  }),
  providers: [
  ],
  bootstrap: [AppComponent]
})
Run Code Online (Sandbox Code Playgroud)


ins*_*ing 5

就我而言,该组件未在 app.module.ts 中列出。


kpl*_*lus 5

如果您在 Angular 版本 14+ 中遇到组件可以独立运行的错误,只需将 NgFor 添加到组件的导入中,如下所示:

import { NgFor } from '@angular/common'; 

@Component({
selector     : 'my-component',
templateUrl  : './my-component.component.html',
encapsulation: ViewEncapsulation.None,
standalone   : true,
imports      : [ NgFor],
})

export class MyComponent implements OnInit
{
   ...
}
Run Code Online (Sandbox Code Playgroud)