2016-06-21 6 views
1

Mein Code hat diesen HTML-Snippet:Was genau löst ng-change aus?

<div ng-repeat="wf in wos.word.wordForms"> 
    {{ wf.statusId }} 
    <textarea ng-change="wf.statusId = 2" 
       ng-model="wf.definition"> 
    </textarea> 
    ... 
    ... 

Wenn ich etwas in das Textfeld ändern die wf.statusId 2 als

ich sparen ausgeben Jetzt erwartet wird. Es sendet den aktuellen WF-Inhalt an den Server. Wenn ich Daten vom Server zurückbekomme, kopiere ich sie zurück in wf.

Die Daten werden korrekt aufgefüllt, aber auch wenn der Server eine StatusID von 3 zurück Ich sehe noch den HTML-Code zeigt 2.

(response: ng.IHttpPromiseCallbackArg<IWordForm>): any => { 
    wf = angular.copy(response.data); 
}, 

response.data.statusId = 3

Wenn Ich schaue auf die Seite Ich sehe die Status-ID ist auf eingestellt 2

Ist das erwartete Verhalten? Wenn ja, kann ich es so einrichten, dass die ng-Änderung den Wert nicht auf 2 setzt, wenn ich Daten vom Server bekomme? Ich möchte nur den Wert auf 2 ändern, wenn ich eine Benutzereingabe mache.

Antwort

0

Ich denke, dass dies passiert, weil das ng-change Ereignis ausgelöst wird, wenn Sie den Wert von WF aktualisieren. Was ist mit einem Timeout nach wf = angular.copy(response.data); und ändern Sie dann wf.statusId zu 2?

würde der Code sein: es

(response: ng.IHttpPromiseCallbackArg<IWordForm>): any => { 
    wf = angular.copy(response.data); 
    $timeout(function() { 
     wf.statusId = 2; 
    }, 1); 
}, 

Versuchen Sie und lassen Sie mich wissen, ob es funktioniert, ich gar nicht sicher bin, aber es funktioniert.

Wenn Sie nicht wissen, wie $ timeout funktioniert, werfen Sie einen Blick auf $timeout Documentation

+0

richtig noch nicht den Timeout der Wert wird nach der Verwendung. –

+0

Ich verstehe nicht, warum Sie die Status benötigen. Außerdem, warum kopieren Sie den Wert vom Server zurückgegeben? Ist es anders als das gesendete? – miquelarranz