2016-08-17 16 views
1

Ich muss das JavaScript-Ereignis 'change' für alle SELECT-Elemente auslösen, bei denen sich der Modellwert ändert. Die Werte des Modells werden programmatisch durch den Bereich geändert, so dass ngChange nicht mehr aktiv ist (reagiert nur auf vom Benutzer vorgenommene Wertänderungen).Änderungsereignis bei Modellwechsel auslösen

Irgendwelche Hilfe bitte?

Code-Beispiel: PLNKR

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

 
app.controller('MainCtrl', function($scope) { 
 
    $scope.name = 'oldname'; 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<div ng-app="plunker"> 
 
<div ng-controller="MainCtrl"> 
 
    <p>Hello {{name}}!</p> 
 
    <select ng-model="name" class="myInput" onChange="alert('changed');" > 
 
     <option value="oldname">oldname</option> 
 
     <option value="newname">newname</option> 
 
    </select> 
 
    <button ng-click="name='newname'">Change by Anguar</button> 
 
    </div> 
 
    </div>

Auswahl wählen Optionen zeigt Alarm. Wenn ich auf die Schaltfläche klicke, wird der Wert (Modell) zwar geändert, aber die Warnung wird nicht angezeigt, da die Modusänderung das Ereignis "Änderung" nicht auslöst.

+0

bitte Ihr Code teilen zu debuggen leicht –

+0

@NagaSaiA in Frage hinzugefügt. –

+0

Bitte geben Sie den gesamten Code ein, der zur Beantwortung der Frage in der Frage selbst und nicht auf der Website eines Drittanbieters erforderlich ist. –

Antwort

0

onChange ist ein Javascript-Ereignishandler, der nicht an die Digest-Schleife von angular gebunden ist. Versuchen Sie stattdessen, ng-change zu verwenden.

+0

Wie ich bereits sagte, reagiert ngChange nur auf vom Benutzer vorgenommene Änderungen. Es feuert nicht, wenn das Modell programmatisch geändert wird. Mehr im eckigen Dokument –

+0

Was ist mit $ watch()? –

+0

@AnirudhMangalvedhekar Würden Sie ein Beispiel geben? Ich brauche diesen Code, um allgemein zu sein - zB - nicht an ein bestimmtes Modell angepasst zu sein. Anstatt an allen zu arbeiten. –

1

kann $ Bereich verwenden. $ Uhr für die Änderungen im Modell und Trigger-Änderungsereignis zu beobachten

$scope.$watch('name', function(){ 
    //slct is the id for the select 
    $('#slct').trigger('change'); 
    }) 

siehe plnkr

+0

oder siehe https://plnkr.co/edit/Aq1mQm1vyv3bSIWVdKHs?p=preview –

+0

Ja, danke, das würde in den meisten Fällen funktionieren. Aber ich brauche meinen Code, um allgemein zu sein. Dh ich habe viele Elemente mit vielen Modellen, denen ich angehöre, und ich kann für alle keine einzige Wächteraussage schreiben. Wenn es für etwas getan werden könnte wie: '$ rootScope. $ Watch ($ ('wählen'). Val() ,, function() { $ (this) .trigger ('ändern'); }) ; ' –

+0

Sie können eine benutzerdefinierte Anweisung für eine allgemeinere Lösung erstellen, siehe https://plnkr.co/edit/VYMBA9gac8TUFsqtB16x?p=preview –

Verwandte Themen