问题标签 [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.
angular - 在 ng-if 中使用时正确实现 ng-content 存在
当前代码有效,但肯定远非理想(我的意思可能不是 Angular 方式)。
我的组件可能会也可能不会投射外部内容。仅当组件的Input s 之一未未定义时,才会呈现投影内容所在的 div 包装器。setTimeout调用发生在前Input的设置器中以推迟一些 DOM 内容检查,告诉是否应该应用特定的类,changeDetectorRef.markForCheck()最终会相应地触发视图更新。
有人可以指导我应该做什么吗?
尽管阅读了几篇使用如下图的文章,但我对 Angular 生命周期解析过程感到困惑。我希望“页脚” ViewChild在执行时被填充和访问,ngAfterViewCheck
但似乎不是。玩弄生命周期钩子ngAfterContentCheck和ngOnChanges也对我没有帮助,ContentChild投影的内容引用装饰器也没有帮助。
angular - 属性更改时重新呈现视图后的生命周期挂钩
我有一个组件(标注气泡),它需要根据其原生元素大小来计算它的位置。默认情况下它是隐藏的,因此元素没有大小。
当我将隐藏绑定更改为 false 时,我在哪里挂钩事件,我可以在渲染后测量原生元素的大小?
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文件创建良好并上传到浏览器。提取现已完成,我现在想matDialog
用this.dialogRef.close()
.
错误:ExpressionChangedAfterItHasBeenCheckedError:表达式在检查后已更改。
以前的值:'@dialogContainer: enter'。当前值:“@dialogContainer:退出”。
我试图关闭我matDialog
的 in ngAfterViewChecked()
,但显示相同的错误。如果有人有解决方案让我matDialog
在提取后关闭我的,我会感兴趣的。
我把我的代码交给你了:
预先感谢您的帮助。
PS:对不起我的英语(谷歌翻译)。
angular - 滚动到底部;scrollTop = scrollHeight 运行太早?
实时示例:https ://angular-txvcna.stackblitz.io/ (代码)。
我有一个“聊天”组件,我想让 div 每次添加消息时滚动到底部。
我通过将项目推送到数组 ( this.messages.push(message)
) 来添加新消息,然后尝试滚动到右下方。滚动操作似乎this.chatboxBody.nativeElement.scrollTop = this.chatboxBody.nativeElement.scrollHeight;
在 angular 的生命周期钩子之前,因为scrollHeight
它执行时具有较旧的高度值。
目前我setTimeout
用来修复它,但它真的感觉像一个捷径。我该如何解决?(理想情况下 - 以某种方式订阅更新子组件的钩子)
nativescript - Nativescript Angular Lifecycle 挂钩未将 css 类应用于动态组件
当组件被动态添加到页面时,从类继承的样式信息不会在最终组件中呈现
我们监控到所有生命周期钩子都正确执行,并显示这些类已附加到 Button 的内部表示。
这在 iOS 和 Android 上都是一致的。
https://play.nativescript.org/?template=play-ng&id=qVa8K6&v=28
在上面的操场中,单击任何按钮以添加错误案例。
没有错误消息,除了不正确的渲染之外,没有任何失败的迹象。
angular - 无法在 ngAfterViewInit 中获得一致的元素高度
我有一个ion-row
里面的ion-grid
,里面的元素在ion-row
某些条件下动态显示。
我的目标是在计算所有条件并呈现最终视图后检索离子行的高度:
记录这段代码,我总是得到值 0 作为 的高度elementContainer
,但是如果我将ngAfterViewInit更改为ngDoCheck
or ngAfterContentChecked
,我会得到元素的正确高度。
如Angular Docs中所述,ngDoCheck 在性能方面有成本,我想坚持使用ngAfterViewInit,因为它应该在视图初始化后被调用:
虽然 ngDoCheck() 钩子可以检测英雄的名字何时改变,但它的代价是可怕的。这个钩子的调用频率很高——在每个更改检测周期之后,无论更改发生在哪里。在这个例子中,它在用户可以做任何事情之前被调用了二十多次。
angular - 是否有一个生命周期钩子在组件初始化后运行一次,但也在加载双向绑定后运行?
初始化组件后,我试图在输入字段中选择一些文本。我知道我可以用 a 来做到这一点setTimeout()
,但这感觉有点太老套了。
大多数钩子在输入文本被双向绑定加载之前运行。每次有人选择其他字段时,其他人也会运行。
代码:https ://stackblitz.com/edit/angular-pxrssq
是否有一个生命周期钩子在组件初始化之后运行一次,但在加载双向绑定之后?
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
angular - Angular 2 - 延迟加载组件的路由器实例
我可以使用以下代码段在根模块组件中获取路由器实例
但是相同的代码在延迟加载的组件中不起作用。这是延迟加载模块的路由
当我调用任何路径时说/registration/startup-registration
上面提到的代码不起作用。请提出实现相同的方法。
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”