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

Best practice in keeping `$watch` functions away from your controllers

本文关键字:控制器 最佳 远离 功能 watch 保持      更新时间:2023-09-26

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

我发现,实际上,对于什么是最好的做法,并没有达成一致的意见。我见过将$rootScope注入工厂和$watch在那里寻找价值变化的例子。

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

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

你建议的方式是什么?自从我开始学习AngularJS以来,我一直在我的控制器中放置$watches,但现在我想采用最佳实践方法,努力使我的控制器尽可能薄。

我想$watch放在哪里在很大程度上取决于用例场景。关于$watch,最重要的是不要在handle函数内部做任何艰苦的工作,尤其是当你正在观看的内容发生很大变化时;那会严重影响你的表现。请确保在您的句柄函数中,您不会更改其他已经被关注的内容,因为这将导致一连串的更改更新。

如果你确信你正在观察的变量只能从一个地方更改,那么最好使用ng-change而不是$watch,因为你已经知道它更改的地方。

通常情况下,最好不要用不必要的对象填充rootScope,但如果您正在关注整个应用程序中使用的一些变量,例如当前用户的属性,我想将$watch表达式放入$rootScope是有意义的。