Привязка повторяемого подмножества формы к модели

В регистрационной форме я разрешаю пользователю вводить ноль или более телефонных номеров. Каждый номер телефона состоит из префикса и номера, это два поля на номер телефона. Пользователь может решить, сколько номеров он хочет предоставить, add more numbers ссылка будет клонировать эту часть формы.

Prefix: [_______]
Number: [_______]
+ add more numbers

Модель, к которой я привязываюсь, исправлена ​​и должна иметь следующий формат:

$scope.model = {
    "...main inputs": "username, etc...",
    phoneNumbers: [
        // for each phone number I expect this object
        { "prefix": "+1", "number": "123123123" }
    ]
};

Я не уверен, как мне настроить ng-model для этих текстовых входов, чтобы эти объекты генерировались в массиве.

Кроме того, я большой поклонник связывания ссылок и ограничения таких вещей, как наблюдение за областью действия и изменения в области действия на основе событий, так как часто эти изменения остаются незамеченными для других директив, которые могут использовать это значение (если их не наблюдать). По сути, это означает, что я намерен динамически генерировать объекты в массиве, когда форма заполняется числами, или динамически удалять объекты в массиве, когда удаляются числа или оба входа оставлены пустыми.

Массив должен содержать только действительные и заполненные объекты, частично заполненные объекты или пустые объекты не должны добавляться в модель или массив (как обычно это делается со свойствами с недопустимыми значениями - эти свойства удаляются из объекта модели). В основном это толчок к массиву с каждым проверенным объектом и удаление (фрагмент) объектов для каждого недействительного объекта. Но тогда довольно автоматически, вместо написания функции push/slice.

2 ответа

Используйте следующий код.....

<!DOCTYPE html>
<html>

<head>
<script src= "http://ajax.googleapis.com/ajax/libs/angularjs/1.2.26/angular.min.js"></script>
</head>

<body ng-app ng-controller="todoCtrl">

                <form name="form" ng-submit="addmore()">
                    <div class="form-group">
                        <label for="inputFirstName">Prefix</label>
                        <input class="form-control" type="text" ng-model="phone_prefix"/>
                    </div>
                    <div class="form-group">
                        <label for="inputLastName">Phone number</label>
                        <input class="form-control" type="text" ng-model="phone_Number"/>
                    </div>  

                    <div class="form-group">
                            <input type="submit" class="btn btn-primary" value="Add more number"/>
                    </div>                  
                </form>   

                <div ng-repeat="phone in phoneNumberArray">
                     {{ phone.prefix + " "+ phone.phoneNumber}}
                </div>  


<script>

function todoCtrl($scope) {
debugger;
    $scope.phoneNumberArray = [
    {prefix: '14', phoneNumber:'123'}
    ];

    $scope.addmore = function () {
        $scope.phoneNumberArray.push(
        {prefix: $scope.phone_prefix, phoneNumber: $scope.phone_Number}
        );
    }
    }
</script>

</body>
</html>

Привет, попробуйте этот код:

Html:

 <form name="form">
                 <div data-ng-repeat="phone in phoneNumberArray">
                    <div class="form-group">
                        <label for="inputFirstName">Prefix</label>
                        <input id="prefix" class="form-control" type="text" ng-model="phone.prefix">
                    </div>
                    <div class="form-group">
                        <label for="inputLastName">Phone number</label>
                        <input id="phoneNumber" class="form-control" type="text" ng-model="phone.phoneNumber">
                    </div>   
                     </div>                                          
                </form>    
             <div class="form-group">
                        <input type="submit" class="btn btn-primary" value="Add more number" data-ng-click="addmore()"/>
              </div>   

контроллер:

    $scope.phoneNumberArray = [
    {
        prefix: "",
        phoneNumber:"",
    }];

    $scope.addmore = function () {
        $scope.phoneNumberArray.push({
            prefix: "",
            phoneNumber: "",
        });
    }

Привет проверить это демо в Fiddle

Другие вопросы по тегам