Как явно установить текстовое поле в форме для грязного?

Я уже видел такие вопросы, как, Как установить конкретное поле в форме в dirty в angularjs 1.3 и Angular.js, программно устанавливающий поле формы в dirty, но они не работают.

Я автоматически заполняю текстовое поле в angularjs как:

$scope.address.city = "Santa Clara";

$scope.address.city.$dirty = true;

И в HTML у меня есть ng-model="address.city" ng-model-options="{ updateOn: 'change blur' }",

Тем не мение, $scope.address.city.$dirty = true; дает неопределенный в консоли.

я использовал

$http.get("somewebsite.com").success(function(data){ $timeout(function () { $scope.address.city.$dirty = true; }, 0); console.log('$scope.address.city.$dirty',$scope.address.city.$dirty);})

но все равно я получаю ошибку как TypeError: Cannot set property '$dirty' of undefined

Я использую угловой 1.3.1.

2 ответа

В HTML,

<form name="formName">
    <input type="text" name="city" ng-model="address.city" 
    ng-model-options="{ updateOn: 'change blur' }" />
</form>

В контроллере,

$timeout(function () {
    $scope.formName.city.$dirty = true;
}, 0);

Обратите внимание, что name атрибуты используются не названия моделей.

вот ДЕМО

Вы, должно быть, пропустили name атрибут либо form или же field, Ваше имя должно быть address & имя поля должно быть city только тогда вы можете получить доступ $scope.address.city.$dirty в области видимости контроллера или пользовательского интерфейса

наценка

<form name="address">
    <input type="text" name="city" ng-model="address.city" 
    ng-model-options="{ updateOn: 'change blur' }" />
</form>

Это может использовать на HTML как address.city.$dirty и внутри контроллера это будет $scope.address.city.$dirty

Обновить

В вашем случае название формы address сфера противоречит вашему addressВы переопределяете address переменная области видимости, которая уже содержит объект формы. Поэтому после переопределения все свойство формы стирается. Смотри мой планкр, в котором я воспроизвел твой вопрос именно то, что я там делаю.

Плункр с выпуском

<form name="form">
    <input type="text" name="city" ng-model="address.city" 
    ng-model-options="{ updateOn: 'change blur' }" />
</form>

контроллер

$timeout(function () {
    $scope.form.city.$dirty = true;
}, 0);

Исправлен планкр.

Другие вопросы по тегам