获取数据后,新组件不会重新渲染,但如果是旧组件,它们会重新渲染

问题描述 投票:0回答:1

我正在开发一个已经启动的项目,当使用

ngFor
指令时,一旦获取数据就不会重新渲染,我测试了在 2 个组件上复制完全相同的代码(如果它是一个旧组件)它可以工作,但在new中不起作用,我已经在不同的新组件中测试了它,但没有一个工作,这是如此奇怪的具体,我不知道我是否可以复制它。

(我尝试过将逻辑添加到

trackBy
块中)
两个组件都是模块的一部分 
async
changeDetection
这是
Observables

Promises

然后 

OnInit
 在我的 
AdmisionesModule

 中被调用
@NgModule({ declarations: [ newComponent, oldComponent, ... ], imports: [ AdmisionesRoutingModule ... ],

AdmisionesRoutingModule

代码非常简单

const routes: Routes = [
  { path: '', component: containBothComponent },
  { path: 'comprobantePago/:referencia', component: containBothComponent },
  { path: 'error/:codigo', component: containBothComponent },
];

@NgModule({
  imports: [RouterModule.forChild(routes)],
  exports: [RouterModule],
})
export class AdmisionesRoutingModule {}

AdmisionesModule

app-routing.module.ts

const routes: Routes = [ { path: '', redirectTo: '/usuario/iniciar-sesion', pathMatch: 'full' }, { path: 'usuario', loadChildren: () => import('@login/login.module').then(mod => mod.LoginModule) }, { path: 'admisiones',canActivate: [SecurityGuard], loadChildren: () => import('@admisiones/admisiones.module').then(mod => mod.AdmisionesModule)}, ];

项目及环境信息:

ngFor

newComponent.ts/newComponent.ts

options: any[];

constructor(public myServices: MyService) {
this.myServices.askService().subscribe({
      next(values: any[]) {
        this.options = values;
      },
      error(err) {
        console.error(err);
      },
    });
}


newComponent.html/newComponent.html



<p *ngFor="let option of options">{{option.economic_sector_desc}}</p>


Angular CLI: 16.1.8


Node: 18.15.0


Package Manager: npm 9.7.2


Angular: 16.2.7


@angular-devkit/architect 0.1602.4


@angular-devkit/build-angular 16.2.4


@angular-devkit/core 16.2.4


@angular-devkit/schematics 16.1.8


@angular/cdk 16.2.6


@angular/cli 16.1.8


如果有什么我遗漏的,请告诉我。
(我尝试过将逻辑添加到
@angular/material 16.2.6
块中)

还在项目附带的原始组件上测试不同组件上的代码可以正常工作,而我添加的组件则无法工作。
如果 ngFor 指令获取一组新数据,我希望组件自行渲染,并且我想知道为什么它不起作用以避免将来出现问题。

您的导入中是否有

CommonModule
- 可能会出现这种情况。
在 [ngFor][1] 文档中查找更多信息
您可以使用 asyncPipe 来实现渲染或数据的最佳实践方法
在你的组件中声明 observable 
@schematics/angular             16.1.8

修改您的模板如下

angular typescript asynchronous lazy-loading rerender
1个回答
0
投票

谢谢! [1]:https://v16.angular.io/api/common/NgFor

© www.soinside.com 2019 - 2024. All rights reserved.