ไม่สามารถผูกกับ 'ngForOf' เนื่องจากไม่ใช่คุณสมบัติที่รู้จักของ 'tr' (รุ่นสุดท้าย)


130

ฉันใช้ 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
Piotr Kula

เชิงมุมเป็นกรณีที่สำคัญเช่นกัน
Iftikhar Ali Ansari

เพิ่งหายไป ~ 1 ชม. กับข้อผิดพลาดนี้ในหน้าเดียว พยายามหาคำตอบทั้งหมดที่นี่ แต่ในที่สุดวิธีแก้ปัญหาคือการสร้างสิ่งทั้งหมดใหม่ด้วย ng ปัญหาก็หายไป ...
Elektordi

คำตอบ:


246

เพิ่ม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
ใช่ฉันมีหลายโมดูล ฉันลืมสิ่งนี้ไปแล้ว ใช้งานได้แล้ว :) ขอบคุณ
Mourad Idrissi

5
อาจเป็นเรื่องที่ควรค่าแก่การกล่าวถึงว่า CommonModule อยู่ใน "@ angular / common" ดังนั้นคุณต้องแน่ใจว่าได้เพิ่มการนำเข้า {CommonModule} จาก "@ angular / common"
knsheely

4
ฉันมีปัญหาที่คล้ายกัน แอพของฉันมีหลายโมดูลต้องเพิ่มคำสั่งโมดูลนำเข้าเบราว์เซอร์ในโมดูลแอปและในโมดูลอื่น
ssmsnet

1
ฉันมีหลายโมดูล นั่นช่วยวันของฉัน ขอบคุณ!
fabricioflores

1
บางครั้งอาจเป็นการพิมพ์ผิดธรรมดาข้อผิดพลาดเดียวกันนี้จะเกิดขึ้นเมื่อทำการ "* ngFor =" ให้ผู้โดยสารหรือผู้โดยสาร "<--- notice:" หรือ "should be" of ";-)
michabbb

44

ในกรณีของปัญหาคือการที่เพื่อนร่วมทีมของผมกล่าวถึงในแม่แบบแทน*ngfor *ngForแปลกที่ไม่มีข้อผิดพลาดที่ถูกต้องในการจัดการปัญหานี้ (ใน Angular 4)


ดีที่สามารถโยนฉันเป็นห่วง;)
tony09uk

1
คล้ายกัน: ฉันเขียน*ngFor="let diagram if diagrams"สังเกตเห็นไฟล์if. ข้อความ "parse error" จะดีกว่า ...
klenium

@klenium คุณช่วยวันของฉัน! ฉันได้รับข้อผิดพลาดนั้นเมื่อใช้*ngFor="lang in languages"ที่ Angular 8 คาด*ngFor="let lang of languages"ไว้ ข้อความแสดงข้อผิดพลาดที่ทำให้เข้าใจผิด imo: /
Jona Paulus

37

คุณต้องนำเข้า '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: []
})

คุณรู้หรือไม่ว่าเหตุใดฉันจึงได้รับข้อผิดพลาด / คำเตือนนั้นจริงใน chrome แม้ว่าฉันจะมี commonModule ในคลาสลูก / โมดูลที่กำหนดเองแล้วก็ตาม
Ak777

7

หากคุณกำลังสร้างโมดูลของคุณเองให้เพิ่ม CommonModule ในการนำเข้าในโมดูลของคุณเอง


การเพิ่ม CommonModule ได้ผลสำหรับฉันโปรดปรับปรุงคำตอบของคุณ แชร์ขั้นตอนด้วย
Ashish Yadav

5

สิ่งนี้อาจเกิดขึ้นได้หากคุณไม่ได้ประกาศส่วนประกอบเส้นทางในโมดูลคุณลักษณะของคุณ ตัวอย่างเช่น:

feature.routing.module.ts:

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

feature.module.ts:

     imports: [ FeatureRoutingModule ],
     declarations: [],

