问题标签 [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 投票
5 回答
22372 浏览

angular - 离子 4:ngOnInit 与 ionViewWillEnter

在使用 Ionic 4 创建混合应用程序时,哪个更好地使用 Angular Lifecycle Hook 或 Ionic Lifecycle Hook 专门用于初始化?

Angular 生命周期钩子 - ngOnInit

离子生命周期挂钩 - ionViewWillEnter

0 投票
0 回答
162 浏览

javascript - ExpressionChangedAfterItHasBeenCheckedError Angular7

我在运行时有这个错误在此处输入图像描述

我尝试了一些东西,但似乎都没有。问题是因为这个

infPopovers 被定义为QueryList<SatPopover>

这就是 getInfectionPopover(index) (也许有必要理解)

实际上一切正常,但我只想摆脱这个错误。

0 投票
0 回答
72 浏览

angular - 如何识别 *ngFor 循环已完成标记更改?

我有一系列公司从服务中获取并在*ngFor指令的帮助下绑定该数组数据。

现在,我想显示一个覆盖“等待......”的整个页面,直到数据绑定到标记为止。

直到那时,我尝试了这个

我知道endWaitingModal()在服务调用完成后立即调用而不是在绑定完成后调用,这是有道理的。之后我发现了这个解决方案角度生命周期钩子,它工作正常。

只要组件标记发生更改,就会触发此挂钩。它对我有帮助,但据我所知,这个解决方案还达不到标准,因为它像父监听器一样工作(连续监听),并且会寻找标记中的任何变化并被触发,这不是正确的方法. 我认为它应该像特定元素一样工作。请指导我。

0 投票
0 回答
1314 浏览

angular - Angular 7 - ngOnInit 没有被调用

我们确实有一个主要的角度应用程序,它引用了代表主应用程序子区域的库。

我们希望能够在我们的库中定义分离的路线。

例如:

  • app 有根路径:/app
  • 库有子路径:/library

在路由 /app/library 之后,它应该重定向到存储在库中的组件。

我们通过使用延迟加载实现了这一点。它仅在您使用主应用程序中 Route 的“loadChildren”属性连接路由时才有效。

我们还被迫应用 Angular 团队建议的解决方法从位于 node_modules 的库包中延迟加载模块无法构建- 这是使用代理/包装器模块来延迟加载角度工作区或节点模块中的库。

不管怎样,我们都搞定了。

现在问题开始了:

Angular 生命周期事件(例如:ngOnInit)在我们库中的组件中不起作用。当我们使用预加载引用库时(同时丢失了我们路由想要的),角度钩子开始工作得很好。这里可能有什么问题?

是 Angular 的问题吗?我们希望我们的应用程序结构良好,这就是我们将一些区域分成独立库的原因。但是,我们即将放弃并将所有代码移动到主应用程序中。

编辑:

app.module 中的路由(forRoot,延迟加载):

路由(LazyWrapperModule,在主应用程序内)(forChild):

库中的路由(forChild):

0 投票
2 回答
1905 浏览

angular - 输入更改时指令不会触发

我正在实现一个指令,它将一种语言(或一组语言)作为输入,并将一个类添加到添加指令的 DOM 元素中。

下面是我使用该指令的地方。"languagesInView" 是一个字符串列表,在使用该指令的组件中使用 @Input() ...

我希望当传递给组件的languagesInView 输入发生变化时,我在模板中传递给[appRtlView] 的值会发生变化。(我可以通过使用插值{{languagesInView }}将值打印到屏幕来看到值实际上发生了变化)

在 RTLView 指令中,如果我使用 ngOnInit,则不会拾取对“inputLanguage”字段的更改。

为了克服这个问题,我在指令中使用了 ngOnChanges(实现 OnChanges 可以满足我的要求):

我无法将 changeDetectionStrategy 添加到指令初始化中,这让我认为指令通常不应该实现 OnChanges。我的在线搜索并没有太大帮助。

在 Angular 指令中运行 ngOnChanges 是错误的吗?

谢谢

0 投票
1 回答
353 浏览

angular - 在 ngFor 中创建组件时,Angular ngOnInit 从未执行

我遇到了一个谜。我在这个例子中的 ngFor 循环中:

仅对于那些 N 个创建的“vi-rule-contract”组件中的一个(一个非常具体的组件),ngOnInit 不会仅被称为具有(描述符、rc、项目)的新值的 ngOnChanges。对于所有其他“vi-rule-contract”,ngOnInit 将被调用,但不会被调用 ngOnChanges。所以这是我的问题:

是否存在组件上的 ngOnInit 永远不会仅被称为 ngOnChanges 的情况?

PS角6.1.10

0 投票
2 回答
60 浏览

angular - 根据 Angular 中的场景执行 Typescript 函数

在我的应用程序中,我在一个组件中有两个组合框。它们的默认值都是null.

在此处输入图像描述

选择时间段或用户时,会将值发送到商店。这允许您在不同的组件中使用期间和选定的用户。

Combobox.component 存储:

店铺:

存储到 Result.component:

要显示第二个组件的列表,我必须选择一个时期和一个用户。在那之前,一切都完美无缺。

但是我想做的是在选择用户和期间时执行一个功能。当更改两个组合框之一的值时,也会执行此函数。

此功能将允许我根据期间和用户从我的数据库中检索钱包列表。

我不知道怎么做。如果你有想法,我很感兴趣。

这是一个小例子:Stackblitz HERE

先感谢您。

0 投票
0 回答
214 浏览

typescript - 如何在 ngAfterViewInit 之前处理 uriParam?

我尝试将信息从一个网站传递到另一个网站。这两个网站不共享相同的 url 或服务器。

我认为最好的方法是使用 URL 参数(http://some.url?param=value)。因此,如果我在 Angular 生命周期中没有记错的话,在 ngAfterViewInit 回调之前。通过这样做,self.route.snapshot.queryParamMap.get('param') 返回 null。

我怎样才能得到这个参数?是否有另一种(更清洁)的方式在 2 个有角度的网站之间传递信息?

最初我的代码在 ngOnInit 方法中。我将此代码移至 ngAfterContentInit 但没有任何更改,路由器仍然为空。

我考虑过解析window.location.href,但对我来说似乎并不干净。

app.module.ts

app.component.ts

app.component.ts

app.component.html

导航组件.ts

为示例简化了以下文件

导航组件.ts

导航组件.html

如上所述,目前我无法从 URL 中获取我的参数。Router 对象为空。

0 投票
0 回答
316 浏览

angular - 尝试设置最后一个活动的 MatTab 时出现 ExpressionChangedAfterItHasBeenCheckedError?

我有一个 Auth 组件。该组件使用mat-tab-group具有两个mat-tab组件的组件,可让您轻松地在登录和注册之间返回和第四个组件。登录位于索引 0(第一个显示的表单)处,注册位于索引 1(第二个显示的表单)。当用户尝试使用已经存在的用户名注册时,后端的验证失败,我想将用户带回“注册”而不是默认的第一个用户名,即“登录”。更改选项卡时,我将上次查看的选项卡存储在 localStorage 中。

我有一个onTabChange事件处理程序

我把这段代码放在哪里并不重要:

我总是收到 ExpressionChangedAfterItHasBeenCheckedError。但这真的让我感到困惑,因为我的代码在构造函数中?

我已经尝试在生命周期钩子中添加ChangeDetectorRef并添加该detectChanges();ngAfterContentInit,但同样的错误不断出现。

0 投票
1 回答
2578 浏览

ionic-framework - 如何使用 tabs.router.module 中的路由在 Ionic 4 中触发 ionViewWillLeave

将所有页面路由放入 TabsPageRoutingModule 时不会触发ionViewWillLeave生命周期挂钩。ionViewDidLeave

我们将路线从 更改app-routing.module.tstabs.router.module.ts以获得 Ionic 4 应用程序中标签栏的完整视图。这些路线完美无缺。
当路由在时app-routing.module.tsionViewWillLeave总是在离开页面(并关闭当前Observables)时触发。现在ionViewWillLeave离开页面时不会触发。

tabs.router.module.ts 中的路由

TS 文件中的 ionViewWillLeave 记录失败

无法弄清楚为什么ionViewWillLeave不再打印。任何帮助表示赞赏。


app-routing.module.ts 中的路由

在 TS 文件中记录 ionViewWillLeave 的成功