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

angular - 如何初始化@Input?

我试着这样做:

在 ngOnInit 里面我看到undefined

因此,在下面的代码中,当我尝试获取长度时出现错误:return this.data.length;

因为它是未定义的。

为什么初始化默认不起作用?

0 投票
0 回答
129 浏览

angular - 角度指令可以监听主机生命周期钩子吗?

我想创建一个能够在任何主机组件上的角度指令,并在主机的 ngOnChange 触发时使主机组件背景闪烁绿色。

我试图通过 viewContainerRef 访问(在指令中)主机 ngOnChange 方法,但找不到它。

从来没有罚款 ngOnChange 方法,也许我的所有方法都是错误的?我该怎么做

0 投票
1 回答
204 浏览

angular - 在模板中使用函数时如何停止角度函数的多次触发?

我在 HTML 模板中使用函数,我不能直接使用变量,因为条件不太复杂。

我的问题是模板中的函数被多次调用。

例如这个 Stackblitz (最小的,可重现的例子)

加载时记录get Name was called4 次,单击更改版本按钮后再记录 2 次。

我想在加载时调用一次,每次点击只调用一次。为了性能,我怎样才能做到这一点

0 投票
1 回答
1450 浏览

angular - 没有在动态组件上调用 ngOnInit

我在一个项目中使用 Angular 8,但我无法启动动态组件,因为 ngOnInit 没有被调用。我已经构建了一个名为 PlaceholderDirective 的指令,如下所示:

并在 ng-template 上使用了该指令:

包含 ng-template 所在的 HTML 的组件会启动动态组件,如下所示:

实际的动态组件非常简单,注册在 AppModule 的 entryComponents 部分。我已将其缩小到最低限度,以了解问题所在:

最后,动态组件的 HTML:

问题是动态组件中的 ngOnInit 没有被调用,我有其余的数据要在那里初始化,这样我就可以构建模板的其余部分。

真正奇怪的部分是,如果我的控制台没有打开,我打开它,反之亦然,模板就会显示出来。

0 投票
1 回答
307 浏览

angular - Angular 生命周期钩子是否在嵌套组件结构的每个组件上调用?

这只是一个概念问题。我正在尝试更多地了解 Angular 生命周期钩子是如何工作的。

我的问题是,如果我有如下嵌套的组件结构:

例如,如果为一个组件激活了 onChanges 生命周期钩子,是否会为所有子/兄弟组件激活它?

如果答案是否定的,是否有一种非 hacky 的方式来实现某些东西来复制该行为,或者它是否不受支持?

0 投票
2 回答
106 浏览

angular - 如何在使用 observable 更新数组时更新 *ngFor 以及如何在网站加载时初始化 observable?

我有两个组件“购物车”和“家”。这里的“主页”组件显示产品列表,它是网站的第一页。当有人使用“购物车”按钮将产品添加到购物车时,我想更新购物车。为此,我创建了一个使用 observable 将消息从“home”发送到“cart”组件的服务。

我面临的问题: 1. *ngFor 在使用 observable 更新数组时没有更新。2. 当我在 ngOnInit() 上初始化 observable 时,购物车数组仅在我访问购物车组件至少一次时才会更新。

home.component.ts

购物车.service.ts

购物车.component.ts

购物车.component.html

我尝试了“ChangeDetectorRef”、markForCheck() 和 detectChanges(),但这些都不起作用。

0 投票
1 回答
114 浏览

angular - 创建一个指令来监视角度生命周期钩子

是否有一个指令来检测像 ngOnDestroy() 这样的每个生命周期钩子,并在组件被销毁之前实现一些垃圾收集器?

我想这样做是为了避免组件让某些东西运行并导致内存泄漏

0 投票
0 回答
155 浏览

angular - 为什么角度生命周期钩子看起来是同步的

我有一个带有一些生命周期钩子的组件。

同步是指一个接一个地执行钩子。

有两种情况

  1. 它们是同步的 - 然后最后的 setTimeout 调用本身就是合理的。但是有人可以指点我任何 Angular 文档或 Angular 代码来支持它。

  2. 如果没有 - 谁能帮我理解为什么 setTimeout 最后运行。

我知道事件循环是如何工作的,并且生命周期钩子是按顺序运行的,但我的问题是 Angular 是如何实现它的?当我在 chrome 调试模式下查看调用堆栈时,我没有找到任何序列。

是否保证上面示例中的 setTimeout 将在上述所有钩子之后运行?

0 投票
0 回答
60 浏览

angular - Angular 6 app 组件和子组件执行

我正在使用 Angular 6 开发一个应用程序,我正在寻找一些帮助/指导。下面是我的应用程序组件。

app.component.html

--标题--

-- 路由器插座--

--页脚--

我正在调用两个可观察的 http 服务来获取 app.component 的 ngOnInit 中的数据,并将值存储在浏览器的 sesionStorage 中。这两个调用在另一个中发生。我正在尝试读取我的子组件的 ngOnInit 中的 sessionStorage 对象,但调用并没有按我预期的方式发生。

预期的:

-- 应用组件 - ngOnInit -- 服务 1 调用 --

-- 应用组件 - ngOnInit -- 服务 2 调用 --

-- 应用组件 - ngOnInit -- 将结果存储到 sessionStorage --

-- 子组件 - ngOnInit - 从 sessionStorage 中读取对象--

实际的:

-- 应用组件 - ngOnInit -- 服务 1 调用 --

-- 子组件 - ngOnInit - 从 sessionStorage 中读取对象--

-- 应用组件 - ngOnInit -- 服务 2 调用 --

-- 应用组件 - ngOnInit -- 将结果存储到 sessionStorage --

由于子组件无法从 sessionStorage 读取对象,因此失败。我试图了解我在这里缺少什么?

TIA

0 投票
1 回答
2298 浏览

angular - 如何在 Angular 8 中实现 ngInit?

我正在尝试在 Angular 8 代码中实现 [ngInit],如此链接ConvertingAngular1To2ngInit中所述 ,它几乎对我有用,但问题是它执行了不止一次,在某些情况下它进入无限循环或几乎无限,它使我的崩溃整个页面。所以我尝试将函数放在 html as 中{{functionName(5)}},即使我将它放在*ngIf指令中,它也会执行多个。我什至开始了新项目,只是把函数放在 html 中,至少它执行了四次我搜索了很多这个问题,并陷入了角度生命周期钩子,但什么也不懂。