Javascript AngularJS:用户通过确认对话框取消后,不能忽略输入字段上的更改事件

Javascript AngularJS:用户通过确认对话框取消后,不能忽略输入字段上的更改事件,javascript,angularjs,angularjs-directive,Javascript,Angularjs,Angularjs Directive,我试图创建一个指令,在本例中,每当输入字段无线电上的值发生更改时,它都会向用户显示一条确认消息 因此,如果选择了normal,用户单击tracked,然后取消确认框,我希望我的模型和视图都设置回normal 我的输入如下所示: <form name="form1"> <input type="radio" id="blah" name="blah" ng-model="emailType" value="normal" ng-confirm-click="Are you s

我试图创建一个指令,在本例中,每当输入字段无线电上的值发生更改时,它都会向用户显示一条确认消息

因此,如果选择了normal,用户单击tracked,然后取消确认框,我希望我的模型和视图都设置回normal

我的输入如下所示:

<form name="form1">
  <input type="radio" id="blah" name="blah" ng-model="emailType" value="normal" ng-confirm-click="Are you sure you want to do that?">
  <input type="radio" id="blah2" name="blah2" ng-model="emailType" value="tracked" ng-confirm-click="Really?">
</form>
app.register.directive('ngConfirmClick', [ function () {

    return {
         priority: -1,
         restrict: 'A',
         require: 'ngModel',
         link: function (scope, element, attrs, modelCtrl) {
                   var message = attrs.ngConfirmClick;

    modelCtrl.$parsers.push(function (inputValue) {
                    var modelValue = modelCtrl.$modelValue;

                    if (inputValue !== modelValue && message && !confirm(message)) {
                        modelCtrl.$viewValue = modelValue;
                        modelCtrl.$render();
                    }

                    return modelCtrl.$viewValue;
                });
          }
    }
}]);
})

解析器在模型更改之前触发,我可以确认/取消我的确认框,我可以更改值。但是,当函数返回时,我的模型最终会被更新为新值

根据我在网上看到的一个例子,我还尝试了$rollbackViewValue,但它不起作用,因为函数未定义

我肯定我错过了一些非常重要的步骤。有人能帮忙吗?

发现了你的问题

更改modelCtrl.$viewValue=modelValue;到modelCtrl.$setViewValuemodelValue


您是否需要在它更改之前取消它,或者如果用户说不可以,您是否要将其更改回?我不想取消并清除选择。我想要的是返回到以前的值。所以,实际上,我有3个单选按钮,都绑定到emailType。如果值是正常的,我选择了另一个选项,如果用户说不,我想回到正常嘿,谢谢你的回答。不幸的是,它只清除选择。我想回到以前的选择。我会在我的第一篇文章中把它说得更清楚,今天我会用它多玩一点。事实上,它确实管用。问题是我使用的最初示例中仍然存在一些垃圾代码。setViewValue使用旧值调用所有解析器,我返回的不是旧值,而是与另一个字符串连接的旧值。当然不匹配。现在它工作了,谢谢!