Неможливо прив’язати до 'ngForOf', оскільки це не відома властивість 'tr' (остаточний реліз)


129

Я використовую Angular2 Final release (2.1.0). Коли я хочу відобразити список компаній, я отримав цю помилку.

в file.component.ts:

public companies: any[] = [
    { "id": 0, "name": "Available" },
    { "id": 1, "name": "Ready" },
    { "id": 2, "name": "Started" }
];

в file.component.html:

<tbody>
  <tr *ngFor="let item of companies; let i =index">
     <td>{{i}}</td>
     <td>{{item.name}}</td>
  </tr>
</tbody>

9
переконайтеся, що ви також не зробили помилку помилки, ngforі помилка, яку ви згадали. Має бутиngFor
Пьотр Кула

кутовий також чутливий до регістру.
Іфтіхар Алі Ансарі

Відповіді:


239

Додати BrowserModuleдо imports: []в , @NgModule()якщо це модуль кореня ( AppModule), в іншому випадку CommonModule.

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

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

2
так, у мене є кілька модулів. Я забув це. Працює зараз :) дякую u
Mourad Idrissi

4
Можливо, варто згадати, що CommonModule розташований у "@ angular / common", тому ви повинні переконатися, що ви додали імпорт {CommonModule} з "@
angular

4
У мене було подібне питання. у моєму додатку є кілька модулів, оператор модуля браузера імпорту потрібно додати в додаток та в інший модуль.
ssmsnet

1
У мене було кілька модулів. Це врятувало мені день. Дякую!
fabricioflores

1
іноді це може бути проста помилка друку, така ж помилка трапляється, коли ви робите "* ngFor =" нехай пасажир чи пасажири "<--- повідомлення:" або "має бути" ";-)
michabbb

44

У моєму випадку проблема полягала в тому, що мій товариш по команді *ngforзамість цього згадав у шаблонах *ngFor. Дивно, що для вирішення цієї проблеми немає правильної помилки (у кутовій 4).


добре, що міг би мене кинути за петлю;)
tony09uk

1
Аналогічно: я писав *ngFor="let diagram if diagrams", помічаю if. Повідомлення "помилки розбору" було б краще ...
klenium

@klenium, ти врятував мені день! Я отримав цю помилку під час використання *ngFor="lang in languages"там, де очікується кутовий 8 *ngFor="let lang of languages". Досить оманливе повідомлення про помилку imo: /
Jona Paulus

36

Вам потрібно імпортувати "CommonModule" в модуль, де ви використовуєте такі вбудовані директиви, як ngFor, ngIf і т.д.

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


@NgModule({
  imports: [
    CommonModule
  ]
})

export class ProductModule { }

3
ви скажете імпортувати його в компонент, а потім показати імпорт коду в модуль
Chris - Haddox Technologies

10

Що потрібно пам’ятати:

Якщо використовуються спеціальні модулі (модулі, відмінні від AppModule), то необхідно імпортувати в нього загальний модуль.

yourmodule.module.ts

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

@NgModule({
  imports: [
    CommonModule
  ],
  exports:[ ],
  declarations: []
})

Чи знаєте ви, чому я отримаю цю помилку / попередження насправді в хромі навіть після того, як у мене є звичайний модуль на моєму дитячому / користувальницькому класі модуля?
Ak777

7

Якщо ви створюєте свій власний модуль, тоді додайте CommonModule до імпорту у свій власний модуль


Додавання CommonModule працювало на мене Будь ласка, поліпшіть свою відповідь. Поділіться кроками також
Ashish Yadav

5

Це також може статися, якщо ви не оголосите компонент маршруту у своєму модулі функцій. Так, наприклад:

feature.routing.module.ts:

...
    {
        path: '',
        component: ViewComponent,
    }
...

feature.module.ts:

     imports: [ FeatureRoutingModule ],
     declarations: [],

Зауважте, ViewComponent не знаходиться в масиві декларацій, тоді як він повинен бути.


Спасибі, це не було моєю проблемою, але це дало мені підказку і лато, моя проблема вирішена !!
Абхінав Саксена

1

Спеціальний модуль потребує загального модуля

імпорт {CommonModule} з "@ angular / common";

@NgModule ({імпорт: [CommonModule]})



1

У мене була така ж помилка, але я імпортував CommonModule. Натомість я залишив кому там, де її не повинно бути через копіювати / вставляти при поділі модуля:

@NgModule({
    declarations: [
        ShopComponent,
        ShoppingEditComponent
    ],
    imports: [
        CommonModule,
        FormsModule,
        RouterModule.forChild([
            { path: 'shop', component: ShopComponent }, <--- offensive comma
        ])
    ]
})

