问题标签 [ngonchanges]

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 回答
595 浏览

angular - Angular - 如何使用 ngOnChanges 加载数据

我在这里有一个演示

这是一个角度应用程序,我正在尝试创建 D3 图表。

使用 createDate 函数创建图表数据,创建随机数据和日期。

我希望图表使用更新按钮进行更新,因此我使用 ngOnChanges 但这不会在页面加载时创建图表。

被注释掉的 ngOnInit 在页面加载时加载图表。

0 投票
3 回答
484 浏览

angular - 检查是否在 ngOnChanges lifeCycle 挂钩中按下了 Enter 键?

我正在运行 Angular 7.x - 我有以下 ngOnChanges lifeCycle 挂钩,我需要确定用户是否按下了 [ENTER] 键,如果是,则将此布尔值作为布尔值传递给下面的 processLinks() - 什么是最好的方法是这样做,因为我不确定这是如何完成的?

0 投票
2 回答
1267 浏览

angular - 尽管我们在父组件中更改了两次属性的值,但 ngOnChanges 没有被调用两次

有两个组件,即 ParentComponent 和 ChildComponent。我们将一个变量从父组件绑定到子组件。根据角度文档,只要父组件中的属性值发生更改,就会调用子组件的“ngOnChanges”。现在在 ParentComponent 中,我们两次更改该变量的值,但在 ChildComponent 中,“ngOnChanges”只被调用一次。

父组件如下:

父组件.html

父组件.ts

子组件如下:

子组件.ts

在 ParentComponent.ts 文件中,每当在 ParentComponent.html 文件中定义的单击按钮上调用“onClicking”方法时,我们都会更改“inputfromparent”的值两次(请参阅第 1 行和第 2 行)。由于我们将此变量与 ChildComponent.ts 文件的变量“temp”绑定,因此 ChildComponent.ts 文件的“ngOnChanges”应该按照角度文档调用两次,如下所示:

但是,只要在 ParentComponent.html 文件中定义的单击按钮上调用“onClicking”时,ChildComponent.ts 文件的“ngOnChanges”只会被调用一次。

我的疑问是,由于我们在 ParentComponent.ts 文件的“onClicking”方法中更改了“inputfromparent”的值两次,所以 ChildComponent.ts 文件的“ngOnChanges”应该被调用两次。但它只被调用一次。

0 投票
1 回答
350 浏览

angular - Angular 使用 - ngDoCheck 监听数字属性(不是 @Input)的值变化?

我有一个 FormGroup 数组,即ratesMainArray@Input父组件到子组件。每次它在父组件中的长度发生变化时,我都会ngOnChanges通过它的special或键值对其进行过滤,并将过滤后的数组的值存储在两个本地属性中,这当然是 type 。我需要听那个长度值的变化,但只对父数组的变化做出反应。我已经开始使用实际检测过滤后的数组值变化的方法,但是当我尝试对过滤后的数组长度做出反应时收到错误消息。normallengthspecialRatesnormalRatesnumberngOnChangesngDoCheckError trying to diff '2'. Only maps and objects are allowed

这是代码的简化版本:

我不一定需要使用ngDoCheck,但由于它正在检测过滤后的数组更改,我认为这是要走的路。只是为了清楚起见,我还尝试在尝试之前使用private cd: ChangeDetectorRef并且this.cd.detectChanges();没有运气ngDoCheck

谢谢你的帮助!!

0 投票
1 回答
591 浏览

angular - 在父级的 ngOnDestroy 之后未调用 Angular ngOnChanges

我有一个接受输入的子组件

在子组件中,我通过执行以下操作检测对 customModel 输入的更改:

在我的父组件中,我想在父组件被销毁时通知子组件

当父组件的 ngOnDestroy 中输入 customModel 发生变化时,子组件的 ngOnChanges 不会被调用。为什么会发生这种情况?

我在孩子中有一个音频元素,即使在父母被破坏后仍然可以听到音频。

ngOnChanges 在我更改输入时在其他情况下被调用,但不是通过 ngOnDestroy

0 投票
0 回答
29 浏览

angular - Angular8:为响应文本中引用的组件运行 oninit 或 onchanges

