Ich habe damit seit fast zwei Tagen gekämpft. Ich hoffe ihr könnt mir helfen.setViewValue in der Direktive auf Eingabe nicht aktualisieren tatsächlichen sichtbaren Eingabewert
Zusammenfassung:
Ich habe Probleme, den Ansichtswert einiger Eingabefelder programmatisch einzustellen.
Ich habe ein Formular mit Eingaben, deren Werte gespeichert werden, bevor das Formular entfernt wird (mehrere Elemente und mehrere Formulare möglich, Benutzer könnte ein Formular schließen und später wieder öffnen). Beim erneuten Öffnen des Formulars möchte ich die vorherigen Ansichtswerte wiederherstellen (Hauptgrund ist, auch die ungültigen Ansichtswerte zurück zu bekommen, die nicht im Modell gespeichert wurden). Dies funktioniert nicht.
Wenn ich ctrl. $ SetViewValue (previousValue) aufrufen Ich bekomme das Modell (sichtbar) aktualisiert (wenn gültig), die Ansicht Werte der FormControl (während des Debugging in der Konsole) sind auch geändert, aber ich bekomme sie nicht tatsächlich in den Eingabefeldern gerendert. Ich verstehe nicht, warum :(
ich das Problem auf diese Geige reduziert:
http://jsfiddle.net/g0mjk750/1/
Javascript
var app = angular.module('App', [])
function Controller($scope) {
$scope.form = {
userContent: 'initial content'
}
}
app.controller('Controller', Controller);
app.directive('resetOnBlur', function() {
return {
restrict: 'A',
require: 'ngModel',
link: function (scope, element, attrs, ngModel) {
element.bind('blur', function() {
console.log(ngModel);
scope.$apply(setAnotherValue);
});
function setAnotherValue() {
ngModel.$setViewValue("I'm a new value of the model. I've been set using the setViewValue method");
}
}
};
});
Html
<form name="myForm" ng-app="App" ng-controller="Controller" class="form">
Text: {{form.userContent}}
<hr />
If you remove the text, "Required!" will be displayed.<br/>
If you change the input value, the text will update.<br/>
If you blur, the text will update, but the (visible) input value not.
<hr />
<input class="input" type="text" ng-model="form.userContent" name="userContent" reset-on-blur required></textarea>
<span ng-show="myForm.userContent.$error.required">Required!</span>
</form>
Ich hoffe, euch erklären ich, warum das nicht funktioniert und wie man das repariert ...
So einfach. Rufen Sie $ render auf und es funktioniert. Das ist cool. aber ich muss $ render wirklich überschreiben, denn in 1.3.0-rc.3 sieht $ render() fast gleich aus, aber es überprüft $ isEmpty (ctrl. $ modelValue) nicht $ isEmpty (ctrl. $ viewValue). Nun und in setViewValue wird der ModelValue nur gesetzt, wenn er gültig ist. aber ich wollte, dass ungültige Felder auch neu gerendert werden. Ohne das Überschreiben zu ändern, um sich so zu verhalten, wie es einmal war (wie in Ihrer Antwort), sind meine Felder leer. Für jetzt habe ich die Rendermethode überschrieben. Ich frage mich, warum sie die Rendermethode geändert haben. – Allisone