'Tr'nin bilinen bir özelliği olmadığı için' ngForOf'a bağlanamıyor (son sürüm)


129

Angular2 Final sürümünü (2.1.0) kullanıyorum. Şirketlerin bir listesini görüntülemek istediğimde bu hatayı aldım.

içinde file.component.ts:

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

içinde file.component.html:

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

9
Bir yazım hatası yapmadığınızdan emin olun ngfor, bahsettiğiniz hatayı verir. OlmalıngFor
Piotr Kula

açısal da büyük / küçük harfe duyarlıdır.
Iftikhar Ali Ansari

Yanıtlar:


242

Ekle BrowserModuleiçin imports: []de @NgModule()bu kök modülü (eğer AppModule) aksi CommonModule.

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

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

2
evet birden fazla Modülüm var. Bunu unuttum. Şimdi çalışıyor :) teşekkür ederim
Mourad Idrissi

4
CommonModule'un "@ angular / common" içinde bulunduğundan bahsetmeye değer olabilir, bu nedenle "@ angular / common" dan içe aktarmayı {CommonModule} eklemeniz gerekir
knsheely

4
Benzer bir sorun yaşadım. Uygulamamın birden fazla modülü var, Browser modülünü içe aktar deyiminin uygulama modülüne ve başka bir modüle eklenmesi gerekiyor.
ssmsnet

1
Birden fazla modülüm vardı. Bu benim günümü kurtardı. Teşekkürler!
fabricioflores

1
bazen basit bir yazım hatası olabilir, aynı hata "* ngFor =" yolcu veya yolculara izin ver "<--- not:" veya "olmalıdır" ;-)
yapılırken

44

Benim durumumda sorun, takım arkadaşımın *ngforyerine şablonlarda bahsetmesiydi *ngFor. Bu sorunu ele almak için doğru bir hata olmaması garip (Angular 4'te).


bu beni bir döngü için atabilirdi;)
tony09uk

1
Benzer: Yazdım *ngFor="let diagram if diagrams", dikkat edin if. Bir "ayrıştırma hatası" mesajı daha iyi olur ...
klenium

@klenium, günümü kurtardın! *ngFor="lang in languages"açısal 8'in beklediği yerde kullanırken bu hatayı aldım *ngFor="let lang of languages". Oldukça yanıltıcı hata mesajı imo: /
Jona Paulus

37

NgFor, ngIf vb. Gibi bu yerleşik direktifleri kullandığınız modüle 'CommonModule' aktarmanız gerekir.

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


@NgModule({
  imports: [
    CommonModule
  ]
})

export class ProductModule { }

3
bileşeni içeri aktarın diyorsunuz, ardından onu modüle
aktaran

10

Hatırlanacak şeyler:

Özel modüller kullanıldığında (AppModule dışındaki modüller), o zaman içindeki ortak modülü içe aktarmak gerekir.

yourmodule.module.ts

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

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

Child / custom modül sınıfımda commonModule'a sahip olduğum halde neden bu hatayı / uyarıyı aslında Chrome'da alacağımı biliyor musunuz?
Ak777

7

Kendi modülünüzü yapıyorsanız, kendi modülünüzde içe aktarmalara CommonModule ekleyin


CommonModule eklemek benim için çalıştı Lütfen cevabınızı geliştirin. Adımları da paylaşın
Ashish Yadav

5

Bu, özellik modülünüzde bir yol bileşeni bildirmezseniz de olabilir. Yani mesela:

feature.routing.module.ts:

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

feature.module.ts:

     imports: [ FeatureRoutingModule ],
     declarations: [],

ViewComponent öğesinin bildirimler dizisinde olmadığına dikkat edin , oysa olması gerekir.


Teşekkürler dostum, bu benim sorunum değildi ama bana bir ipucu ve tombala verdi, sorunum çözüldü !!
Abhinav Saxena

1

Özel Modül Ortak modül gerektirir

{CommonModule} öğesini "@ angular / common" içinden içe aktarın;

@NgModule ({içe aktarmalar: [CommonModule]})


1

"App-routeing.module" kullanıldığında "CommonModule" içe aktarmayı unutuyoruz. İçe aktarmayı unutmayın!

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

1

Aynı hatayı aldım ama CommonModule içe aktarıldı. Bunun yerine, bir modülü ayırırken kopyala / yapıştır nedeniyle olmaması gereken yerde bir virgül bıraktım:

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

1

ithalat: sabitlenmiş ve değiştirilemez app.module.ts BrowserModule uygulama modülünde

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

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

1

