我正在尝试创建一个指令,每当输入字段(在本例中为 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(),但它不起作用(函数未定义)。
我确定我错过了一些非常重要的步骤。谁能伸出援手?
最佳答案
关于javascript - AngularJS:用户使用确认对话框取消后,无法忽略输入字段上的更改事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23813262/