问题标签 [angular-lifecycle-hooks]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
166 浏览

angular - 在 ng-if 中使用时正确实现 ng-content 存在

当前代码有效,但肯定远非理想(我的意思可能不是 Angular 方式)。

我的组件可能会也可能不会投射外部内容。仅当组件的Input s 之一未未定义时,才会呈现投影内容所在的 div 包装器setTimeout调用发生在前Input的设置器中以推迟一些 DOM 内容检查,告诉是否应该应用特定的类,changeDetectorRef.markForCheck()最终会相应地触发视图更新。

有人可以指导我应该做什么吗?

尽管阅读了几篇使用如下图的文章,但我对 Angular 生命周期解析过程感到困惑。我希望“页脚” ViewChild在执行时被填充和访问,ngAfterViewCheck但似乎不是。玩弄生命周期钩子ngAfterContentCheckngOnChanges也对我没有帮助,ContentChild投影的内容引用装饰器也没有帮助。

Angular 生命周期钩子顺序

0 投票
0 回答
650 浏览

angular - 属性更改时重新呈现视图后的生命周期挂钩

我有一个组件(标注气泡),它需要根据其原生元素大小来计算它的位置。默认情况下它是隐藏的,因此元素没有大小。

当我将隐藏绑定更改为 false 时,我在哪里挂钩事件,我可以在渲染后测量原生元素的大小?

0 投票
1 回答
557 浏览

angular - 在我的函数 ngDoCheck() Angular 中关闭 matDialog 时出现问题

我在关闭函数matDialog中的 Angular Material 时遇到问题。ngDoCheck()

编辑: 这里的 StackBlitz

解释 :

在我的主页上,我有一个按钮,可以打开一个matDialog将数据提取或不提取到Excel文件中的按钮。在我的matDialog中,我有两个按钮。一个关闭matDialog另一个启动功能extractWallet(),恢复数据库中的数据。

在这个函数中,我使用waitExtraction变量禁用我的按钮,并禁用关闭,matDialog直到提取完成。

我的loadInvoiceExtractionXXX()方法允许我恢复我的数据库数据,一旦接收到数据, completedExtraction设置[false, false, false]为设置为true对应于函数的索引(0、1 或 2)。

在我ngOnInit()的数据中,数据是通过 an 接收Observer并保存在局部变量中的。因此在执行loadInvoiceExtractionXXX()in之后接收到新数据extractWallet()

我的问题发生在这里。我有一个ngDoCheck()函数可以检查何时收到所有三个数据this.completedExtraction=[true, true, true]。我的Excel文件创建良好并上传到浏览器。提取现已完成,我现在想matDialogthis.dialogRef.close().

但显示以下错误: 在此处输入图像描述

错误:ExpressionChangedAfterItHasBeenCheckedError:表达式在检查后已更改。

以前的值:'@dialogContainer: enter'。当前值:“@dialogContainer:退出”。

我试图关闭我matDialog的 in ngAfterViewChecked(),但显示相同的错误。如果有人有解决方案让我matDialog在提取后关闭我的,我会感兴趣的。

我把我的代码交给你了:

预先感谢您的帮助。

PS:对不起我的英语(谷歌翻译)。

0 投票
1 回答
98 浏览

angular - 滚动到底部;scrollTop = scrollHeight 运行太早?

实时示例:https ://angular-txvcna.stackblitz.io/ (代码)。

我有一个“聊天”组件,我想让 div 每次添加消息时滚动到底部。

我通过将项目推送到数组 ( this.messages.push(message)) 来添加新消息,然后尝试滚动到右下方。滚动操作似乎this.chatboxBody.nativeElement.scrollTop = this.chatboxBody.nativeElement.scrollHeight;在 angular 的生命周期钩子之前,因为scrollHeight它执行时具有较旧的高度值。

目前我setTimeout用来修复它,但它真的感觉像一个捷径。我该如何解决?(理想情况下 - 以某种方式订阅更新子组件的钩子)

0 投票
1 回答
230 浏览

nativescript - Nativescript Angular Lifecycle 挂钩未将 css 类应用于动态组件

