TypeError:无法读取属性' $ dirty'未定义的

时间:2017-06-19 17:54:35

标签: javascript angularjs angularjs-validation angularjs-forms

我有一个名为p24Form

的角形表单
<div ng-form="private2" name="p24Form" ng-show="freqSelect == '2.4'" novalidate="" class="ng-pristine ng-valid">
    <div class="form-group">
        <label class="col-sm-2 control-label">
            <span class="edit" data-pk="private_2">WiFi name</span>:
        </label>
        <div class="col-sm-4">
            <input type="text" class="form-control ng-pristine ng-untouched ng-valid" name="freq2_name" ng-model="ssid">
            <!-- tooltips:  -->
        </div>
    </div>
</div>

我正在尝试检测它是否脏或更改,然后相应地显示我的保存按钮。 我试过了

尝试#1

if ($scope.p24Form.$dirty) {
    alert('dirty');
    $scope.showSaveBtn = true;
}else{
    $scope.showSaveBtn = false;
}

尝试#2

if ($scope.private2.$dirty) {
    alert('dirty');
    $scope.showSaveBtn = true;
}else{
    $scope.showSaveBtn = false;
}

我一直

  

TypeError:无法读取属性&#39; $ dirty&#39;未定义的

问题

如何继续进行调试?

我现在可以接受任何建议。

任何提示/建议/帮助都将非常感谢!

1 个答案:

答案 0 :(得分:1)

您需要访问表单的输入以检查表单是否脏。例如:

$scope.myForm.inputName.$dirty

正如您所指出的,您应该使用表单的name属性来访问它。

此外,您正在访问myForm对象,它只是表单对象,在DOM被渲染之前我不可用,$ scope.myForm在控制器启动时将根本未定义,如果您真的想要访问来自控制器的$ scope.myForm然后你需要将该代码放在$ timeout中,这将在下一个摘要周期中运行$ timeout函数代码。

$timeout(function(){
    $scope.isDirty = $scope.myForm.$dirty;
  });