Angular-ng-change在ng-model更改时不会触发

tom*_*lin 19 javascript data-binding angularjs angularjs-ng-change angular-ngmodel

输入如下:

<input type="text" ng-model="repair.test"  ng-change="action()" />
Run Code Online (Sandbox Code Playgroud)

action()当我手动键入和改变输入被执行.但是,如果我通过编程方式通过其他函数更改repair.test值,则不会触发ng-change的操作.我已阅读角度教程,这可能是预期的行为.

https://docs.angularjs.org/api/ng/directive/ngChange

"当值变化来自模型时,不会评估表达式." < - 我也需要这个.当模型以任何方式改变时,如何在控制器中触发动作?(输入输入或任何其他功能)

谢谢您的帮助.

编辑:

模型值实际上是form.$valid,它有自己的Form控制器(我认为),这就是我使用action函数尝试将值传递给父控制器的原因.所以$scope.$watch此刻不起作用,只有在它被初始化时.

Tho*_*988 27

ngChange仅用于输入,如果你想听模型这样做

$scope.$watch('repair.test', function(newvalue,oldvalue) {

            });
Run Code Online (Sandbox Code Playgroud)

  • ng-change应该适用于主要问题中存在的输入类型.但是我没有看到任何答案说明为什么它不适用于ng-change?我也有同样的问题.谢谢 (2认同)
  • 这真的帮助我理解为什么使用$ watch,谢谢! (2认同)

naX*_*aXa 7

所述ngChange当输入值的变化导致要致力于模型的新值表达式仅被评估.

不会被评估:

  • 如果从$parsers转换管道返回的值未更改
  • 如果输入继续无效,因为模型将保持为空
  • 如果以编程方式更改模型,而不是更改输入值

尝试使用$ scope创建一个观察者.$ watch -$watch(watchExpression, listener, [objectEquality]);

$scope.$watch('repair.test', function(newValue, oldValue) {
    // ...
});
Run Code Online (Sandbox Code Playgroud)