我已经看过How to set a particular field in a form to dirty in angularjs 1.3和Angular.js programmatically setting a form field to 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;
在控制台中提供了 undefined 。
我用过
$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。
答案 0 :(得分:1)
在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
属性不是模型名称。
这是DEMO
答案 1 :(得分:0)
您必须在name
或form
上错过field
属性。您的表单名称应为address
&amp;字段名称应为city
,然后只能访问控制器范围或UI
$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
&amp;在控制器内部,它将是$scope.address.city.$dirty
<强>更新强>
在您的情况下,表单名称address
范围与您的address
冲突,您将覆盖已包含表单对象的address
范围变量。因此,在覆盖它之后,所有表单属性都会被删除。看到我的plunkr,我在那里重现了你正在做的事情。
<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);