问题标签 [angular2-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 投票
0 回答
388 浏览

angular - Angular 2 检测不到 Observable 的变化

我用 Angular 2 开发了一个应用程序。我对 Angular
中的检测变化有疑问。
我解释一下:
我有一个组件:

test.component.ts

该组件调用一个服务方法,该方法请求服务器获取带有可观察结果的结果:

recherche.service.ts

retrieveStudies方法堆叠结果和组件转换并将此结果堆叠在一个listeExamen. 此选项卡绑定到组件的模板。使他的Observable工作和堆栈好所有结果都在选项卡中。

问题是 Angular 不更新视图。

observable 完成工作后的结果: 在此处输入图像描述



点击“appuie”后的结果: 在此处输入图片描述

发出用户事件后,结果出现在视图中。
如何自动更新视图?

谢谢。

0 投票
1 回答
828 浏览

angular - Angular2 View在变量更改后不更新

我有这个组件(还有另一个有同样问题的组件)。当字段值更改时,视图不会更新,我什至尝试强制进行更改检测,但它没有用。

组件.js

chatService.getMessages返回Observable一个.

0 投票
5 回答
67466 浏览

javascript - Angular2 - 检查后表达式已更改 - 使用调整大小事件绑定到 div 宽度

我已经对此错误进行了一些阅读和调查,但不确定适合我的情况的正确答案是什么。我知道在开发模式下,更改检测会运行两次,但我不愿意用它enableProdMode()来掩盖问题。

这是一个简单的示例,表格中的单元格数量应随着 div 宽度的扩展而增加。(注意,div的宽度不仅仅是屏幕宽度的函数,所以@Media不能轻易应用)

我的 HTML 如下所示(widget.template.html):

这本身没有任何作用。我猜这是因为没有什么会导致更改检测发生。但是,当我将第一行更改为以下内容并创建一个空函数来接收调用时,它开始工作,但偶尔我会收到“检查错误后表达式已更改”

我最好的猜测是,通过这种修改,会触发更改检测并且一切都开始响应,但是,当宽度快速变化时会引发异常,因为之前的更改检测迭代比更改 div 的宽度需要更长的时间才能完成。

  1. 是否有更好的方法来触发变更检测?
  2. 我是否应该通过函数捕获调整大小事件以确保发生更改检测?
  3. 使用 #widthParentDiv 访问 div 的宽度是否可以接受?
  4. 有没有更好的整体解决方案?

有关我的项目的更多详细信息,请参阅这个类似的问题。

谢谢

0 投票
1 回答
1045 浏览

ajax - 如何从模板中调用一次函数?

我在 angular2 模板中使用函数调用。该函数本身使用 http.get() 执行一个 http 网络请求,并返回一个任何 [] 的 Observable,它实际上是一个 css 样式对象:

但是上面的代码会触发一个无限循环lookupStyle每次发生 angular2 变化检测时都会评估该函数。由于http.get()将触发更改检测运行,因此lookupStyle在 http 请求完成后重新评估该函数 - 存在无限循环。

有没有一种解决方案或更好的方法可以告诉 angular 只评估lookupStyle一次函数?现在,我知道我可能会在我的视图模型上想出一些.zip/.combineLatest魔法,但这似乎有点矫枉过正,并且会产生很多额外的代码——这就是我寻找更好方法的原因。

0 投票
2 回答
12023 浏览

angular - 如何为 3rd 方库禁用 angular2 更改检测

我有谷歌地图,每秒触发 100 多次变化检测。如何为此禁用更改检测。

点击此处查看地图预览

使用 mouseover 事件时会更糟。

0 投票
0 回答
2053 浏览

angular - 在 Angular2 中监听服务中的变量变化

在 Anuglar2 服务中收听变量变化的最佳方法是什么。在此更改上,组件会自行更新。

0 投票
0 回答
240 浏览

events - Angular2 - 使用 Redux 和单向数据流时,DOM 事件在重新渲染时丢失

我不确定标题的最佳表达方式,但希望描述会澄清。

我有一个使用 Redux 进行状态管理的 Angular2 组件。该组件使用*ngFor这样的按钮来渲染一组小输入。“状态”是这样的......

模板呈现这样的......

当一个输入被聚焦和编辑,然后焦点被移开,onBlur($event)回调被调用,一个 redux 动作(即:)"UPDATE_VALUE"被派发新值。

并且 reducer 更新值(使用 Immutable.js):

状态已更新,因此组件将使用更新后的值重新渲染。

当点击输入旁边的按钮时,onClick($event)会触发回调,调度不同的 redux 操作(即:)"ADD_VALUE",更新状态,并使用新的空白输入和按钮重新渲染组件。

当输入聚焦(编辑)并且用户单击按钮时,就会出现问题。用户打算单击该按钮,但由于他们碰巧专注于该字段,因此它的行为与预期不符。该(blur)事件首先被触发,所以输入 onBlur 回调被触发,redux action 被调度,状态被更新,组件被重新渲染。但是,按钮(click)丢失了,所以没有创建新的输入。

问题: 有没有办法跟踪点击事件并在重新渲染后触发第二个动作?或者,有没有办法以某种方式链接 redux 操作,以便它们在重新渲染之前按顺序发生?

旁注-我尝试更改(click)要使用的事件,该事件(mousedown)在之前触发,(blur)但这导致Angular(在devMode中)抱怨@inputs组件在检查后发生了更改(状态在更改检测周期期间发生了更改)。不过,我还没有深入研究。我希望找到使用点击和模糊的解决方案。

谢谢!

0 投票
1 回答
2350 浏览

angular - 您可以在 Angular 2 组件中同时使用 OnChanges 和 DoCheck 吗?

我有一个场景,我希望在我的组件中同时使用两者ngOnChangesngDoCheck但是我记得前段时间在 angular 文档中一次只能使用其中一个。

虽然我似乎再也找不到这些信息,但我认为它之前在节的某个地方说过。

使用这两种方法是否安全,或者我是否需要在中实现我自己的版本ngOnChangesDoCheck避免做出很大的“不”?

0 投票
1 回答
908 浏览

angular - *ngFor 中的 Angular 2 更改检测似乎不起作用 (RC5)

在我的 ng2 模块中,另一个模块调用一个函数来创建一个对象并将其推送到一个绑定到模板中 *ngFor 的数组。根据文档https://angular.io/docs/ts/latest/api/common/index/NgFor-directive.html它应该自动检测更改。我可以控制台记录数组,一切都在那里,但选择器标记保持为空。如果我使用静态数组作为测试它可以工作。我在这里和其他网站上查看了所有看似相似的问题以及文档中的 ChangeDetectorRef,但我发现的都是几个月前的,如果我尝试会导致错误。

这是marker.component.html:

这是marker.component.ts:

静态写入的“令牌”按预期显示和工作,但没有新添加。

0 投票
1 回答
11669 浏览

javascript - 在 Angular 2 中订阅 ActivatedRoute 参数不会更新视图模板

我不确定为什么更改检测在这里不起作用。我尝试了一些东西,包括 setTimeout。我正在使用 RC5。基本上我想根据我的 URL 中的参数更改内容。应该很简单吧?

谢谢.ts

谢谢.html