Aynı hatayı alıyordum, bu yöntemlerden biriyle düzeltebilirsiniz:

  1. Herhangi bir iç içe modülünüz yoksa

    a. İçe CommonModule sizin de App modülü

    b. Eklediğiniz sizin Bileşen içe * ngFor içinde App Modülü , tanımladığınız bildirimleri

// 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. Eğer içe aktar sonra yönlendirme için ayrı modül dosyası kullanıyorsanız CommonModule başka İthalat sizin Yönlendirme modülünde CommonModule sizin de App modülü

// 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. İç içe modülünüz varsa, o modülde 1. adımı gerçekleştirin

Benim durumumda, 2. yöntem sorunumu çözdü.
Umarım bu sana yardımcı olur


1

Benim için sorun, özel yapım modülü HouseModulebenim app.module.ts. Diğer ithalatları da aldım.

Dosya: app.module.ts

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

@NgModule({
  imports: [
    HouseModule
  ]
})

1

Gelecekteki Okuyucular

Aşağıdakilerin her birini kontrol edin:

  • Bileşen TEK bir açısal modülde tanımlanmıştır
  • Sahip olduğundan emin ol import { CommonModule } from '@angular/common';
  • IDE / düzenleyiciyi yeniden başlatın

0

Angular8 temel canlı projeye başladım, yukarıdaki sorunu aldım ancak "app-routeing.module" kullandığınızda "CommonModule" içe aktarmayı unutuyoruz. İçe aktarmayı unutmayın!

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

@NgModule({
  imports: [
    CommonModule
]})

Hatanızı çözecektir.


0

Bu sorun, Routes kullanılırken ortaya çıkar, herhangi bir modülün statik içeriğini görüntüleyebiliriz, ancak * ngIg gibi ani işlevlerini kullanmaya çalışırken çalışmaz, çünkü @Ruben Szeker gibi bir iş gerekir, gerekli Bileşeni app.module.ts'e eklemeniz gerekir. aktarımlarda [], gerçekliği yürütme sunucusunu kapatmak veya sonlandırmak ve hizmet çalıştırmayı yeniden denemek sorunu çözecektir. bu senin için işe yaramazsa, başka bir yol deneyeceğim.

Kötü ingilizcem için özür dilerim.


0

** yerine * yüzünden bir sorun yaşadım

*ngFor="let ingredient of ingredients"

**ngFor="let ingredient of ingredients"

Evet, VS Code, tek bir yıldız yerine otomatik olarak iki yıldız koyuyor gibi görünüyor.
Alexei

0

Benzer bir hatayla karşılaştım (*ngIfTüm içe aktarmalarım iyi olsa ve bileşen başka bir hata olmadan işlenmiş olsa bile ) + yönlendirme tamam.

Benim durumumda AppModulebu belirli modül dahil değildi. Garip olan şey bundan şikayet etmemesidir, ancak bu Ivy'nin nasıl çalıştığı ile ilgili olabilir ng serve(yönlendirmeye göre yük modülleri türü, ancak bağımlılıkları dikkate alınmaz).


0

Sadece belirli bir sayfada, bu hatada ~ 1 saat kaybettim. Buradaki tüm cevapları denedim, ama nihayet çözüm, her şeyi ng ile yeniden inşa etmekti, sorun ortadan kayboldu ...


0

Bu yüzden lütfen emin ol

  1. Yönergelerde sözdizimi hatası yok

  2. Tarayıcı (Uygulama Modülünde) ve Ortak (diğer / çocuk) Modüller içe aktarılır ( Yukarıda belirtilen Günter Zöchbauer ile aynı )

  3. Uygulamada rotalarınız varsa, rota modülü Uygulama Modülüne aktarılmalıdır

  4. Yönlendirilen tüm bileşenin Modülleri de Uygulama Modülüne aktarılır, örneğin: app-routing.module.ts aşağıdaki gibidir:

    const yolları: Rotalar = [

    {yol: '', bileşen: CustomerComponent},

    {yol: 'admin', bileşen: AdminComponent}

    ];

Daha sonra Uygulama modülü CustomerComponent ve AdminComponent modüllerini @NgModule () içinde içe aktarmalıdır.


-1

Aynı sorunla karşılaşsam bile, tüm cevapları burada denedim, ancak basit bir değişiklik, * ngFor'u dahil etmek yerine bu sorunu çözmeme yardımcı oldu tr etiketine dahil etmek etiketetbody . Umarım birine yardımcı olur.

<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'u hem alt modülde hem de bileşende içe aktarın

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.