สังเกตว่า ViewComponent ไม่ได้อยู่ในอาร์เรย์การประกาศในขณะที่ควรจะเป็น


ขอบคุณมากนี่ไม่ใช่ปัญหาของฉัน แต่มันให้คำใบ้และบิงโกปัญหาของฉันได้รับการแก้ไขแล้ว !!
Abhinav Saxena

2

สำหรับฉันปัญหาคือฉันไม่ได้นำเข้าโมดูลที่กำหนดเองHouseModuleในapp.module.tsไฟล์. ฉันมีการนำเข้าอื่น ๆ

ไฟล์: app.module.ts

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

@NgModule({
  imports: [
    HouseModule
  ]
})

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]
})

ค. หากคุณกำลังใช้ไฟล์โมดูลแยกต่างหากสำหรับการกำหนดเส้นทางให้นำเข้า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. หากคุณมีโมดูลที่ซ้อนกันให้ทำขั้นตอนที่ 1 ในโมดูลนั้น

ในกรณีของฉันวิธีที่ 2 แก้ไขปัญหาของฉันได้
หวังว่านี่จะช่วยคุณได้


1

ผู้อ่านในอนาคต

ตรวจสอบแต่ละรายการต่อไปนี้:

  • ส่วนประกอบถูกประกาศในโมดูลเชิงมุมSINGLE
  • ตรวจสอบให้แน่ใจว่าคุณมี import { CommonModule } from '@angular/common';
  • รีสตาร์ท IDE / เอดิเตอร์

0

ฉันเริ่มต้นในโครงการ Angular8 base live มีปัญหาข้างต้น แต่เมื่อใช้ "app-routeing.module" เราลืมนำเข้า "CommonModule" อย่าลืมนำเข้า!

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

@NgModule({
  imports: [
    CommonModule
]})

มันจะแก้ข้อผิดพลาดของคุณ


0

ฉันมีปัญหาเพราะ ** แทน *

*ngFor="let ingredient of ingredients"

**ngFor="let ingredient of ingredients"

ใช่รหัส VS ดูเหมือนจะใส่สองดาวโดยอัตโนมัติแทนที่จะเป็นดาวเดียว
Alexei

0

ฉันพบข้อผิดพลาดที่คล้ายกัน (*ngIf ) แม้ว่าการนำเข้าทั้งหมดของฉันจะใช้ได้และส่วนประกอบถูกแสดงผลโดยไม่มีข้อผิดพลาดอื่น ๆ + การกำหนดเส้นทางก็ใช้ได้

ในกรณีของฉันAppModuleไม่ได้รวมโมดูลเฉพาะนั้น สิ่งที่แปลกคือมันไม่ได้บ่นเกี่ยวกับเรื่องนี้ แต่สิ่งนี้อาจเกี่ยวข้องกับวิธีการทำงานของ Ivy ng serve(ประเภทของโมดูลโหลดตามการกำหนดเส้นทาง แต่จะไม่พิจารณาการอ้างอิง)


0

ดังนั้นโปรดตรวจสอบให้แน่ใจ

  1. ไม่มีข้อผิดพลาดทางไวยากรณ์ในคำสั่ง

  2. เบราว์เซอร์ (ในโมดูลแอป) และโมดูลทั่วไป (ในโมดูลอื่น ๆ / ลูก) ถูกนำเข้า (เช่นเดียวกับที่GünterZöchbauerกล่าวถึงข้างต้น)

  3. หากคุณกำหนดเส้นทางในแอปพลิเคชันแล้วควรนำเข้าโมดูลเส้นทางในโมดูลแอป

  4. โมดูลของส่วนประกอบที่กำหนดเส้นทางทั้งหมดจะถูกนำเข้าใน App Module เช่นกัน: app-Routing.module.ts มีดังนี้:

    เส้นทาง const: เส้นทาง = [

    {path: '', component: CustomerComponent},

    {path: 'admin', component: 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>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.