我有一个在我的应用程序中的多个视图之间共享的子窗体。在一个视图中,该子窗体单独显示,底部有一个back/continue按钮,它将用户引导到下一个子窗体。在另一个视图中,子窗体显示在与其他子窗体相同的页面上(基本上是一个长窗体)。
由于子表单的html在两个视图中都是100%相同的,所以我将其分成一个部分,并使用ng-include
来呈现它。在仅显示带有back/continue按钮的子窗体的视图中,我在父HTML中呈现了back/continue按钮。
从视觉上看,一切正常,我能够访问表单(user.email, user.password, user.etc...
)中输入的所有数据。
问题是,我根据用户是否正确完成了表单来启用/禁用"continue“按钮,这在”仅限子窗体“变体中不起作用,因为父作用域似乎无法访问表单的状态。如果我把按钮放在partial中,它会起作用,但我不想那样做,因为在使用这个partial的每个实例中,这些按钮并不属于那里。
请注意,在我的示例中,红色边框中的submit按钮是禁用的,直到在框中键入内容并显示“表单无效?”值更新,而蓝色边框内的按钮始终处于启用状态,并显示“表单无效?”值为空。
如何从父作用域访问myForm.$invalid
的值?
发布于 2013-04-09 09:16:56
如果是子窗体,只需将form-tag从子窗体移到main-form中:updated JSFiddle
您还可以使用ngForm-directive嵌套表单
angular表单中的
可以嵌套。这意味着当所有子窗体都有效时,外部窗体也是有效的。然而,浏览器不允许嵌套元素,因此angular提供了ngForm别名,它的行为与相同,但允许表单嵌套。
结果是有点混乱的imo。我宁愿创建一个具有新作用域的‘myForm’-指令,以避免使用$parent -类似于:
myApp.directive('myForm',function(){
return{
restrict:'E',
scope:{model:'='},
templateUrl:'/form.html',
replace:true
}
});
查看此JSFiddle example的
发布于 2014-05-16 17:32:43
使用ng-include时创建的子作用域对父对象隐藏了表单函数。
除了使用指令之外,您还可以在父级中添加对象,但将表单的名称设置为具有如下属性的对象是很重要的:
<form name="myFormHolder.myForm">
并且在父控制器中
$scope.myFormHolder = {};
那么下面的方法应该是可行的:
$scope.myFormHolder.myForm.$pristine
这样,当计算表单时,myForm.$valid将在父级上设置。我想我问了同样的问题:Why form undefined inside ng-include when checking $pristine or $setDirty()?
https://stackoverflow.com/questions/15818431
复制