问题标签 [angular-component-life-cycle]

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 投票
1 回答
1527 浏览

angular - Angular 7从Kendo UI日期选择器获取选定日期的值

我的 App Component.html 有一个基本的导航和一个日期选择器,就像这样......

component.ts 的设置方式如下:

我有一些页面有一个调用服务的网格控件,但是日期当前是硬编码的,这一切都很好。我希望能够根据从上述日期选择器中选择的日期刷新网格数据,本质上,我将单击数据选择器,发出的值将通过网格控制器传递给组件中的方法。

带网格的控制器:

0 投票
3 回答
3934 浏览

angular - 为什么变更检测被调用两次?

我有一个没有逻辑的简单测试组件。我渲染这个组件。为什么 DoCheck 钩子被调用了两次?

到目前为止,我了解,每次更改检测都会调用 DoCheck。但是没有变化。我只是渲染组件并且 DoCheck 已经被调用了两次。还有 ngAfterContentChecked 和 ngAfterViewChecked。

在此处输入图像描述

0 投票
0 回答
211 浏览

angular - ng-content 里面的组件被实例化了两次

我正在使用 Angular 4,并且我有一个组件“X”,它基本上是一个折叠扩展组件。它包装了提供给它的所有内容,并在单击时折叠和展开它。它看起来类似于下面的一个。

我有另一个组件“Y”,我将它放在“X”组件中,例如:

现在我已经意识到“Y”组件被实例化了两次,即构造函数ngOnInit、ngOnChanges 一切都被调用了两次。

使用会不会有问题<ng-content>(我仍然不完全确定)。如果是,我应该如何处理这个问题,只调用一次我的“Y”组件,因为我只需要将组件“Y”包装在“X”中。

编辑:我错过了在问题的前面添加我正在使用ngxPermissions库有条件地显示“”。所以它更像:

0 投票
1 回答
147 浏览

angular - NgOnInit 调用了两次

我有一个位于警卫后面的页面,在 ngOnInit 上,我通常订阅上下文管理服务器,该服务器首先包含创建订阅的帖子,然后打开与服务器的 websocket 连接。在我的本地副本上,一切似乎都运行良好......但最近我注意到在生产版本中它有时会订阅两次,这让我相信 ngOnInit 被调用了两次。我不确定为什么会这样。

目前我的解决方案是将此订阅代码移动到服务中,并从应用程序组件 ngOnInit 调用一次。

0 投票
1 回答
20 浏览

angular2-routing - 在组件之间切换后进行多次http调用

我有一个查询对我来说有点复杂,但请询问我是否需要更多详细信息...

Angular 版本:8。主题:切换组件时的问题是循环的。

就像来自组件 A. -> B -> A -> B

我的问题的简要细节

从“A”组件中,我选择了几个员工,然后单击应用过滤器按钮,以便我可以切换到 B 组件。

在每个员工复选框上单击使用服务发出事件,以便从“B”组件中我应该能够获取那些选定的员工并执行进一步的逻辑(如 API 调用)

从 A 切换到 B 正在按预期工作,因为根据选定的员工,我正在访问 API 以获取他们的详细信息。

但是要重置选定的员工,我将重定向回 A 组件,以便我可以添加更多或删除员工......

现在我面临的问题是

因为我在组件 B 中有逻辑,所以可以访问 API 并获取员工详细信息。

问题是在每次选择从组件“B”返回一轮后,一次点击进入 API 以获取更新的 emp 详细信息。

我知道它正在发生在 EvenEmitter 的 bcz 中,但是最好的解决方案是什么,这样在每个事件发出时它都不应该从“A”进行 API 调用,直到我不在组件 B 中。

0 投票
0 回答
624 浏览

angular - 在 ngAfterViewInit() 中合并两个 observable

此错误与在 ngOnInit() 中初始化的 this.events$ 有关

这个问题与其他问题非常相似,但在执行时间方面仍然略有不同。

我有简单的 zip 来合并两个可观察的,例如:

