7

I am using Angularjs. My problem is when I select a new option in my dropdown, a dialog will appear. If the result of the dialog is false, the selected dropdown option must be the same. Getting ideas from other devs will be analyzed. Thank you in advance!

Refer to my code snippet below:

<div ng-app="myApp" ng-controller="myCtrl">
  <select ng-model="myDropDown" ng-change="Dialog()">
    <option>a</option>
    <option>b</option>
  </select>
</div>

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"></script>
<script>
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {
    $scope.Dialog = function () {
        var dialog = confirm('Continue?');
        if(!dialog) {
         alert("Option must not change");
            /** The problem is the dropdown still select the option. **/
        }
    }
});
</script>
Mistalis
  • 17,793
  • 13
  • 73
  • 97
JP Dolocanog
  • 451
  • 3
  • 19

1 Answers1

15

Here is a trick you may not know:

ng-change="dialog(myDropDown)"         // pass the NEW value of myDropDown
ng-change="dialog('{{myDropDown}}')"   // pass the OLD value of myDropDown

When calling dialog(), you can pass as a param the previous selected option.

Then, just rollback it if the dialog is cancelled.

var app = angular.module('myApp', []);

app.controller('myCtrl', function($scope) {
    $scope.dialog = function(prev) {
        var dialog = confirm('Continue?');
        if(!dialog) {
            $scope.myDropDown = prev;
            alert("Option must not change");
        }
    }
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"></script>

<div ng-app="myApp" ng-controller="myCtrl">
  <select ng-model="myDropDown" ng-change="dialog('{{myDropDown}}')">
    <option>a</option>
    <option>b</option>
  </select>
</div>
Mistalis
  • 17,793
  • 13
  • 73
  • 97
  • 2
    Nice trick! Thank you for this! – JP Dolocanog Jul 13 '17 at 01:03
  • I think this trick works only for AngularJS because I tried this snippet with AngularIO and got the error: `Uncaught Error: Template parse errors: Parser Error: Got interpolation ({{}}) where expression was expected` – Pranithan T. Aug 14 '18 at 15:25