javascript - AngularJS:用户使用确认对话框取消后,无法忽略输入字段上的更改事件

标签 javascript angularjs angularjs-directive

我正在尝试创建一个指令,每当输入字段(在本例中为 radio )上的值发生更改时,该指令都会向用户显示一条确认消息。

因此,如果选择“正常”,用户点击“跟踪”,然后取消确认框,我希望我的模型和 View 都设置回“正常”。

我的输入是这样的:

<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>

使用 ng-change 对我来说真的不起作用,因为如果我在确认时说不,那就太晚了:值已经被改变了。

我试图遵循这个 link .我的指令现在看起来像这样:

我的指令是这样的:

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.$setViewValue(modelValue);

jsfiddle

关于javascript - AngularJS:用户使用确认对话框取消后,无法忽略输入字段上的更改事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23813262/

相关文章:

javascript - 打印网页时在每个打印页面的底部添加文本页脚

javascript - 使用 .reduce() 将两个值相乘(包括之间的值)的方法

javascript - 尝试使用 ng-file-upload 和多方上传文件来上传文件

javascript - 如何在 Angular 中正确实现 DOM 操作?

javascript - 指令中的 Angular Controller 导致严格的 di 错误

javascript - 为什么 youtube iframe 导致 "Loading failed for the &lt;script&gt; with source"

javascript - 将数组发送到 frescojs pro show api

angularjs - 如何防止 Firebase 中出现重复的用户属性?

angularjs - Angular 数据表错误 - 未定义不是函数

angularjs - Angular 指令。我可以取消优先级较低的指令吗