我正在 AngularJS 中实现一个简单的微调器控件,我想对用户输入和 +/- 按钮的更改做出反应。这是我的HTML:
<input type='button' ng-click="MyProperty = MyProperty - 1" value="-">
<input type='text' ng-model="MyProperty" ng-change="log('changed from ngChange')">
<input type='button' ng-click="MyProperty = MyProperty + 1" value="+">
但这将仅跟踪“用户更改”,因为根据文档ngChange仅支持用户交互更新
所以现在我正在$scope.$watch按照 Frederik的建议进行研究:
$scope.$watch('MyProperty', function() {
$scope.log('changed from $watch');
});
但这似乎不太对劲。
- 首先,它不是声明性的,您必须搜索代码
MyTestProperty才能找到此绑定。 - 如果您想放置
$scope.log在单独的模型中,则必须注入$scope或在控制器中进行绑定。据我了解,这两种方式都不被认为是最佳实践。
由于许多其他原因,有些人认为这$watch通常是一件坏事。但是那里建议的解决方案(log直接调用 ngClick)对我来说并没有太大的不同。基本上你必须手动跟踪所有的变化,如果有新的演员出现,你必须在那里复制你的逻辑。
所以问题是:有没有一种方法可以让你在没有 $watch 的情况下自动跟踪模型更新?如果现在有这种方法,那么为此实施您自己的指令的想法有多糟糕?