在我的项目中,我使用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中的控制器中获取表单状态?感谢
答案 0 :(得分:1)
newbid是你想要获得的变量,对吧?
尝试:
<form name="newbidform" novalidate ng-submit="postNewBid(newbid);">
答案 1 :(得分:1)
听起来您的表单嵌套在子范围内,例如ng-include
或ng-if
内部,因为表单对象不存在于父范围内,父母赢了&#39 ;当角度在孩子身上创造它时,看到它。
您可以通过在父控制器中创建一个空对象来修复它,该对象将由子范围继承。由于对象现在存在,因此需要创建一个新对象;需要创建所有属性,并将所有属性添加到子范围内的引用中。
$scope.newbidform ={};
$scope.postNewBid = function(form) {...