Требуется подтверждение перед обновлением 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;
        }
      }

    });

  }
};

Добавьте этот код в функцию изменения ng

Простой способ:

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;
        });
    }
}
Другие вопросы по тегам