Требуется подтверждение перед обновлением ng-модели или выполнением ng-change в поле ввода angularjs
У меня есть флажок ввода, который при проверке устанавливает customer.isCompleted
в true или false и сохраняет данные клиента через firebase api
с помощью ng-change
input type="checkbox" ng-model="customer.isCompleted" ng-change="sc.data.$save(customer)"
однако я хочу убедиться, что когда клиент установит флажок, он запросит подтверждение. Если пользователи нажимают OK, тогда следует установить флажок, обновить ngMode
Я и огонь ngChange
в противном случае ничего не делайте.(и делайте это, когда флажок установлен или снят). если флажок подтвержден, в сообщении должно быть указано message1, а если флажок снят, в нем должно быть указано message2.
как я могу это реализовать. Я принимаю директиву, но не знаю, как бы это реализовать.
3 ответа
После нескольких проб и ошибок я понял, какой код работает. Я расширил решение $parsers от karaxuna. Здесь я проверяю $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;
}
}
});
}
};
Простой способ:
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;
});
}
}