Ответ 1
Свойство $pristine
ввода с директивой ng-model
изменяется только тогда, когда используется его метод ngModelControllers $setViewValue()
, то есть посредством взаимодействия с пользователем на элементе ввода или путем вызова этого метода самостоятельно.
Это связано с тем, что нетронутое состояние используется для отслеживания того, что вы изменили (изменили любые входные элементы ng-model
-enabled) в форме. Это не означает, что значения в входах равны значениям в модели, они всегда обновляются после каждого нажатия клавиши!
Нет автоматического пути к reset форме в нетронутую, вы должны сами решить, когда это сделать, вызывая form.$setPristine()
.
Если вы хотите reset узнать первоначальную информацию в своем примере, вам нужно сообщить форме reset сам, привязывая кнопку к функции в области:
$scope.toggleBool = function() {
$scope.myBool = !$scope.myBool;
$scope.myForm.$setPristine();
}
Если вы хотите иметь отдельный набор значений для формы и для исходного состояния объекта, вы должны клонировать объект, а затем использовать клон в форме. В противном случае все изменения всегда сразу изменяют исходный объект.
Затем вы можете определить состояние формы, выполнив глубокое сравнение исходного объекта с клоном.
ОБНОВЛЕНИЕ май '15. Этот ответ исходит от 2013 года. ngModelController приобрел значительно более богатый API в последних версиях из Angular (в настоящее время 1.4), который предлагает некоторые механизмы для управления состоянием формы.