我有一个复选框输入,在选中时将customer.isCompleted
设置为true或false,并使用firebase api
ng-change
保存客户数据
input type="checkbox" ng-model="customer.isCompleted" ng-change="sc.data.$save(customer)"
但是,我想确保当客户选中此框时,会提示确认。如果用户点击确定,则应选中该框,更新ngMode
l并激活ngChange
否则不执行任何操作。(并在选中或取消选中此框时执行此操作)。选中时,确认框应显示message1,未选中时应显示message2。
我该如何实现呢。我正在做一个指令,但不知道我是如何实现的。
答案 0 :(得分:0)
简单方法:
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;
});
}
}
答案 1 :(得分:0)
经过几次试验和试验错误我已经找到了有效的代码。我已经扩展了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;
}
}
});
}
};