首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >$watch对ngChange

$watch对ngChange
EN

Stack Overflow用户
提问于 2014-12-16 17:24:42
回答 3查看 7K关注 0票数 16

假设当$scope的属性发生变化时,您想要做一些事情。并表示该属性绑定到一个input字段。使用$watch和使用ngChange有什么优缺点?

html

代码语言:javascript
复制
<input ng-model="foo" ng-change="increment()">
<p>foo: {{foo}}</p>

<!-- I want to do something when foo changes.
     In this case keep track of the number of changes. -->
<p>fooChangeCount: {{fooChangeCount}}</p>

js

代码语言:javascript
复制
// Option 1: $watch
$scope.$watch('foo', function() {
  $scope.fooChangeCount++;
});

// Option 2: ngChange
$scope.fooChangeCount = 0;
$scope.increment = function() {
  $scope.fooChangeCount++;
};

http://plnkr.co/edit/4xJWpU6AN9HIp0OSZjgm?p=preview

我知道,有时需要使用$watch (如果要查看的值没有绑定到输入字段)。我了解到,有时需要使用ngChange (当您想要对输入中的更改进行响应,但不一定是响应范围属性更改时)。

但是,在这种情况下,两者完成了相同的任务。

我的想法:

  • ngChange看起来更干净,更容易理解正在发生的事情。
  • $watch看起来可能稍微快一些,但可能微不足道。使用ngChange,我认为Angular需要在编译阶段做一些额外的工作来设置事件侦听器,也许额外的事件侦听器会降低一些速度。不管您是否使用ngChange,摘要周期都运行在更改上,因此您有机会侦听某些内容并调用函数以响应更改。
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-12-16 17:38:34

底线--您可以通过$watch实现所有您可以通过ng更改实现的事情,但反之亦然。

目的:

ngChange -绑定到HTML元素 $watch -观察作用域的模型对象(包括HTML模型)

我的经验法则-如果您可以使用ng更改-使用它来匹配您的场景,否则使用$watch。

你为什么不使用$watch?

  1. 它效率低下--增加了$digest的复杂性
  2. 很难有效地测试
  3. 不干净
票数 18
EN

Stack Overflow用户

发布于 2014-12-16 17:35:29

你基本上都是对的。ng-change非常特定于DOM,用于在更改事件触发DOM元素时计算表达式。

然而,$watch是一个较低级别(更通用)的实用程序,它监视视图模型或$scope。因此,每次用户键入键(在输入示例中)时,您的监视功能都会触发。

相反,一个监听DOM事件,另一个监视您的数据。

票数 1
EN

Stack Overflow用户

发布于 2014-12-16 17:35:28

$watch为$digest增加了更多的复杂性,降低了效率。在你的例子中,ngChange是一个更干净、更简单的解决方案.

字体:http://www.benlesh.com/2013/10/title.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27510372

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档