【问题标题】:Angularjs form in controller always undefined控制器中的Angularjs表单始终未定义
【发布时间】:2015-12-26 07:36:10
【问题描述】:

在我的项目中,我使用 ui-view 并具有以下结构(删除了不必要的代码):

<main class="content">
    <div class="inner" ng-controller="OrderPageController">
        <div ui-view="main-info"></div>
        <div ui-view="comments"></div>
        <div ui-view="bids-list"></div>
        <div ui-view="add-bid"></div>
    </div>
</main>

在加价视图中:

<form name="newbidform" novalidate ng-submit="postNewBid(newbidform);">
   <input type="text" ng-model="newbid.bid" required>
   <input type="submit">
</form>

所以,然后我提交表单,我尝试检查所有必需的输入是否有效:

$scope.postNewBid = function(form) {

console.log(form) // $valid and $invalid always undefined
console.log($scope.newbidform) // always undefined

        // check validity before send
        if (!form.$valid) {
            angular.forEach(form.$error, function (field) {
                angular.forEach(field, function(errorField){
                    errorField.$setTouched();
                })
            });
            $scope.failedSubmit = true;
            return false;
        } else {
            $scope.failedSubmit = false;
        } 
// other things if form is valid

所以,表单总是未定义的问题(根本或 $valid/$invalid attr)。我尝试使用 formName 作为函数中的参数,作为 $scope.formName 变量(始终未定义),并在第二次在表单上定义控制器两次:

<form name="newbidform" novalidate ng-submit="postNewBid();" ng-controller="OrderPageController">

实际上,它可以工作,但是当我尝试访问控制器中的其他变量时 - 我不能。那么,有没有办法在 AngularJs 的控制器中获取表单状态?谢谢

【问题讨论】:

  • 如果您可以创建一个工作的 plunker,帮助您会容易得多。谢谢。
  • plunker 是如何帮助你的,请告诉我 :) 我也有同样的情况,有时 $valid/$invalid 是可以的,有时它是未定义的。我不知道这种情况何时发生。

标签: javascript angularjs forms


【解决方案1】:

newbid 是你想要得到的变量,对吧?

试试:

<form name="newbidform" novalidate ng-submit="postNewBid(newbid);">

【讨论】:

  • newbidform 是表单的名称和 postNewBid() 函数的参数,是的,我尝试获取表单 $valid/$invalid 状态
【解决方案2】:

听起来您的表单嵌套在子范围内,例如在 ng-includeng-if 内,在这种情况下,由于表单对象不存在于父范围内,因此当 Angular 创建它时,父级不会看到它在孩子身上。

您可以通过简单地在父控制器中创建一个空对象来修复它,并且该对象将被子范围继承。由于对象现在存在,因此不需要创建新对象,所有属性都将添加到子范围内的引用中。

$scope.newbidform ={};
$scope.postNewBid = function(form) {...

【讨论】:

  • 我已经尝试过,但没有成功。我在这个视图中只有一个控制器(OrderpageController),所以我定义了 $scope.newbidform ={}; ,但在提交时我得到了相同的结果 - 函数中的表单未定义 $valid/$invalid, $scope.newbidfrom stay {}
  • 复制这个的演示会有所帮助
  • 真的很奇怪,但是在函数中的plunker参数工作正常-plnkr.co/edit/byV32EEXTugHRp5vDvuE?p=preview
  • 如果无法复制,很难提供帮助。这是查看&lt;pre&gt;{{newbidform|json}}&lt;/pre&gt; 中的有用技巧 .. 出现问题时可以看到表单对象
  • 感谢您的帮助,plunker 帮助我理解了问题:) 问题出在我的自定义指令中,即在输入时协调两个值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-03
  • 2014-11-25
  • 2014-12-18
  • 1970-01-01
  • 2015-03-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多