在更新ng-model或在angularjs复选框输入中执行ng-change之前需要确认

时间:2015-02-18 06:48:17

标签: javascript angularjs checkbox angularjs-nvd3-directives

我有一个复选框输入,在选中时将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。

我该如何实现呢。我正在做一个指令,但不知道我是如何实现的。

2 个答案:

答案 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;
        }
      }

    });

  }
};