首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何运行代码后,观察和渲染完成角11?

如何运行代码后,观察和渲染完成角11?
EN

Stack Overflow用户
提问于 2021-06-28 17:25:04
回答 3查看 993关注 0票数 0

在我的角度11项目中,我有一个可以观察到的改变视图的东西,并且在渲染的时候花了一些时间。

就像这样:

代码语言:javascript
复制
export class MyComponent implements OnInit {
  myObservable = of([1, 2, 3]);

  constructor() { }

  ngOnInit(): void {
    this.myObservable.pipe(
      // here is some functions
    ).subscribe();
  }

}

ngOnInit运行了可观察的、仍然在运行和处理数据之后。数据到达后,管道更改模板。但这一变化发生在ngAfterViewInit完成之后。因此,我需要一个灵魂,什么运行后,管道和渲染完成了正在发生的事情,因为管道已经完成。

如何运行代码(工具提示初始化)后,我的观察和造成的渲染完成?

ngAfterViewChecked不是一个好的解决方案,因为它总是在视图更改时运行,而且我的工具提示初始化也会改变视图。因此,我只想运行这个初始化一次。

有什么解决办法吗?

EN

回答 3

Stack Overflow用户

发布于 2021-06-28 20:08:46

您可以使用async管道轻松地处理来自可观察对象的数据,如果需要使用RxJS pipe函数,您可以将可观察到的结果保存到一个新变量中,然后在其上使用async管道。

检查这个stackblitz示例

否则,如果管道中的副作用非常复杂,可以使用ChangeDetectorRef手动触发角度变化检测。查看这里的文档。

票数 0
EN

Stack Overflow用户

发布于 2021-06-28 22:51:32

您可以使用timout函数作为解决方法,页面将在管道之后加载,并在一秒后执行代码,您可以将其缩短到不到1秒,然后通过尝试确定它:

代码语言:javascript
复制
export class MyComponent implements OnInit {
  myObservable = of([1, 2, 3]);
  constructor() { }

  ngOnInit(): void {
    this.myObservable.pipe(
      setTimeout( ()=>{
   // your code here
   }, 1000)
    ).subscribe();
  }

}
票数 0
EN

Stack Overflow用户

发布于 2021-06-29 12:36:46

我找到了一个解决办法:

我把所有的代码放在一个独立的组件中,这个组件连接到工具提示。实际上,它是一个带有信息图标的label。在这个组件中,我将工具提示初始化代码放入ngAfterViewInit函数中:

代码语言:javascript
复制
import { AfterViewInit, Component, Input } from '@angular/core';
import { TooltipService } from 'src/app/services/tooltip/tooltip.service';

@Component({
  selector: 'app-wizzard-label',
  templateUrl: './wizzard-label.component.html',
  styleUrls: ['./wizzard-label.component.scss'],
})
export class WizzardLabelComponent implements AfterViewInit {
  @Input() field: any = {};

  constructor(
    private tooltipService: TooltipService,
  ) { }

  ngAfterViewInit(): void {
    this.tooltipService.init();
  }
}

现在,当可观察的结束,消失我的旋转器,并显示这个组成部分。ngAfterViewInit做自己的工作,一切都很好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68167684

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档