html - 如何隔离嵌套形式?

标签 html angularjs

我是 AngularJS 的新手,也是客户端编程的新手。

上下文:

我正在实现一个支持多个电话号码和地址的联系表单。

看起来像这样:

<form name="contactInsertForm" ng-controller="contactInsertController as contactCtrlr" ng-submit="contactInsertForm.$valid && contactCtrlr.save()">
    <input type="text" name="name" />
    <phones-editor></phones-editor>
    <addresses-editor></addresses-editor>
    <input type="submit" />
</form>

phonesEditoraddressesEditor 是自定义的 Angular 指令,它们实现了对添加、删除和编辑电话和地址的支持。 Controller 和模块如下所示:

地址:

(function () {
    var app = angular.module("AddressesEditorModule", []);
    app.directive("addressesEditor", function () {
        return {
            restrict: "E",
            templateUrl: "/addressesEditorTemplate.html",
            controller: function ($scope) {
                this.addresses = [
                    // this will hold addresses.
                ];

                // ...
            }
        }
})();

电话:

(function () {
    var app = angular.module("PhonesEditorModule", []);
    app.directive("phonesEditor", function () {
        return {
            restrict: "E",
            templateUrl: "/phonesEditorTemplate.html",
            controller: function ($scope) {
                this.phones = [
                    // this will hold phones.
                ];

                // ...
            }
        }
})();

和模板:

地址:

<!-- list already added addresses -->
<div ng-repeat="address in addressesEditorCtrlr.addresses">
    <p>{{address.address}}</p>
    <p>{{address.city}}</p>
</div>
<form name="addressInsertForm" ng-submit="addressInsertForm.$valid && addressesEditorCtrlr.add()">
    <!-- inputs for each of the address fields -->
    <input type="submit" value="Add" />
</form>

电话:

<!-- list already added phones -->
<div ng-repeat="phone in phonesEditorCtrlr.addresses">
    <p>{{phone.number}}</p>
    <p>{{phone.areaCode}}</p>
</div>
<form name="phoneInsertForm" ng-submit="phoneInsertForm.$valid && phonesEditorCtrlr.add()">
    <!-- inputs for each of the phone fields -->
    <input type="submit" value="Add" />
</form>

您可能已经注意到,在浏览器中生成的 HTML 如下所示:

<form>
    <input type="text" name="name" />
    <phones-editor>
        <!-- list already added phones -->
        <div ng-repeat="phone in phonesEditorCtrlr.addresses">
            <p>{{phone.number}}</p>
            <p>{{phone.areaCode}}</p>
        </div>
        <form name="phoneInsertForm" ng-submit="phoneInsertForm.$valid && phonesEditorCtrlr.add()">
            <!-- inputs for each of the phone fields -->
            <input type="submit" value="Add" />
        </form>
    </phones-editor>
    <addresses-editor>
        <!-- list already added addresses -->
        <div ng-repeat="address in addressesEditorCtrlr.addresses">
            <p>{{address.address}}</p>
            <p>{{address.city}}</p>
        </div>
        <form name="addressInsertForm" ng-submit="addressInsertForm.$valid && addressesEditorCtrlr.add()">
            <!-- inputs for each of the address fields -->
            <input type="submit" value="Add" />
        </form>
    </addresses-editor>
</form>

问题:

我在一个 form 中有两个 form。嵌套表单可以正常工作,添加和验证它应该做的值,并拒绝添加无效的电话/地址。

但是当我点击外部表单的 submit 按钮时,它会解释内部表单的输入字段,如果这些字段的值无效,则会引发错误。

如何使用 AngularJS 表单处理并避免这种情况?这可能吗?

最佳答案

如果您希望子窗体作为隔离窗体,则需要一个指令。查看来自 this SO question 的答案.请查看 this answer 中附带的 fiddle .我把 fiddle 链接放在这里给你 js-fiddle看看它的实际效果。

把代码放在下面只是因为 SO 不只接受 fiddle 链接...

<form name="parent">
    <input type="text" ng-model="outside"/>
    <ng-form name="subform" isolate-form>
        <input type="text" ng-model="inside"/>
    </ng-form>
</form>

关于html - 如何隔离嵌套形式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25388437/

相关文章:

HTML/CSS 布局问题

jQuery 对元素进行动画处理,同时对包含在其中的元素进行动画处理

javascript - 如何使用jquery中的选择框将页面内容加载到div?

AngularJS:如何在表达式中显示单引号

angularjs - Angular.JS 中的指令是什么

html - 渐进式 Web 应用程序 - 未检测到 list

javascript - 从在 JSFiddle 上工作的数组填充下拉列表,但在本地计算机上不起作用?

javascript - 如何在 AngularJS 指令中调用 Controller 函数

javascript - UI 路由器的模拟别名状态

angularjs - 如何不一起显示 Angular 用户界面日期选择器下拉列表