当前,我们可以通过几种方式监视数据更改。我们可以使用触发模型更改,$watch
并且可以向元素添加指令并对其绑定一些操作。
在许多情况下,这有点令人困惑,所以我很好奇,这是每个变体的优缺点,何时应该使用$watch
绑定,何时使用诸如ng-change
?的指令?
两者$watch
和ngChange
具有完全不同的用法:
假设您有一个在范围内定义的模型:
$scope.myModel = [
{
"foo":"bar"
}
];
现在,如果您想在发生任何更改时执行某些操作,则myModel
可以使用$watch
:
$scope.$watch("myModel", function(newValue, oldValue){
// do something
});
ngChange
是一个指令,当用户更改输入时将评估给定的表达式:
<select ng-model="selectedOption" ng-options="option for option in options"
ng-change="myModel=selectedOption"></select>
简而言之,您通常会绑定ngChange
到一些HTML元素。而$watch
对于模型。
问题内容: 输入如下: 当我手动键入并更改输入时,将执行。但是,如果我以编程方式通过其他功能更改了repair.test值,则不会触发ng- change的操作。我已经阅读了角度教程,这可能是预期的行为。 https://docs.angularjs.org/api/ng/directive/ng更改 “当值更改来自模型时,不评估表达式。” <-我也需要这个。模型以任何方式更改时,如何在控制器中触
问题内容: 我正在使用ng-pattern来验证某些表单字段,并且正在使用ng-change来监视和处理任何更改,但是ng-change(或$ scope。$ watch)仅在form元素位于$有效状态!我对angular还是陌生的,所以我不知道如何解决这个问题,尽管我怀疑应该采用新的指令。 在ng-pattern仍然像以前一样设置表单元素状态的情况下,如何在$ invalid和$ valid表单
问题内容: 我有一个选择标签,如下所示: 并且我为此使用了jQueryUI控件(组合框),则从jQuery触发的事件“更改”不会触发doSomething()。 您知道如何从外部角度触发ng-change吗? 问题答案: 糟糕-这是很糟糕的做法-但您可以使用目标控制器中驻留的元素并从中获取。 例: Javascript: 现在,您的变量可以访问控制器上定义的所有方法。
问题内容: http://plnkr.co/edit/RP9SpO1qGjn5Ua6pZJ3D?p=preview js 和html 注意,根据半径范围结构检查了“ 2 Mile”无线电输入。为什么ng-change不触发功能? 如果我添加ng-model,则该函数会触发,但是ng-checked无法正常工作。 问题答案: 这是因为您没有使用: plnkr 更新: 很抱歉,我没有注意到您要检查默认
问题内容: 我有一个在更改textarea的值时调用的函数。它很好用,除非按下空格键,然后什么也没叫。有没有办法激活它?从技术上讲,内容在变化,我希望无论如何都要调用该函数。 我在代码上摆弄小提琴。您可以看到按下空格键时,数组不会推送新的元素(也请按Enter键),但是其他非空白键都可以。 小提琴示例:http : //jsfiddle.net/UJWLN/4/ 问题答案: 您可以在输入中使用指令
问题内容: 什么时候应该使用角度函数,什么时候应该使用angularjs指令?对我来说,他们都可以做同样的事情。 两者之间是否有差异或使用方式? 问题答案: 显然,它们并不相同。一种仅在控制器中使用;另一种仅用于控制器。另一个是对输入元素的指令。 但是即使在它们的应用中,它们也有所不同。 使用监视的表达式时,将在每个摘要循环上对其进行评估,如果有更改,则将调用处理程序。 使用,响应事件,显式调用处