我有一个窗格系统,在我的控制器中包含三种不同的窗体。 现在,据我所知,ng-include创建了一个让父范围无法使用的childscope。
为了解决表单数据,我在ng-submit中运行的函数中传递了ng-model,但这只是单向的。
在正常情况下,我可以这样做:
HTML Form tag example
<form novalidate name="myForm" ng-submit="someFunction(form)">
HTML Form Field example
<input ng-model="form.first_name" name="first_name" type="text" pwtest required/>
Controller
$scope.myForm.first_name.$setValidity('required', false);
这很好用,我的表单数据会返回,我可以在去往我的API的途中发送它,我的字段状态也正确设置。
现在问题..
HTML Form tag example
<form novalidate name="myForm" ng-submit="someFunction(form)">
HTML Form Field example
<input ng-model="form.first_name" name="first_name" type="text" pwtest required/>
Controller
$scope.myForm.first_name.$setValidity('required', false); <-- fails since myForm doesnt exist
这个规范有效但现在我的表格存在于一个儿童范围内,因此 myForm 在我的控制器中变得不确定,因为它当然应该是因为它不存在于范围内。
答案 0 :(得分:4)
根据上面的评论,这是使用子控制器解决问题的一种方法:
<script type="text/ng-template" id="/form.html">
<form novalidate name="myForm" ng-submit="someFn()" ng-controller="ChildFormCtrl">
<input ng-model="form.first_name" name="first_name" type="text" required>
<br>{{myForm.first_name.$valid}}
</form>
</script>
<div ng-controller="MyCtrl">
<div ng-include="'/form.html'"></div>
</div>
function ChildFormCtrl($scope) {
$scope.someFn = function () {
console.log('child', $scope.form);
$scope.myForm.first_name.$setValidity('required', false);
$scope.parentFunction($scope.form);
}
}
function MyCtrl($scope) {
$scope.parentFunction = function (form) {
console.log('parent', form);
}
}