我正在编写一个拥有表单的应用程序,我必须发布表单的内容。为此,我编写了以下简短函数:
$scope.record = function (data_form, validation_control, validate) {
var data = {};
data_form.$getControls().forEach(function (control) {
if (control.$valid) {
data[control.$name] = control.$modelValue;
control.$processModelValue(); // For normalization
}
});
server_post(data).then(
/* … */
);
};
该表单包括一些“标准”输入,还包括一些特殊的伪指令,它们带有ng-model
和name
,它们的行为类似于复杂的输入。
不幸的是,这些指令在其模板中包含一些“标准”输入。然后,这些内部输入的值就会显示在我的data
对象中。
我以为我可以将这些内部输入包装成record
函数应该忽略的子形式。但是子窗体仍会在扫描过程中显示。而且,子表单的有效性会影响父表单的有效性。
有没有办法打破子窗体和父窗体之间的链接?
作为替代方案,在扫描期间识别控件实际上是子窗体的一种干净方法是什么?
我尝试过:
if (control.$valid && !(control instanceof data_form.constructor)) {
/* … */
}
,但是它失败了,因为显然data_form.constructor
是Object()
,因此所有控件都将被忽略。据我所知,FormController
函数是AngularJS的内部功能。
还是有其他方法可以使我的“内部”输入隐藏在表单中?