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

angular - Angular2:更改自动滚动指令的检测时间

我一直在研究一个简单的聊天显示自动滚动指令:

当我设置enableProdMode()并且ChangeDetectionStrategy设置为默认值时,该指令将起作用,但是在“开发模式”下我得到一个异常。我可以将 设置ChangeDetectionStrategyonPush,在这种情况下不会发生异常,但滚动会滞后。

有没有办法更好地构造这段代码,以便更新 Dom 然后调用 Scroll 函数?我已经尝试过setTimeout(),但这会使延迟变得更糟,尝试使用ChangeDetectorRef并订阅可观察到的 trigger markForCheck()。使用ngAfterViewChecked()会导致浏览器崩溃。

这是在开发模式下触发的异常:

例外:表达式 'this.scrollHeight in ChatDisplay@1:40' 在检查后已更改。以前的值:“417”。当前值:'420' in [this.scrollHeight in ChatDisplay@1:40] angular2.dev.js (23083,9)

0 投票
2 回答
25185 浏览

angular - Angular 2 组件监听服务的变化

我有一个关于变更检测的简单问题。

我有一个组件和一个(全局)服务,里面有一个布尔值。如果该布尔值发生变化,如何让组件监听该布尔值并执行函数?

谢谢!

0 投票
1 回答
1772 浏览

angular - 使用共享服务在 angular2 中进行更改检测

我有一个父函数ngOnInit(),它从谷歌地图获取值如下

setValue()是与共享服务共享价值的功能,在 html 页面上我与父母和孩子有同样的事情 <input id="google_places_ac" [(attr.state)]="state" [(attr.country)]="coutnry" name="google_places_ac" type="text" value="{{city}}" class="form-control" />

setValue()在父组件类中,我在函数上触发 changedetection

这在父级上运行良好,但在子级上没有发生变化,我创建了一个点击功能,它在子级上触发 changedetection 也可以,但我希望它从父级自动触发有什么解决方法吗?

0 投票
2 回答
259 浏览

angular - 首次以 angular2 呈现时,更改检测在路由页面上不起作用

我正在尝试从父组件获取谷歌地图值到我为其创建共享服务的路由组件,如下所示

从父母那里,我在价值变化时广播这个地址,并通过订阅它在孩子中接收它,并且只有当子页面与父页面一起呈现时,它才能正常工作。如果首先呈现父级,那么我通过路由调用子视图,那么它不会在页面呈现时显示开始时的数据,只有当我再次更改父级中的值时才会显示。子视图正在订阅服务,但在呈现时未获取数据。如果您需要来自父母或查看的更多解释或代码,请告诉我。希望有人可以帮助我。

更新

这是更新,因此您可以了解我的问题,它是我从谷歌地图 api 获取值的应用程序组件

后来我有一个获得这个值的子视图

但是当这个视图被渲染时我没有得到地理定位,如果我改变父文本框中的值,那么它会在视图中更新

0 投票
1 回答
18868 浏览

angular - angular2 中的 behaviorSubject ,它是如何工作的以及如何使用它

我正在尝试建立一个共享服务如下

我不知道如何实现 BehaviourSubject 基本上我在这里尝试的只是我猜的一团糟,我通过使用在子组件中调用这个值

这会引发错误,如 .single()/last() 等任何可用的都不是函数,所以有人可以告诉我它是如何工作的,以及在我搜索示例时如何实现它,但对我来说没有任何意义。

0 投票
1 回答
1981 浏览

angular - How does angular2 render view after change detetction?

I read many articles about change detection but didn't get clear picture how does it work and renders view. Like in react we have virtual dom and diff algorithm which renders only part of UI that has been changed by creating dom patch so similarly how does angular know which part of UI needs to be changed.

How does changes detection decide what change will be rendered/replaced in view?

0 投票
3 回答
1125 浏览

data-binding - 对 Angular2 之外所做的更改做出反应

我有一个用相当基本的 JS 制作的非角度页面,并认为尝试添加一些 Angular2 并将其用于一些新功能是一个绝妙的主意。

我的计划是我将一个 Angular2 组件绑定到一个由旧代码更新的对象,然后我会使用 Angular2 魔法来更新一大块 UI。

问题是我无法说服 Angular2 对外部 JS 中所做的任何更改做出反应。这样做有什么诀窍?在谷歌上搜索这个问题的尝试导致了对 Angular2 的变化检测过程的深入解释,这到目前为止还没有帮助。这只是一个糟糕的主意吗?

我找到了一个随机的 Angular2 jsfiddle 并将其破解以显示问题。字符串被添加到“window.names”,但在从角度侧添加一个字符串之前您看不到它们:https ://jsfiddle.net/byfo3jg3/ 。代码如下:

0 投票
4 回答
51949 浏览

resize - 如何对 div 调整大小执行更改检测

我将 Bootstrap 用于我的布局,我需要检查我的自动计算大小是否div与 bootstrap 一起改变,例如 width = 25%。

如何对我未在模板中设置但由 Bootstrap 设置的属性执行更改检测?

(window:resize)是不足够的。

0 投票
2 回答
1692 浏览

performance - 提高 Angular2 输入字段的性能

我有一个包含日期(格式为toLocaleString())和其他内容的组件列表。在它们之上有一个用于创建新组件的组件,它包含一个带有一些使用 angulars FormBuilder 构建的输入字段的表单。当我快速输入时,验证会滞后,并且我输入的文本不会立即显示。

我假设 Angular 正在重新渲染所有组件,因为如果我不在其他组件中显示日期,我可以快速输入而不会出现延迟。

有没有办法只重新呈现我正在输入的输入字段,因为所有其他组件都无法更改或者是toLocaleString()问题所在?

0 投票
2 回答
2125 浏览

javascript - Why is both reference change and primitive change catch by Angular2 during change detection even with OnPush flag set?

Consider the following code

From the experiment I made, here is my understanding of the current Angular2 change detection strategy, can someone verify it if its true?

  1. Angular2 by default checks for value equality when doing change detection. If there are no ChangeDetectionStrategy.OnPush, every watched variable in component tree is checked for value equality. If value equality is false, that specific component will be rerender, and if value equality if true, that specific component will not be rerender.

  2. If you add ChangeDetectionStrategy.OnPush to a component. The behavior changes as follows

    i. If variable inside the component have reference change, the component is rerendered, and child component is checked for change detection (its specific change detection algorithm value/reference check depends on ChangeDetectionStrategy.OnPush)

    ii. If variable inside the component don't have reference change, the component is not rerendered, and child component is not checked for change detection, regardless of presence of ChangeDetectionStrategy.OnPush

Is this the correct interpretation?