Невозможно связать с 'ngForOf', так как это не известное свойство 'tr' в Angular 9 - PullRequest
1 голос
/ 04 марта 2020

У меня проблема с тем, что ngFor не работает в моем приложении.

Я разделил свое приложение на отдельные модули и включил import { CommonModule } from '@angular/common'; в свой дочерний модуль и import { BrowserModule } from '@angular/platform-browser'; в мой app.modules.ts файл, но я все еще получаю сообщение об ошибке после ошибки.

Can't bind to 'ngForOf' since it isn't a known property of 'tr'.

Я пытался найти другие вопросы, но все те, о которых говорилось, включают в себя CommonModule, которым я являюсь.

Это мои файлы:

crud-list.component. html

<table class="table table-bordered table-striped">
  <thead>
    <tr>
      <th>Id</th>
    </tr>
  </thead>
  <tbody>
    <tr *ngFor='let item of cruds'>
      <td>{{item.OrderNumber}}</td>
    </tr>
  </tbody>
</table>

crud-list.component.ts

import { Component, OnInit } from '@angular/core';
import { CrudRequestService } from '@modules/crud/crud-services/crud-request.service';

@Component({
  selector: 'app-crud-list',
  templateUrl: './crud-list.component.html',
  styleUrls: ['./crud-list.component.scss']
})
export class CrudListComponent {
  public cruds: Array<any>;

  constructor(private objService: CrudRequestService) {
    this.objService.get().subscribe(
      (oDataResult: any) => { this.cruds = oDataResult.value; },
      error => console.error(error)
    );
  }
}

crud.module.ts

import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { Routes, RouterModule } from '@angular/router';

import { CrudListComponent } from '@modules/crud/crud-list/crud-list.component';
import { CrudFormComponent } from '@modules/crud/crud-form/crud-form.component';
import { CrudComponent } from '@modules/crud/crud.component';

const routes: Routes = [
  {
    path: '', component: CrudComponent, children: [
      { path: '', component: CrudListComponent },
      { path: 'create', component: CrudFormComponent },
      { path: 'edit/:id', component: CrudFormComponent }
    ]
  },
];

@NgModule({
  imports: [CommonModule, RouterModule.forChild(routes)],
  declarations: [CrudComponent]
})

export class CrudModule { }

app.module.ts

/* all the imports */

@NgModule({
  declarations: [
    AppComponent,
    ForbidenAccessComponent,
    PageNotFoundComponent,
    AppHeaderComponent,
    AppFooterComponent
  ],
  imports: [
    BrowserModule,
    HttpClientModule,
    NgbModule,
    AppRoutingModule,
    CoreModule
  ],
  providers: [
    {
      provide: HTTP_INTERCEPTORS,
      useClass: JwtInterceptor,
      multi: true,
    },
    BreadcrumbsService,
    AccordionService,
    ModalService,
    RequestService,
    IdentityProviderService
  ],
  bootstrap: [AppComponent]
})
export class AppModule { }

app-routing.module.ts

/* imports */

const routes: Routes = [
  { path: 'home', canActivate: [AuthGuard], component: HomeComponent },
  { path: 'crud', canActivate: [AuthGuard], loadChildren: () => import('@modules/crud/crud.module').then(m => m.CrudModule)},
  { path: '', redirectTo: '/home', pathMatch: 'full' },
  // The error status pages
  { path: '403', component: ForbidenAccessComponent },
  { path: '404', component: PageNotFoundComponent },
  { path: '**', redirectTo: '/404' }
];

@NgModule({
  imports: [
    CommonModule,
    RouterModule.forRoot(routes)
  ],
  exports: [RouterModule]
})
export class AppRoutingModule { }

Ответы [ 4 ]

1 голос
/ 10 марта 2020

Когда я воссоздаю вашу проблему в стеке, у меня нет проблем.

https://stackblitz.com/edit/angular-60533597

Убедитесь, что вы добавили свои компоненты в модуль declarations, а также Routes.

0 голосов
/ 10 марта 2020

Что такое NgbModule в импортируемом вами app.module? Потому что я знаю @NgModule, но это не обязательно должно быть в импорте: [...], а импортируется только сверху.

И некоторые предложения: В crud-list.component.ts вам нужно отписаться ваша подписка и конструктор используются только для инъекций, используйте ngOnInit;)

export class CrudListComponent implements OnInit, OnDestroy {
 cruds: Array<any>
 dataSubscription: Subscription

 constructor(private objService: CrudRequestService) { }
 ngOnInit() {
  this.dataSubscription = 
  this.objService.get().subscribe(data => {
   this.cruds = data.value
  })
 }
  ngOnDestroy() {
    this.dataSubscription.unsubscribe()
  }
}
0 голосов
/ 10 марта 2020

Нашел проблему. Пока приложение работало без каких-либо других проблем, кроме указанного, когда я пошел, чтобы повторить проблему на StackBlitz, код там дал мне ошибку, сообщая, что мне нужно добавить CrudListComponent в моем объявлении @NgModule, поэтому все, что мне нужно было сделать, это добавить туда компонент, пересобрать приложение, и оно заработало.

crud.module.ts

import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { Routes, RouterModule } from '@angular/router';

import { CrudListComponent } from '@modules/crud/crud-list/crud-list.component';
import { CrudFormComponent } from '@modules/crud/crud-form/crud-form.component';
import { CrudComponent } from '@modules/crud/crud.component';

const routes: Routes = [
  {
    path: '', component: CrudComponent, children: [
      { path: '', component: CrudListComponent },
      { path: 'create', component: CrudFormComponent },
      { path: 'edit/:id', component: CrudFormComponent }
    ]
  },
];

@NgModule({
  declarations: [CrudComponent, CrudListComponent, CrudFormComponent],
  imports: [CommonModule, RouterModule.forChild(routes)]
})

export class CrudModule { }
0 голосов
/ 04 марта 2020

crud.module.ts

//crud module should export crud component
@NgModule({
  imports: [CommonModule, RouterModule.forChild(routes)],
  declarations: [CrudComponent],
  exports: [CrudComponent]
})

export class CrudModule { }

вы также можете пропустить добавление CommonModule в ваш AppModule imports массив.

надеюсь, это решит вашу проблему !

...