📜  AngularJS中的$ watch和$ observe有什么区别?(1)

📅  最后修改于: 2023-12-03 15:13:24.518000             🧑  作者: Mango

AngularJS中的$watch和$observe的区别

AngularJS是一个流行的JavaScript框架,用于构建单页面应用程序。在AngularJS中,$watch和$observe都是用于监视和监听数据变化的方法,但它们有一些区别。

$watch

$watch是AngularJS中的一种机制,用于监视数据模型中的变化。当被监视的表达式的值发生变化时,$watch会触发相应的回调函数来执行一些操作。

基本语法:

$scope.$watch(watchExpression, listener, [objectEquality]);
  • watchExpression:被监视的表达式,可以是一个变量、函数或AngularJS表达式。

  • listener:当watchExpression的值发生变化时,要执行的回调函数。

  • objectEquality (可选):在进行对象比较时是否使用深度相等,默认为false,即使用浅比较。

$watch的特点:

  • $watch可以监视任意的数据模型,包括变量、函数、AngularJS表达式等。

  • 可以设置任意数量的$watch,用于监视不同的数据模型。

  • $watch可以在$scope对象上调用,监听整个$scope的变化,也可以在特定控制器中调用,监听部分$scope的变化。

$observe

$observe是AngularJS中的一个特殊方法,用于监听属性的变化。它主要用于监听DOM元素上的属性变化,或者在指令中监听指令属性的变化。

基本语法:

$observe(attrName, callback);
  • attrName:要监听的属性名,可以是HTML标签上的原生属性,也可以是自定义指令的属性。

  • callback:当属性变化时,要执行的回调函数。

$observe的特点:

  • $observe主要用于监听具有动态值的属性,例如通过表达式或变量进行绑定的属性。

  • $observe只能用于指令中,通过注入$attrs对象来调用。

  • $observe在解析指令时被调用,并在属性值变化时触发回调函数。

  • $observe可以用于监听任何属性的变化,无论是原生属性还是自定义指令的属性。

总结
  • $watch用于监听数据模型的变化,而$observe用于监听属性的变化。

  • $watch可以监听任意的数据模型,包括变量、函数、AngularJS表达式等,而$observe主要用于监听具有动态值的属性。

  • $watch可以在任何地方调用,而$observe只能在指令中调用。

  • $watch可以监听整个$scope的变化,而$observe只能监听特定属性的变化。

  • $watch是AngularJS的核心机制,而$observe是AngularJS中特有的方法,只适用于指令。