将文本放入模板时,我已加载并运行 MathJacks。但我正在从服务器检索大量文本。此文本采用 HTML 格式,因为它在服务器上经过大量解析和设置。

(仅供参考,我在返回的内容上使用了消毒剂,bypassSecurityTrustHtml。我尝试过不进行消毒并得到相同的结果。)

使用检查器,我可以确认 DOM 中存在代码: <mathjax [content]="$a = {\frac{v-u}{t}} $" class="box"></mathjax>

我已经通过模板中的变量和静态文本将方程文本作为文本输入,它在初始加载时起作用。

我唯一能想到的是组件没有被解释为它不是模板的原生组件,而是在服务器调用解析后注入的。

注入组件后,如何运行组件的初始化或 onchanged 函数?

谢谢

0 投票
1 回答
215 浏览

angular - ngOnChanges 未被调用,但视图已正确更新

我有一个与以下代码相关的问题:

孩子

子模板

家长

父模板

我知道只有在数组引用发生更改时才会调用 ngOnChanges,如果我将元素推送到数组中,它将不会被调用。以下引起了我的注意。当我按下添加按钮时,一个新元素被添加到数组中并且视图被正确更新。我使用 json 管道和 ngFor 来证明它更新正确。如果我不使用 json 管道,行为是一样的。那么,如果视图更新正确,为什么不调用 ngOnChanges 呢?谁负责检测是否有更改以在视图中显示?

综上所述,疑点如下。为什么当一个元素被添加到数组中时,视图会正确更新,但为什么没有调用 ngOnChanges?

变化检测的方式不同?

0 投票
1 回答
451 浏览

angular - 注意 formControlNames 的更改以及如何知道 formGroup for 循环中的哪一行更改 - 反应式表单

想查看 formGroup for 循环中 formControlNames 的更改,但是我如何知道更改已进行的 for 循环的哪个索引。例如,如果我想查看“ruleType”的 formcontrolname 的更改,valueChanges 不会提供触发更改的特定行的信息。

我尝试订阅 formGroup.value 更改(stackblitz 的 app.component.ts 的第 52-58 行),但它不起作用。我必须评论它并使用(stackblitz 的 app.component.ts 的第 46-49 行)for 循环来循环遍历 formArray,但它似乎也无法检测到 formControlName 的变化。如果您有任何想法,将不胜感激。

想要修改特定行的特定 formgroupname(formArray 的特定索引)。

我的代码库位于: https ://stackblitz.com/edit/angular-eazn5i?file=src%2Fapp%2Fapp.component.html

0 投票
4 回答
386 浏览

angular - 如何访问Angular中ngOnChanges上的@Input参数以外的变量?

我遇到了一个场景,我需要对 ngOnchanges 上的数据进行一些处理(因为数据来自父组件的 @Input 数据绑定属性)。在此转换期间,我需要使用在 ngOnInit 中初始化的属性。我尝试直接使用它,但值未定义。有人可以让我知道我该如何实现这一目标。下面是我的场景的示例代码。

0 投票
1 回答
1198 浏览

angular - 如果通过 | 注入,Angular 9(或 2+)不会检测到变化。异步,在父 HTML [Input()] 上,如果它们太快 - 数百毫秒

我有一个 Observable 给我一些日志更改(有时每毫秒数百)。 我订阅了这个 Observable,并且可以很好地控制所有的变化。
ngOnInit()

当我pipe async将此 Observable 转换为子组件的 HTML时,问题就出现@Input()了 - 如果父组件上的 Observable 看到它的标量值在几毫秒内发生变化……事实上,在子组件上没有发生变化检测.

我的这个 Observable 是一个简单的字符串,时间戳为 1/1000(作为浏览器的 console.log)。因此,我的这种情况与可以相同的 s 或s
无关,实际上可能不会触发任何更改...ArrayObject

有什么建议吗?太感谢了!

顺便说一句,这是一个 Angular 应用程序试图记录在重新渲染和重新安装3D 组件 Scene时发生的所有事情,与库对话ThreeJS
你可以想象速度...

一些编码的代码。

logger.service.ts

parent-component.ts

parent-component.html

child-component.ts

在这里,控制台结果(5 缺失,虽然订阅$$$$$$$$得到它们):

在此处输入图像描述

谢谢!