在 angularjs 复选框输入中更新 ng-model 或执行 ng-change 之前需要确认
require confirmation before updating ng-model or executing ng-change in angularjs checkbox input
我有一个复选框输入,选中后将 customer.isCompleted
设置为 true 或 false,并使用 ng-change
通过 firebase api
保存客户数据
input type="checkbox" ng-model="customer.isCompleted" ng-change="sc.data.$save(customer)"
但是我想确保当客户选中该框时,它会提示确认。如果用户打入正常,则应选中该框,更新ngMode
l并射击ngChange
,否则什么都不做。选中时,确认框应显示 message1,未选中时,应显示 message2。
我该如何实现。我假设有一个指令,但不知道如何实现它。
简单方法:
input type="checkbox" ng-model="customer.isCompleted"
ng-change="if(confirm('sure?')) sc.data.$save(customer)"
引导方式:
return {
restrict: 'A',
require: 'ngModel',
link: function(scope, element, attrs, ngModel){
ngModel.$parsers.push(function(val){
if(val && confirm('sure want to check?') ||
!val && confirm('sure want to uncheck?'))
return val;
});
}
}
经过多次试验和错误后,我找到了有效的代码。我扩展了来自 karaxuna 的 $parsers 解决方案。我在这里所做的是检查 $viewValue 和 $modelValue,在按下取消按钮时更正 viewValue。
return {
restrict: 'A',
require: 'ngModel',
link: function(scope, element, attrs, ngModel) {
var x = false;
ngModel.$parsers.push(function(val) {
if (ngModel.$viewValue === true && ngModel.$modelValue === false) {
if (val && confirm('sure want to check?')) {
return val;
} else {
ngModel.$setViewValue(x);
ngModel.$render();
return x;
}
}
if (ngModel.$viewValue === false && ngModel.$modelValue === true) {
if (!val && confirm('sure want to uncheck?')) {
return val;
} else {
ngModel.$setViewValue(!x);
ngModel.$render();
return !x;
}
}
});
}
};
我有一个复选框输入,选中后将 customer.isCompleted
设置为 true 或 false,并使用 ng-change
firebase api
保存客户数据
input type="checkbox" ng-model="customer.isCompleted" ng-change="sc.data.$save(customer)"
但是我想确保当客户选中该框时,它会提示确认。如果用户打入正常,则应选中该框,更新ngMode
l并射击ngChange
,否则什么都不做。选中时,确认框应显示 message1,未选中时,应显示 message2。
我该如何实现。我假设有一个指令,但不知道如何实现它。
简单方法:
input type="checkbox" ng-model="customer.isCompleted"
ng-change="if(confirm('sure?')) sc.data.$save(customer)"
引导方式:
return {
restrict: 'A',
require: 'ngModel',
link: function(scope, element, attrs, ngModel){
ngModel.$parsers.push(function(val){
if(val && confirm('sure want to check?') ||
!val && confirm('sure want to uncheck?'))
return val;
});
}
}
经过多次试验和错误后,我找到了有效的代码。我扩展了来自 karaxuna 的 $parsers 解决方案。我在这里所做的是检查 $viewValue 和 $modelValue,在按下取消按钮时更正 viewValue。
return {
restrict: 'A',
require: 'ngModel',
link: function(scope, element, attrs, ngModel) {
var x = false;
ngModel.$parsers.push(function(val) {
if (ngModel.$viewValue === true && ngModel.$modelValue === false) {
if (val && confirm('sure want to check?')) {
return val;
} else {
ngModel.$setViewValue(x);
ngModel.$render();
return x;
}
}
if (ngModel.$viewValue === false && ngModel.$modelValue === true) {
if (!val && confirm('sure want to uncheck?')) {
return val;
} else {
ngModel.$setViewValue(!x);
ngModel.$render();
return !x;
}
}
});
}
};