页面上可以有不同类型的输入元素。假设,每个元素都绑定到一个模型。有没有办法在任何输入元素的值更改时获取当前更改的或最近修改的模型名称? ('watch'可以使用,但是需要添加每个元素才能观看。我想到了一种没有分配给每个元素的方式:“一个常见的listerner”)
答案 0 :(得分:2)
如果您将所有模型放在同一个对象下,则可以对该对象进行深度监视并构建历史记录。
<input type="text" ng-model="user.name" />
<input type="text" ng-model="user.email" />
<input type="text" ng-model="user.details.phone" />
和控制器
function Controller($scope) {
$scope.user = {
details: {}
};
var lastValue;
// Deep watch ('true' as last argument)
$scope.$watch('user', function (newVal, oldVal) {
// Add to history (create a copy)
lastValue = angular.copy(oldVal);
}, true);
}
如果您使用的是Angular 1.3 +
如果您希望更好地控制模型的更新时间,可以查看ngModelOptions https://docs.angularjs.org/api/ng/directive/ngModelOptions。
此外,您可以在FormController和ngModelController上查看$ rollbackViewValue():https://docs.angularjs.org/api/ng/type/form.FormController# $ rollbackViewValue,https://docs.angularjs.org/api/ng/type/ngModel.NgModelController# $ rollbackViewValue