问题是我不想在 ngOnInit() 中执行它,它完全可以正常工作。我的意思是在加载数据时在 ngAfterViewInit() 中执行它。应用流程:

  1. 通过 ngOnInit() 加载组件中的数据。

  2. 通过服务从搜索栏中发出值,如下所示: https ://angular.io/guide/component-interaction#parent-and-children-communicate-via-a-service

  3. 从 ngAfterViewInit() 中的服务获取值

请注意,当我简单地对 observable 执行 subscribe() 时,这是可行的:

不幸的是,我需要合并来自搜索输入的 observable 和 observable 的数据源,所以我试图将它们结合起来:

但它仍然没有被解雇。为什么它在 ngOnInit() 中有效,但在 ngAfterViewInit() 中无效,简单的订阅是在 ngAfterViewInit() 中动态发出的?有什么解决办法吗?

编辑:

我注意到的是,在 ngOnInit() 中使用 zip 会获取值,直到第一次删除字符,例如:

  • 插入字符:
  • 输入:'a' -> 发出'a'
  • 输入:'ab' -> 发出'ab'
  • 输入:'abc' -> 发出'avc'
  • 删除 1 个字符:
  • 输入:'ab' -> 没有发射,
  • 重试:
  • 输入:'abc' -> 没有发射,
0 投票
1 回答
186 浏览

angular - 初始化两个相同组件时,服务中的 Angular 行为主题变得混乱

我创建了一个名为侧边栏的组件。该组件有 2 个输入,sideBarMode 和 sideBarSide。在 app.component 我像这样添加这个组件 <sidebar [sideBarMode]="'sliding'" [sideBarSide]="'right'"></sidebar>

当我将上述内容用作一个标签时,它按预期工作。但是,当我做类似的事情时

它们被渲染但具有相同的类,尽管如果我将控制台记录正在传递的 ngOnInit 中的值,它们会正确显示。EG 一个 div 应该显示滑动作为一个类,而另一个显示为停靠。相反,它们都显示为停靠。

这是 HTML 模板。

这就是我检查模式的方式,无论它是否停靠在 TS 文件中,我从 ngOnInit 调用此方法。

如您所见,如果是滑动,我将 observable 设置为 true,然后在 ngOninit 中将该值分配给 barSliding,该值在 HTML 模板中用于确定类名。

停靠的是正确的,但是,滑动的正在获取停靠的属性……为什么?

在此处输入图像描述

0 投票
1 回答
315 浏览

angular - ngDoCheck (Angular9) 的真实用例

我是 Angular 的初学者并自学,我一直坚持使用ngDoCheck 生命周期方法

根据文档:
检测 Angular 无法或不会自行检测到的更改并采取行动。

父组件:

父视图:

子组件

据我所知,使用这种生命周期方法可以获取更深层次的最新变化,而 ngOnChanges 无法检测到更深层次的输入属性变化。

简单来说,ngOnChanges 只会检测到属性的变化,只有属性的引用发生了变化。

在上面的示例中,ngDocheck 生命周期方法没有做任何事情来获取属性的最新更改。但相反,变更检测有助于获得更深层次的最新变更

我想知道使用 ngDoCheck 生命周期方法的确切用例。

0 投票
1 回答
304 浏览

angular - 如果我使用 ngOnInit 方法而不实现 OnInit 接口会发生什么

谁能告诉我如果我不实现onInit接口并且仍然在组件中使用ngOnInit组件生命周期会发生什么?

因为我在没有实现接口的情况下使用了 ngOnInit生命周期钩子,所以它对我来说也是一样的。

所以只是想了解为什么我应该实现一个接口?

0 投票
1 回答
133 浏览

javascript - 在我的新 div 中创建的 angular 指令加载组件而不是在外部

我有各种工具提示,所以我决定使用directive. 它工作正常。但问题是它没有加载到主机内部或附加div。不加载component创建的子 div,我发现没有用。

有人请帮帮我吗?

这是我的指令:

我如何在我创建的孩子中加载组件?提前致谢