我有一个我要重置的表单。如果我在Angular中使用$setPristine
方法,这会让我有所帮助。
但是,如果您查看以下单独的案例,您会看到当您按下重置按钮重置表单时,save
消息将记录到控制台。这是我编写代码以保存对表单所做的任何更改的地方。
http://jsbin.com/OLIziRe/14/edit
在此示例中,当值不同时,将记录save
。 这包括将表单设置为pristine 时,因为之前的值将是表单重置之前的值,而新值将为undefined
。
我不想要这种行为。如果有更改,我只想记录save
消息 - 如果表单被重置,则不应该有“之前的值”。
我能想出的唯一解决方案是做一些诡计,以便重新渲染视图并重新初始化控制器,从而丢失所有先前的状态。
http://jsbin.com/OLIziRe/12/edit
AngularJS的做法是什么?
答案 0 :(得分:0)
你可以用你的第一个解决方案做到这一点:
var app = angular.module('myApp', []);
app.directive('someDirective', function () {
return {
restrict: 'A',
require: 'ngModel',
link: function (scope, element, attrs, ctrl) {
scope.$watch(function () {
return ctrl.$modelValue;
}, function (newValue, lastValue) {
// Only save if the values do not match
if(scope.someForm.$dirty){
console.log(newValue !== lastValue ? 'save' : '');
}
});
}
}
});
在console.log之前,如果用户已为表单设置了值,则检查表单是否处于$ dirty状态,即。
当你执行$ setPristine()时,你在$ pristine状态重置表单,所以$ dirty状态为false。
希望它有所帮助!