当组件被动态添加到页面时,从类继承的样式信息不会在最终组件中呈现

我们监控到所有生命周期钩子都正确执行,并显示这些类已附加到 Button 的内部表示。

这在 iOS 和 Android 上都是一致的。

https://play.nativescript.org/?template=play-ng&id=qVa8K6&v=28

在上面的操场中,单击任何按钮以添加错误案例。

没有错误消息,除了不正确的渲染之外,没有任何失败的迹象。

0 投票
0 回答
215 浏览

angular - 无法在 ngAfterViewInit 中获得一致的元素高度

我有一个ion-row里面的ion-grid,里面的元素在ion-row某些条件下动态显示。

我的目标是在计算所有条件并呈现最终视图后检索离子行的高度:

记录这段代码,我总是得到值 0 作为 的高度elementContainer,但是如果我将ngAfterViewInit更改为ngDoCheckor ngAfterContentChecked,我会得到元素的正确高度。

Angular Docs中所述,ngDoCheck 在性能方面有成本,我想坚持使用ngAfterViewInit,因为它应该在视图初始化后被调用:

虽然 ngDoCheck() 钩子可以检测英雄的名字何时改变,但它的代价是可怕的。这个钩子的调用频率很高——在每个更改检测周期之后,无论更改发生在哪里。在这个例子中,它在用户可以做任何事情之前被调用了二十多次。

0 投票
1 回答
736 浏览

angular - 是否有一个生命周期钩子在组件初始化后运行一次,但也在加载双向绑定后运行?

初始化组件后,我试图在输入字段中选择一些文本。我知道我可以用 a 来做到这一点setTimeout(),但这感觉有点太老套了。

大多数钩子在输入文本被双向绑定加载之前运行。每次有人选择其他字段时,其他人也会运行。

代码:https ://stackblitz.com/edit/angular-pxrssq

是否有一个生命周期钩子在组件初始化之后运行一次,但在加载双向绑定之后?

0 投票
1 回答
900 浏览

angular - Angular 的 setter 和 getter

在 Angular 中,有一个内置的动作对话框框架,当 showDialog = true 时,我必须使用它来显示动作弹出窗口。

当 showDialog=true 时将显示操作对话框,否则当 showDialog=false 时将隐藏操作对话框

当 showDialog = false 时,必须使用 setter 和 getter 方法来调用 cancel 方法。

但是,在调试代码时,即使我没有触发操作对话框,它也会继续检查 getter 和 setter 方法。

有没有一种方法可以在 Angular 中使用生命周期方法来比较 showDialog 的先前值和当前布尔值。示例:如果 previousValue.showDialog != currentValue.showDialog,则只调用 get showDialog()、set showDialog() 和 cancel()。

我正在考虑在 Angular 中使用一些生命周期方法,例如 ngAfterViewInit()。你知道我如何存储以前的 showDialog 布尔值,以便我可以与 showDialog 的当前值进行比较。

在 React 中,我可以使用具有 prev props 值的 getDerivedStateFromProps,但你知道 Angular 中是否有类似的方法。

一个.html

b.html

a.ts

0 投票
0 回答
127 浏览

angular - Angular 2 - 延迟加载组件的路由器实例

我可以使用以下代码段在根模块组件中获取路由器实例

但是相同的代码在延迟加载的组件中不起作用。这是延迟加载模块的路由

当我调用任何路径时说/registration/startup-registration上面提到的代码不起作用。请提出实现相同的方法。

0 投票
1 回答
541 浏览

javascript - Angular 组件在 NgbModal 中显示并在 html 模板中使用(加载)事件处理程序时不断重新渲染

当引导程序的模态对话框中的组件时,它会每秒重新渲染几次。(我在浏览器开发人员工具中看到它)。

该组件如下所示:

我这样展示它:

当我从模板中删除 (load)="iframe_load($event)" 时,它只按预期呈现一次。

为什么它不断重新渲染 DOM,我如何防止它这样做?

“@angular/core”:“~7.2.0”、“@ng-bootstrap/ng-bootstrap”:“^4.2.1”、“zone.js”:“~0.8.26”