【问题标题】:Angularjs : creating dynamic formAngularjs:创建动态表单
【发布时间】:2015-01-25 21:50:41
【问题描述】:

我正在为网站开发好友邀请功能。 唯一的要求是:通过电子邮件发送并且一次有最大数量的邀请。

我的想法如下:

一开始,用户只看到一个电子邮件字段。当他在唯一的字段中输入电子邮件地址时,angularjs 会对其进行验证(电子邮件格式检查)并创建一个额外的电子邮件字段。

现在,我来自 jquery 背景,我认为使用 Angular 操作 DOM 是不好的做法。 用 angularjs 怎么办?

创建一个“生产”(从模板文件)字段的工厂是个好主意吗?

像 bootstrap ui 这样的库能否帮助我编写更简单的代码来进行表单验证和错误管理

【问题讨论】:

    标签: angularjs forms validation angular-ui-bootstrap


    【解决方案1】:

    这个 Plunker 可能会最接近您的需求:http://plnkr.co/edit/5qRXQ1XGzUnhYjLCiyYR?p=preview

    这项技术的关键在于让用户直接编辑模型的动态列表。实际上,在示例中,$scope.invites 包含您的值。这里的技巧是将它们称为模型:

      <input type="email" class="invite" name="invite{{ $index }}" ng-model="invites[$index].mail" ng-change="checkInvite($index)" />
    

    $index 是当前ng-repeat 迭代的索引。 checkInvite 函数将负责观察您的邀请字段的变化。

    注意事项:

    • invites 是一个对象数组,这样我们确保不会与 ng-repeat 混淆,迭代 我们 处理的引用(与将由 angular 处理的模型相比)
    • 字段的名称对于手动检查字段的有效性很有用:在控制器中,我们可以通过访问 $scope.formName.fieldName.$valid 来检查字段的有效性

    我还添加了一个额外的测试来检查用户是否清除了非最后填写的字段。在这种情况下,我们删除了该字段。

    使用 Angular 玩得开心!

    【讨论】:

    • 谢谢,这正是我需要的!
    • 很高兴听到这个消息 ;-)
    【解决方案2】:

    就个人而言,我会发现设计令人困惑,因为我不知道我可以拥有更多的电子邮件地址。至少,我希望+ 向用户表明她/他可以添加更多地址。想想航空公司如何在其网站上进行“多个目的地”搜索。

    但是,如果您设置于此,请在范围内使用数组。我为此使用了一张桌子,但任何事情都可以。

    <input ng-model="newemailaddress"></input><button ng-click="addEmail">Add</button>
    <table>
      <tr ng-repeat="addr in addresses"><td>{{addr}}</td></tr>
    </table>
    

    你的控制器是这样的:

    .controller('MyCtrl',function($scope) {
      $scope.addresses = [];;
      $scope.newemailaddress = "";
      $scope.addEmail = function() {
        // do validation
        if (valid) {
          $scope.addresses.push($scope.newemailaddress);
          $scope.newemailaddress = "";
        };
      };
    })
    

    【讨论】:

    • 我要补充一点,如果您在 input 元素上设置 type="email",您将获得电子邮件地址的默认验证。
    • deitch :谢谢你的帮助。我仍然想知道一种用 angularJS“创建”输入字段的干净方法。我想了想,仍然不知道我应该如何设计这个,“+”按钮是最用户友好的解决方案吗? Timothy Walters:是的,这绝对是一个好的开始,但我想知道这个验证是否足够:据我所知,它不会检查您的电子邮件末尾是否有“.*”
    • 在 Angular 中创建模板的最简洁方式是......作为模板。然后让他们重复或显示或基于范围字段的任何内容。至于用户会看到什么,这是一个 UI 设计问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-08
    • 1970-01-01
    • 2016-04-08
    • 1970-01-01
    • 2017-01-31
    相关资源
    最近更新 更多