它在文档中说ngChange
不会触发:"如果模型以编程方式更改,而不是通过更改输入值"。
这是否意味着如果您以编程方式更改模型,则无法使用ngChange
?
或者这是否意味着在以下情况下无法使用ngChange
:
1( 以编程方式更改模型
和
2( 您无法通过输入字段更改模型
这只是意味着如果使用javascript来更改模型,则不会计算ngChange表达式。如果要触发 ngChange,则需要以编程方式调用类似于以下内容的表达式:
<input type="checkbox" ng-model="confirmed" ng-change="change()" id="ng-change-example1" />
如果您希望更改函数触发,则需要手动调用它:
$scope.confirmed = 'test';
$scope.change();
如果我正确阅读并理解了这一点,不幸的是,你不能像你说的那样使用 ng-change 来做到这一点,但我不是 100% 确定。
我正在考虑ng-model-options,这是AngularJS 1.3附带的新功能,也许这可以推动你前进。
有一个用于吸气剂和二传手的自动选项,允许您实时更改模型。从理论上讲,您可以使用它并使用ng-bind调用更新函数。
也许这可能是您解决问题的可能解决方案......
(function(angular) {
'use strict';
angular.module('getterSetterExample', [])
.controller('ExampleController', ['$scope', function($scope) {
var _name = 'Brian';
$scope.user = {
name: function(newName) {
return angular.isDefined(newName) ? (_name = newName) : _name;
}
};
}]);
})(window.angular);
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Example - example-ngModelOptions-directive-getter-setter-production</title>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.7/angular.min.js"></script>
<script src="app.js"></script>
</head>
<body ng-app="getterSetterExample">
<div ng-controller="ExampleController">
<form name="userForm">
Name:
<input type="text" name="userName"
ng-model="user.name"
ng-model-options="{ getterSetter: true }" />
</form>
<pre>user.name = <span ng-bind="user.name()"></span></pre>
</div>
</body>
</html>