【问题标题】:Can't bind to 'ngForOf' since it isn't a known property of 'div'无法绑定到“ngForOf”,因为它不是“div”的已知属性
【发布时间】:2020-04-09 04:01:31
【问题描述】:

将 ngFor 添加到 div 时,我收到以下警告,它似乎正在阻止我的 HTML 呈现。

我的应用程序中只有一个模块,并且 BrowserModule 被导入到导入中,这似乎解决了大多数人的问题,但它对我不起作用。

HTML:

<div *ngFor="let animal of animals" class="animal-row">
    <img />
    <div class="animal-info">
        <p class="animal-name"><i class="fad fa-monkey"></i> Alfie (Alifie-Moon)</p>
        <div class="row">
            <div id="species" class="col">
                <p id="species-text"><i class="fad fa-paw-claws"></i> <span>Skunk</span></p>
            </div>
            <div class="col">
                <p><i class="fad fa-paw"></i> <span>American</span></p>
            </div>
            <div class="col">
                <p><i class="fad fa-home-heart"></i> <span>01.01.01</span></p>
            </div>
            <div class="col">
                <p><i class="fad fa-watch-fitness"></i> <span>3 Years</span></p>
            </div>
            <div class="col">
                <p><i class="fad fa-hotel"></i> <span>1-A</span></p>
            </div>
            <div class="col">
                <p><i class="fad fa-smile"></i> <span>Good</span></p>
            </div>
        </div>
    </div>
</div>

app.module.ts:

// Angular & 3rd Part Imports
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { HttpClientModule } from '@angular/common/http';
import { FormsModule } from '@angular/forms';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { ToastNotificationsModule } from 'ngx-toast-notifications';
import { RouterModule } from '@angular/router';
import { JwtModule } from '@auth0/angular-jwt';
// Providers
import { ErrorInterceptorProvider } from './_services/error.interceptor';
// Services
import { AuthService } from './_services/auth.service';
import { ModuleService } from './_services/module.service';
// Components
import { appRoutes } from './routes';
import { AppComponent } from './app.component';
import { NavComponent } from './nav/nav.component';
import { LoginComponent } from './login/login.component';
import { DashboardComponent } from './dashboard/dashboard.component';
import { SubnavComponent } from './subnav/subnav.component';
import { CommonModule } from '@angular/common';

export function tokenGetter() {
   return localStorage.getItem('token');
}


@NgModule({
   declarations: [
      AppComponent,
      NavComponent,
      LoginComponent,
      DashboardComponent,
      SubnavComponent
   ],
   imports: [
      BrowserModule,
      CommonModule
      BrowserAnimationsModule,
      HttpClientModule,
      FormsModule,
      ToastNotificationsModule,
      RouterModule.forRoot(appRoutes),
      JwtModule.forRoot({
         config: {
            // tslint:disable-next-line: object-literal-shorthand
            tokenGetter: tokenGetter,
            whitelistedDomains: ['localhost:5000'],
            blacklistedRoutes: ['localhost:5000/api/auth']
         }
      })
   ],
   providers: [
      AuthService,
      ErrorInterceptorProvider,
      ModuleService
   ],
   bootstrap: [
      AppComponent
   ]
})
export class AppModule { }

我不知道这是否相关,但我确实有一个名为 module.ts 的文件(这是一个接口),我将其重命名为 navLinks,以防它产生冲突 - Angular 是否可能认为这是另一个模块?

【问题讨论】:

  • 相信你需要CommonModule
  • @Phix - 尝试过,但仍然得到同样的错误
  • 您在CommonModule 之后缺少, 是代码中的错字还是这个问题?

标签: angular typescript


【解决方案1】:

可能有以下任何一种原因:

  1. 您的moduleimports[] 中没有CommonModule
  2. 您的component(您使用*ngFor 的位置)不是任何module 的一部分,即appModule 导入的CommonModule,因为*ngFor*ngIf 等已在CommonModule 中初始化。
  3. *ngFor 中可能存在语法错误,即**ngFor*ngfor 等错字。
  4. 如果一切正常,请重新启动您的 IDE,即 VS Code、IntelliJ 等。

【讨论】:

  • 我想分享第二点的例子。我的主要组件会在遇到错误时动态生成 AlertComponent,并且 AlertComponet 正在使用 ngFor 指令。但我没有在声明中声明 AlertComponent。
  • 哇哦! #1。你让我很开心! :)
【解决方案2】:

原来的问题是我没有在 app.module.ts 中声明我正在处理的组件 - 一旦声明这解决了问题

【讨论】:

  • 我在代码的声明部分看到了`AppComponent`
  • 非常感谢..你节省了我的时间..
【解决方案3】:

@NgModule 中添加BrowserModuleCommonModule

@NgModule({
   import: [BrowserModule,CommonModule]
})

看看this link

【讨论】:

  • 添加了 CommonModule,但同样的问题
  • @WebDevelopWolf 您确定要添加正确的module.ts 吗?请您仔细检查并确认
  • 我将编辑我上面的帖子以显示我添加 CommonModule 的位置
  • 我不知道这是否相关,但我确实有一个名为 module.ts 的文件(那是一个接口),我将其重命名为 navLinks,以防它产生冲突 - 是否可能是 Angular认为这是另一个模块?
  • @WebDevelopWolf:不。不应该产生冲突。您需要添加 NgModule 让 Angular 知道它是一个模块
【解决方案4】:

每当我们打破我们的应用程序以具有模块的多级父子结构时,我们可能会遇到这个问题。在我的应用程序中,有一个名为 app.module.ts 的主应用程序模块以及我们无法全局访问此指令的其他子模块。

要解决这个问题,我们需要在应用程序的主模块(即 app.module.ts 文件)中导入 BrowserModule,并在子模块中导入 CommonModule

import { CommonModule } from "@angular/common";
@NgModule({  imports: [ CommonModule]})

【讨论】:

  • 我只有一个 app.module.ts 文件——据我所知,我没有添加任何其他模块
  • 我不知道这是否相关,但我确实有一个名为 module.ts 的文件(那是一个接口),我将其重命名为 navLinks,以防它产生冲突 - 是否可能是 Angular以为那是另一个模块?
  • 你可以为此创建 stackblitz 吗?
猜你喜欢
  • 2020-10-25
  • 2021-03-20
  • 2021-01-06
  • 2021-10-24
  • 2019-10-09
  • 2020-06-17
  • 2016-06-02
  • 1970-01-01
  • 2021-04-02
相关资源
最近更新 更多