Javascript Angularjs获取最近或当前更改的模型名称
页面上可以有不同类型的输入元素。假设每个元素都绑定到一个模型。当任何输入元素的值发生更改时,是否有方法获取当前更改的或最近修改的模型名称?(“watch”可以使用,但随后需要添加每个要监视的元素。我想到了一种不为每个元素指定watch的方法:“一个公共列表器”)如果您的所有模型都位于同一对象下,您可以对该对象执行深度监视并构建历史记录Javascript Angularjs获取最近或当前更改的模型名称,javascript,angularjs,Javascript,Angularjs,页面上可以有不同类型的输入元素。假设每个元素都绑定到一个模型。当任何输入元素的值发生更改时,是否有方法获取当前更改的或最近修改的模型名称?(“watch”可以使用,但随后需要添加每个要监视的元素。我想到了一种不为每个元素指定watch的方法:“一个公共列表器”)如果您的所有模型都位于同一对象下,您可以对该对象执行深度监视并构建历史记录 <input type="text" ng-model="user.name" /> <input type="text" ng-model="
<input type="text" ng-model="user.name" />
<input type="text" ng-model="user.email" />
<input type="text" ng-model="user.details.phone" />
如果您使用的是Angular 1.3+
如果希望更好地控制模型更新的时间,可以查看ngModelOptions
此外,您还可以查看FormController和ngModelController上的$rollbackViewValue():$rollbackViewValue,$rollbackViewValue然后,您可以使用$BROATCH或$emit,在任务的每个输入元素中使用scope.on捕捉它。@squiroid。谢谢你的回复。然后,需要广播或发射所有元素。。一个接一个。不是吗?我感觉更好的是,拥有一个公共侦听器并输出模型名称或任何有用的信息。.使用ng change发出或广播事件:-)您是否反对创建一个属性指令,您可以添加到要跟踪的输入中,并让它处理广播?谢谢。我的元素实际上包含在一个对象中。某些属性具有数组、数字和字符串。但是,您能告诉我如何获得型号名称吗??(例如,从您的示例中,如何检查更改的值是user.name还是user.email??)如果您想在每个型号的基础上执行某些操作,则您将无法使用全局监视,或者您需要更多的计算来确定newVal和oldVal之间的更改:类似于。但它开始增加更多的复杂性。。。
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);
}