问题标签 [angular-changedetection]

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

angular - 更改默认更改检测策略

如何将默认更改检测策略设置为OnPush?可以以某种方式全局设置吗?

我想避免必须将此行添加到每个组件

0 投票
1 回答
998 浏览

angular - 以角度 2 更新 ng-charts 条形图数据集

如何从 angular2 更新条形图?我正在尝试在单击[datasets]="barChartData" 模板时添加新条目,图表如下所示:

我尝试了以下推荐的方法:1)直接更改数据集变量 - 克隆数据,更改它然后分配它。这样我可以更改/更新现有数据,但不能向数据集添加新条目。

2)ChangeDetectorRef,我将私有参考:ChangeDetectorRef添加到构造函数并调用ref.detectChanges()更新。但没有运气。我也尝试使用 ApplicationRef。

在这两种情况下,在调试窗口中,我都可以看到 barChartData 使用 ts 文件中的新值进行了更新,但 template(html) 没有更新/刷新。

0 投票
0 回答
28 浏览

angular - 基于对象数组中的属性的角度显示容器

我目前div在我的 Angular 组件模板中有一个,只有在对象数组中的至少一个对象属性设置为 true 时才应该切换它。例如:

我目前正在做这样的事情:

由于 Angular 摘要循环,这被多次触发并且实际上使我的应用程序冻结,因为它每次都检查数组的每个元素。

例如,如果我通过单击事件将元素的property属性之一更改为 true,我如何通知模板显示我的容器。

我可以根据需要澄清或添加更多信息。

0 投票
1 回答
2107 浏览

angular - 没有不可变对象的推送角度变化检测策略

我一直在阅读一些关于变更检测策略的文章,但我对哪些情况下使用推送策略有意义存在疑问。基本上我的疑问是当我们有嵌套的组件时绑定了不可变的对象。我有两个嵌套组件,一个父组件和一个子组件,它们都具有推送时的更改检测策略。我将一个formGroup作为输入传递给子组件。

当我在父组件上将表单设置为启用然后我调用 ChangeDetectorRef.detectChanges() (它应该检查更改检测器及其子组件)时,我没有看到子组件上的更改(例如子组件上的 ngIf启用表单时显示内容)。

我做错了什么或理解不好?

0 投票
0 回答
190 浏览

angular - 全局刷新Angular 2+应用程序没有页面刷新

我想知道是否可以在我的 Angular (2+) 应用程序上执行全局刷新。我正在使用 OnPush 更改检测策略来提高性能。

我创建了一项服务,可以将模板中的单词翻译成用户的浏览器语言。这些管道是纯粹的(出于性能原因,语言不应该经常更新)。

我想要实现的是我可以动态地改变我的语言。所以基本上我想在用户选择不同的语言时更改所有纯管道。

window.location.reload()我已经通过刷新页面(我曾尝试使用 ApplicationRef 和 ChangeDetectionRef 但这些纯管道不会得到更新。这甚至可能吗?

0 投票
2 回答
404 浏览

angular - Communication between components by service not working

I'm using the BehaviorSubject class to update the number of notifications in my global. I have 2 components : the component notification shows a list of notifications and you can set these notifications as read. The header component shows the number of notifications who are not read to let the user know that he missed something on the website. Since there are 2 different components, I'm using a service to communicate through them.

Here some snippet :

notification.service.ts

header.component.ts

notification.component.ts

Problem is, even if the value is set on notification.component.ts side, the value retreived in the header.component.ts is not the good and is the initial one, witch is not what I want of course.

Does anyone have an idea ? Been struggling on this for too much time now


Update

Here is the html part, wich is very simple :


Update 2

The module involved :

This is the original module that is imported in App.module . What I through of is creating my own module like this :

Tried to add this to AppModule but it says an error like : Cannot instantiate cyclic dependency! NbNotificationService ("[ERROR ->]"): in NgModule PagesModule in ./PagesModule@-1:-1

0 投票
1 回答
3686 浏览

angular - 绑定到函数时如何触发角度变化检测?

从这两个帖子:

我了解发生“更改检测”时 DOM 是如何更新的。我从“关于 Angular 中的变更检测需要了解的一切”中无法理解的是 Angular 如何跟踪函数内部使用了哪些属性,以及何时应该运行“变更检测”。

假设这是父组件视图。

func()在哪里

并且parentProp没有在模板中使用。如果以及何时parentProp被服务更改,Angular 如何知道这func()取决于parentProp并因此应该触发“更改检测”并更新视图。

0 投票
1 回答
793 浏览

angular - 在 Typescript 中计算 `total` 并更新 `total=quantity*price`

我想计算这样total= quantity*price的东西:并更新total时间quantityprice变化。

模板输出快照

app.component.html

app.component.ts

当我更改quantityorprice时, 中没有任何变化total

任何人都可以提出任何想法或解释我的代码中的问题吗?

谢谢

0 投票
2 回答
103 浏览

angular - Angular2/4 changeDectorRef 不起作用

我有一个导航栏组件,在它的ngOnInit功能内我检查了用户是否登录,如果用户登录然后我更改isAuthorized为 true,它的默认值为false,然后我*ngIf="isAuthorized"在我的菜单中检查li。现在,当用户未登录时,我的某些菜单项未创建,并且当用户单击 post like 按钮时,如果用户未登录,我已检查以显示登录模式。用户登录后,我可以从to更改isAuthorized,但我的导航栏组件无法检测到更改并创建其他菜单。我有内部登录功能: 设置令牌后,在导航栏组件内部,我有一个刷新功能:navbarComponentfalsetruethis.navbar.refresh();

我想要的主要是防止用户使用模式登录时重新加载,并显示其他菜单项。

0 投票
2 回答
1273 浏览

angular - Angular:检测昂贵的同步函数内部的变化

我有一个执行昂贵的同步任务的函数。在我的例子中,它是通过 pdfkit 生成的客户端 pdf,但让我们用 while-loop sleep 来模拟它。

我想在运行任务之前显示一个“加载”微调器,并在完成后隐藏它。

如果一切都是同步运行的,Angular 将没有机会在一切结束之前运行更改检测循环,所以我想我只需要找到一种异步运行它的方法。

我尝试将它包装在一个承诺中,所以假设我有:

但是我是否使用 .then() 调用来运行它:

或使用异步/等待:

在函数结束之前不会检测到更改,并且不会显示任何内容。

我猜问题是Javascript仍然是单线程的,并且promise在创建时仍然会立即运行,所以一切基本上仍然是同步运行的。

但即使使用 ChangeDetectorRef.detectChanges() 强制进行更改检测也无济于事。

到目前为止,我发现的唯一解决方案是在 setTimeout hack 中运行它:

但它看起来不像是正确的正式解决方案。

setTimeout 真的是唯一的方法吗?

Plunker:https ://embed.plnkr.co/ywsIhulPMqjqwzaMxVjn/