2017-07-03 3 views
0

Ich verwende ng-options, um das Dropdown-Menü mit Optionen anzuzeigen. Angenommen, ich habe drei Optionen, z. B. Option1, Option2, Option3. Wenn Standardoption1 ausgewählt ist, wird $pristine zu False und erneut, wenn er Option1 auswählt, aus prospektiven $pristine von angularjs sollte dieser Wert falsch sein, aber laut Benutzer er hat nicht die option.So geändert wurde ich nach einer Möglichkeit, diese Änderung zu erkennenÜberprüfen, ob sich der Status des Dropdown-Menüs geändert hat

+0

können Sie Beiträge verfassen Was hast du probiert? –

Antwort

0

Hier ist die Js fiddle demo

HTML

<div ng-app="myApp"> 

    <div ng-controller="ctrl"> 
    <form name="myForm"> 
     {{myForm.$pristine}} 
     <select ng-model='list' ng-options='item.name for item in data'> 
     </select> 
    </form> 
    </div> 
</div> 

JS Code

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

    app.controller('ctrl', function($scope) { 
    $scope.data = [{ 
     id: 1, 
     name: 'test' 
    }, { 
     id: 2, 
     name: 'test1' 
    }]; 
    $scope.list = $scope.data[0]; 
    $scope.$watch('list', function(o, n) { 
     if ($scope.list == $scope.data[0]) 
     $scope.myForm.$pristine = true; 
    }) 
    }); 

Sie fügen haben Uhr auf der Liste Modell kann diese

+0

Dies kann in ng-change selbst getan werden, keine Notwendigkeit, extra $ watch –

+0

@RohanKawade zu verwenden, dann können Sie Methode verwenden, um es zu setzen tun '$ scope.myForm. $ SetPristine (true);' Siehe https: // docs .angularjs.org/api/ng/type/form.FormController –

0

Das ist genau das erreicht werden, was ng-Änderung für ist.

Verwendung so sein würde (hinzugefügt $ index Sie eine andere Option zu zeigen):

HTML

<div ng-app="myApp"> 
    <div ng-controller="listController"> 
     <form name="myForm"> 
      <select ng-model="currOption" 
        ng-options='item.name for item in data' 
        ng-change="optionChanged(currOption, $index)"> 
      </select> 
     </form> 
    </div> 
</div> 

-Controller

angular.module('myApp') 
    .controller('listController', function($scope) { 
     $scope.data = [{ 
      id: 1, 
      name: 'option1' 
     }, { 
      id: 2, 
      name: 'option2' 
     }, { 
      id: 3, 
      name: 'option3' 
     }]; 

     $scope.optionChanged(option, index) { 
      // option = the selection the user just made. 
      // index = the index of the selection in your data. I.E. $scope.data[index] 
     }; 
}); 
+0

Aber immer noch bleibt der $ unberührte Zustand falsch. –

+0

@RohanKawade Wenn Sie es auf True setzen möchten, können Sie 'myform. $ SetPristine();' in die Funktion '$ scope.optionChanged' aufrufen. –

Verwandte Themen