单击角度js中的按钮添加新文本框

时间:2015-06-14 10:58:20

标签: angularjs angularjs-ng-repeat angularjs-controller

如何在按下提交按钮时添加新文本框。这是我尝试过的,我知道有些事情是错的。我仍然是棱角分明的新人。

示例:

<!doctype html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Example - example-ngController-production</title>
        <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.4.0/angular.min.js"></script>
        <script>
            angular.module('controllerAsExample', []).controller('SettingsController1', function ($scope) {

                $scope.contacts=[]
                $scope.addContact = function()
                {
                  $scope.contact.push({$scope.contact})
                }
            });
            };
        </script>
    </head>
    <body ng-app="controllerAsExample">
        <div id="ctrl-as-exmpl" ng-controller="SettingsController1">

            <ul>
                <li ng-repeat="contact in contacts">
                    <input type="text" ng-model="contact" />
                </li>
                <li><button ng-submit="addContact()">add</button></li>
            </ul>
        </div>
    </body>
</html>

2 个答案:

答案 0 :(得分:2)

您应该将ng-submit替换为可解决问题的ng-click 因此,您需要更改对象结构以保留值,例如您需要在联系人对象中添加联系人号码,例如contact.number

<强>标记

<ul>
    <li ng-repeat="contact in contacts">
      <input type="text" ng-model="contact.number" />
    </li>
    <li>
      <button type="button" ng-click="addContact()">add</button>
    </li>
</ul>

<强>代码

angular.module('controllerAsExample', [])
.controller('SettingsController1', function($scope) {
  $scope.contacts = []
  $scope.addContact = function() {
    $scope.contacts.push({
    })
  }
});

Demo Plunkr

答案 1 :(得分:1)

在你的代码中,你正在做: -

        $scope.addContact = function()
        {
          $scope.contact.push({$scope.contact})
        }

这就是问题所在。如果您只需要添加一个空文本框,则只需要向联系人添加一个空联系人,ng-repeat将负责在列表中添加新文本框。另一件事是你正在接触,而不是接触。

此外,ngSubmit用于表单中,您没有。因此,请改用ng-click。这是一个显示代码工作的plunker

            $scope.addContact = function()
            {
              $scope.contacts.push({ name: '' });
            }