无法将表单字段设置为脏

时间:2017-09-24 02:20:48

标签: angularjs forms validation angular1.6

我已经找到了答案并且发现了几个帖子,但是没有一个帖子适合我。

我想做一些简单的事情。我有一个不可见的按钮,直到表格变脏。如果我手动弄脏表单,这很好用。但是,我正在保存数据。加载表单时,会填充保存的数据,但是当后端数据以这种方式更新时,表单不会变脏。

所以,我想我只是手动将表单设置为脏。但我收到了#34; undefined"错误。

$scope.myForm = > undefined
$scope.$myForm => undefined
myForm = > returns the form object
myForm.myField = > returns the field
myForm.myField.$dirty => returns undefined
myForm.myField.$setDirty() = > returns "$setDirty is not a function"
this (inside my controller) = > returns and empty object

我使用角1.6.6 我读过: Angular.js programmatically setting a form field to dirty

How to explicitly set a text box in a form to dirty?

How to set a particular field in a form to dirty in angularjs 1.3

我的基本形式:

<div ng-controller="appCtrl">
    <form name="myForm">
        <input name="myField" ng-model="myField" />
        <div ng-click="doSomething()" ng-show="myForm.myField.$dirty">Submit</div>
    </form>
</div>

我添加了一个能够显示我遇到的问题的傻瓜。 https://plnkr.co/edit/ZUWywfOj329g6sviHIZf?p=preview

1 个答案:

答案 0 :(得分:1)

问题是,在执行控制器中的代码时,表单仍未在dom中创建,因此解决方案是在表单被引入时调用数据初始化。

<form name="myForm" ng-init="formInit()">

控制器:

$scope.formInit = function() {
    $timeout(function() {
      $scope.myForm.$setDirty(); 
    })
}

这样可行。

现在我只想说,为什么你用脏来显示提交表格?为什么不用required和myForm进行验证。$ valid?

为什么不使用:

<div ng-controller="appCtrl">
    <form name="myForm">
        <input name="myField" ng-model="myField" />
        <div ng-click="doSomething()" ng-show="myField">Submit</div>
    </form>
</div>