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 { }
App.moduleのインポートでNgbModuleは何ですか? @NgModuleをkwowしますが、これはimports:[...]に含める必要はありませんが、上部にのみインポートされます。
そしていくつかの提案: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()
}
}
問題が見つかりました。アプリが上記の問題以外に問題なく実行されている間に、StackBlitzで問題を再現しようとすると、そこのコードでエラーが発生し、@ NgModuleにCrudListComponent
を追加する必要があることがわかりました宣言なので、コンポーネントを追加し、アプリを再構築するだけで機能しました。
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 { }