在同一个字段上使用ng-if时如何$ setValidity? (角)

时间:2016-09-16 17:33:04

标签: html angularjs

您好我试图将form.form_field。$ setValidity用于ng-if标记字段, 但是在测试代码时我得到了这个响应,

angular.js:13642 TypeError: Cannot read property '$setValidity' of undefined

我认为这是因为表单字段在我想要$ setValidity时尚未提供(在ng-if刚创建字段时的第一个$ setValidity),有没有人知道如何解决这个问题? 谢谢!

(*此检查的前提条件是正确的 当ng-if条件通过时,是当文本区域已经包含一些输入时,所以你可以在输入内容时将其想象出来并打开/关闭隐藏然后再次显示输入text_area字段,交换机上的ng-click功能将被触发并发生$ setValidity)

HTML代码

    <!-- language: html -->
    <div class="table-switch" ng-click="main.info.switch = !main.info.switch; !main.form.text_area.isEmpty() || main.info.switch || main.validating()">

    <!-- Show this div under ng-if condition -->
    <div ng-if="main.info.switch">
        <!-- Text Area -->
            <textarea name="text_area" ng-model="main.text_area.text" required" ng-change="!main.this_form.text_area.$isEmpty() || main.validating()" ng-model-options="{ updateOn: 'default blur', debounce: { 'default': 800, 'blur': 0 } }">
            </textarea>
    </div>

控制器代码

// This is the function which checks and use $setValidity
$scope.validating = function() {

  $scope.this_form.text_area.$setValidity('validity', false);
  // some API checks then within response/callback set to true if valid

});

我不使用ng-show / hide的原因是因为我不希望这些字段在隐藏时影响我的表单的有效性(我相信ng-show / hide仍然具有这些字段和这些字段的有效性字段仍然影响整个表单的有效性),我确实有很多这些可选的切换字段。

P.S。这是我第一次在这里提问,请在提问时告诉我一些可以改进的事情,谢谢!

1 个答案:

答案 0 :(得分:0)

我找到了解决这个问题的方法,

如果还有其他更好的方法可以告诉我,

我直接在表单上设置了有效性,给出了唯一的名称, 而不是直接在特定字段上设置有效性。

由于表单在我使用字段时始终可用, 自定义有效性也是可见的。

修改后的代码

// This is the function which checks and use $setValidity
$scope.validating = function() {   

  $scope.this_form.$setValidity('text_area', false);
  // some API checks then within response/callback set to true if valid

});