1

app.module.ts виправлено та змінено на: імпортуйте BrowserModule у ваш модуль додатків

import { BrowserModule } from '@angular/platform-browser';

@NgModule({
  declarations: [
    AppComponent    
  ],
  imports: [
    BrowserModule, 
  ],     
  providers: [],
  bootstrap: [AppComponent]
})

1

Я отримував таку ж помилку, яку можна виправити за допомогою одного з цих методів:

  1. Якщо у вас немає вкладеного модуля

    а. Імпортуйте CommonModule у свій модуль додатків

    б. Імпортуйте свій компонент там, де ви додаєте * 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]
})

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]
})
  1. Якщо ви вклали модуль, виконайте перший крок у цьому конкретному модулі

У моєму випадку 2-й метод вирішив мою проблему.
Сподіваюся, що це вам допоможе


1

Для мене проблема полягала в тому, що я не імпортував на замовлення модуль HouseModuleу своємуapp.module.ts . У мене був інший імпорт.

Файл: app.module.ts

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

@NgModule({
  imports: [
    HouseModule
  ]
})

1

Майбутні читачі

Перевірте кожне з наступного:

  • Компонент оголошується в єдиному кутовому модулі
  • Переконайтесь, що у вас є import { CommonModule } from '@angular/common';
  • Перезавантажте IDE / редактор

0

Я розпочав роботу на базі Angular8 в реальному проекті отримав вищевказаний випуск, але при використанні "app-routing.module" ми забуваємо імпортувати "CommonModule". Не забудьте імпортувати!

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

@NgModule({
  imports: [
    CommonModule
]})

Це вирішить вашу помилку.


0

Ця проблема з’являється під час використання маршрутів, ми можемо відображати статичний вміст будь-якого модуля, але при спробі використання ані функціональності, наприклад * ngIg не працює, для роботи потрібно сказати @Ruben Szeker, потрібно буде додати компонент до app.module.ts при імпорті [], для завершення закриття або вбивства виконання фактичності сервера і повторного запуску ng serve буде вирішено проблему. якщо це не допоможе тобі, спробуй іншим способом.

Мені шкода за мою погану англійську мову.


0

У мене виникла проблема через ** замість *

*ngFor="let ingredient of ingredients"

**ngFor="let ingredient of ingredients"

Так, VS Code, схоже, автоматично ставить дві зірки замість однієї.
Олексій

0

Я зіткнувся з подібною помилкою (*ngIf ), навіть якщо весь імпорт був у порядку, а компонент був наданий без будь-якої іншої помилки + маршрутизація була в порядку.

У моєму випадку AppModuleне був включений конкретний модуль. Дивна річ у тому, що він не скаржився на це, але це може бути пов’язано з тим, як працює Ivy ng serve(вид модулів навантаження відповідно до маршрутизації, але його залежності не враховуються).


0

Щойно втратили ~ 1 год на цій помилці лише на одній конкретній сторінці. Тут спробували всі відповіді, але нарешті рішенням було відновити всю справу за допомогою ng, проблема просто зникла ...


0

Тому будь ласка, переконайтесь

  1. Немає синтаксичної помилки в директивах

  2. Веб-переглядач (у модулі додатків) та звичайний (у інших / дочірніх) модулях імпортується (те саме, що згадував Гюнтер Зехбауер вище)

  3. Якщо у програмі є маршрути, модуль маршруту слід імпортувати в модуль додатка

  4. Усі модулі маршрутизованого компонента також імпортуються в модуль додатків, наприклад: app-routing.module.ts є таким:

    const маршрути: маршрути = [

    {path: '', компонент: CustomerComponent},

    {path: 'admin', компонент: AdminComponent}

    ];

Потім модуль програми повинен імпортувати модулі CustomerComponent та AdminComponent в @NgModule ().


-1

Навіть я зіткнувся з тією ж проблемою, я спробував усі відповіді тут, але проста зміна допомогла мені вирішити цю проблему, замість того, щоб включати * ngFor у trтег, я включив її в tbodyтег. Сподіваюся, це комусь допоможе.

<tbody *ngFor="let product of products; let i=index">
        <tr >
            <td>{{product.id}}</td>
            <td>{{product.name}}</td>
            <td>{{product.description}}</td>
            <td>{{product.quantity}}</td>
            <td>
                <button type="button" >Update</button>
                <button type="button" (click)="crudService.delete(product.id)">Remove</button>
            </td>
        </tr>
    </tbody>

-2

імпортувати CommonModule як у дочірньому модулі, так і в компоненті

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.