在AngularJS中,您可以使用的$watch
功能指定观察者以观察范围变量的变化$scope
。在Angular中监视变量更改(例如,在组件变量中)相当于什么?
在Angular 2中,更改检测是自动的… $scope.$watch()
和$scope.$digest()
RIP
不幸的是,开发指南的“变更检测”部分尚未编写(“
体系结构概述”页面底部“其他内容”
附近有一个占位符)。
这是我对变更检测的工作原理的理解:
setTimeout()
在组件内部使用而不是诸如$timeout
…之类的原因,因为setTimeout()
猴子打了补丁。Angular构建并维护“变化检测器”树。每个组件/指令只有一个这样的变化检测器(类)。(您可以通过注入来访问该对象ChangeDetectorRef
。)这些变化检测器是在Angular创建组件时创建的。他们跟踪所有绑定的状态,以进行脏检查。从某种意义上讲,它们类似于$watches()
Angular 1为{{}}
模板绑定设置的自动功能。
与Angular 1不同,更改检测图是有向树,不能有循环(这使Angular 2的性能更高,如下所示)。
当事件触发时(在Angular区域内),我们编写的代码(事件处理程序回调)将运行。它可以更新所需的任何数据-共享应用程序模型/状态和/或组件的视图状态。
之后,由于添加了挂接Zone.js,它将运行Angular的更改检测算法。默认情况下(即,如果未onPush
在任何组件上使用更改检测策略),则从树顶开始按深度优先顺序对树中的每个组件进行一次检查(TTL = 1)…。(好吧,如果您处于开发人员模式,则更改检测运行两次(TTL = 2)。有关更多信息,请参见ApplicationRef.tick()。)它将使用那些更改检测器对象对所有绑定执行脏检查。
ngOnChanges()
以通知更改。ngDoCheck()
(有关更多信息,请参见此SO答案)在此)。对于找到的任何绑定更改,将更新组件,然后更新DOM。变更检测到此结束。
其他参考以了解更多信息:
onPush
。问题内容: 我试图开始使用angular 2.0,现在我想知道在某些外部事件更改数据后如何启动视图更新。 详细来说,我有一个Google地图和一个用于地图上单击事件的处理程序。用户单击地图后,我将单击的纬度和经度存储到控制器上的变量中 在视图中,我想显示这些值 在角度1中,我只需在对$ scope。$ apply()的调用中将分配包装在控制器中即可。 在Angluar 2.0中更新视图的首选方法是
问题内容: 我在我的项目中使用AngularJS,但我不想包含jQuery。我想在AngularJS中执行与此等效的jQuery 我在互联网上搜索,但找不到。 问题答案: AngularJS内置了jqLite。请参阅文档以查看可用方法 角jqLite 对于您的方案: 在angularJS中不起作用,等效于。但是jqLite的限制非常有限,不支持“按ID选择器”,这意味着您不能像按类或I
问题内容: 我正在从xml配置转移到注释。我想转换一个会话范围的bean是 可以通过注释完成此操作吗?如果没有,我该怎么做才能使该声明继续工作? 问题答案: 在spring上下文xml中,执行以下操作: 请注意,尽管如此,你将需要为该包中的所有类编写接口。
问题内容: 该表示法是: 实际上不哈希对象;它实际上只是转换为字符串(通过它是一个对象,还是其他各种原始类型的内置转换),然后在“ ”中查找该字符串,而不对其进行哈希处理。也不会检查对象是否相等-如果两个不同的对象具有相同的字符串转换,则它们将彼此覆盖。 鉴于此-在JavaScript中是否有任何有效的hashmap实现?(例如,第二个Google结果产生的实现对任何操作都是O(n)。其他各种结果
问题内容: 我正在尝试从Swift的iTunesU中的“开发适用于iPhone和iPad的ios7应用程序”中复制斯坦福Matchismo游戏。 在第3讲幻灯片的第77页上,它显示了使用,这不是Swift上的选项。Swift文档示例显示了一个具有数组的示例,但是我不知道如何使Interface Builder将多个插座连接到同一个/ Array。 有人知道如何做到这一点吗? 我知道我可以创建1
问题内容: 我正在开发Java程序,我确实需要能够以一定的频率和持续时间播放声音,类似于c#方法System.Beep,我知道如何在C#中使用它,但是我找不到用Java做到这一点的一种方法。是否有等效的方法或另一种方法? 问题答案: 我认为没有办法在便携式2 Java 中用“哔”声播放音乐1。您将需要使用我认为的API …除非找到可以为您简化事情的第三方库。 如果您想走这条路,那么此页面可能会给您