控制器中的Angularjs形式始终未定义

时间:2015-09-28 23:48:34

标签: javascript angularjs forms

在我的项目中,我使用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中的控制器中获取表单状态?感谢

2 个答案:

答案 0 :(得分:1)

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

尝试:

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

答案 1 :(得分:1)

听起来您的表单嵌套在子范围内,例如ng-includeng-if内部,因为表单对象不存在于父范围内,父母赢了&#39 ;当角度在孩子身上创造它时,看到它。

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

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