保持“$ watch”功能远离控制器的最佳做法

时间:2014-10-09 08:51:51

标签: javascript angularjs angularjs-directive angularjs-scope angularjs-service

我试图找到一些关于将$watch函数从控制器移动到工厂的最佳实践的好例子。

我发现实际上并没有就什么是最好的做法达成一致意见。我已经看到了将$rootScope注入工厂并$watch注入价值变化的示例。

另一个建议是尽可能避免使用它们,并在元素本身上使用ngChange,例如:

<div ng-model="foo.bar" ng-change="updateValue(foo.bar)"></div>

你建议的方式是什么?自从我开始学习AngularJS以来,我一直把$watch es放在我的控制器中,但现在我想采用最佳实践方法,尽量让控制器保持尽可能薄。

1 个答案:

答案 0 :(得分:4)

我想在哪里放$watch在很大程度上取决于用例场景。关于$watch最重要的一点是不要在句柄功能中做任何艰苦的工作,特别是如果你正在观察的东西正在发生很大变化;这会严重阻碍你的表现。并确保在您的句柄功能中,您不会更改已经被观看的其他内容,因为这会导致一系列更改更新。

如果您确定要观看的变量只能在一个地方更改,最好使用ng-change而不是$watch,因为您已经知道它变更的地方。

通常不要在rootScope填充不必要的对象,但如果您正在观察整个应用程序中使用的某些变量(例如当前用户的属性),我认为这是有意义的将$watch表达式放入$rootScope