Walczyłem z tym przez prawie dwa dni. Mam nadzieję, że mi pomożesz.setViewValue w dyrektywie na wejściu nie aktualizuje rzeczywistej widocznej wartości wejściowej
Podsumowanie:
Mam problemy z programowym ustawieniem wartości widoku niektórych pól wejściowych.
Mam formularz z wejściami, których wartości są zapisywane przed usunięciem formularza (możliwe jest użycie wielu elementów i wielu formularzy, użytkownik może zamknąć formularz i ponownie go otworzyć). Przy ponownym otwarciu formularza chcę przywrócić poprzednie wartości widoku (głównym powodem jest odzyskanie nieprawidłowych wartości widoku, które nie zostały zapisane w modelu). To nie działa.
Jeśli zadzwonię ctrl. $ SetViewValue (previousValue) Otrzymuję model (widocznie) zaktualizowany (jeśli jest prawidłowy), zmieniono również wartości widoku formControl (podczas debugowania w konsoli), ale ich nie otrzymuję faktycznie renderowane w polach wejściowych. Nie rozumiem dlaczego :(
I zmniejszona problem do tego ryba:
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>
Mam nadzieję, że chłopaki mogą wyjaśnić mi dlaczego to nie działa i jak to naprawić ...
Tak łatwo. dzwoń $ render i działa. to super. ale naprawdę muszę nadpisać $ render, ponieważ w 1.3.0-rc.3 $ render() wygląda prawie tak samo, ale sprawdza $ isEmpty (ctrl. $ modelValue), a nie $ isEmpty (ctrl. $ viewValue). No iw setViewValue wartość modelValue jest ustawiona tylko wtedy, gdy jest prawidłowa. ale chciałem również, aby niepoprawne pola również zostały zwrócone. Bez nadpisywania renderowania, aby zachowywał się tak jak kiedyś (jak w Twojej odpowiedzi) moje pola są puste. Na razie przesłoniłem metodę renderowania. Zastanawiam się, dlaczego zmienili metodę renderowania. – Allisone