Как создать массив с помощью AngularJS ng-model - программирование
Подтвердить что ты не робот

Как создать массив с помощью AngularJS ng-model

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

<input type="text" ng-model="telephone[0]" />
<input type="text" ng-model="telephone[1]" />

Но я не могу получить доступ к $scope.telephone

4b9b3361

Ответ 1

Первое, что нужно первыми. Вам нужно определить $scope.telephone как массив в вашем контроллере, прежде чем вы сможете начать использовать его в своем представлении.

$scope.telephone = [];

Чтобы решить проблему, когда ng-модель не распознается при добавлении нового ввода, для этого вам необходимо использовать службу $compile Angular.

Из справочника Angular.js API для компиляции:

Компилирует HTML-строку или DOM в шаблон и создает функцию шаблона, которая затем может использоваться для связывания области и шаблона вместе.

// I'm using Angular syntax. Using jQuery will have the same effect
// Create input element
var input = angular.element('<div><input type="text" ng-model="telephone[' + $scope.inputCounter + ']"></div>');
// Compile the HTML and assign to scope
var compile = $compile(input)($scope);

Посмотрите JSFiddle

Ответ 2

Он отлично работает для меня: http://jsfiddle.net/qwertynl/htb9h/

Мой javascript:

var app = angular.module("myApp", [])
app.controller("MyCtrl", ['$scope', function($scope) {
    $scope.telephone = []; // << remember to set this
}]);

Ответ 3

Вы можете делать множество вещей. Я бы это сделал.

Создайте массив в области, который будет вашей структурой данных для телефонных номеров.

$scope.telephone = '';
$scope.numbers = [];

Тогда в вашем html я бы это сделал

<input type="text" ng-model="telephone">
<button ng-click="submitNumber()">Submit</button>

Затем, когда ваш пользователь нажимает кнопку отправки, запустите submitNumber(), который подталкивает новый номер телефона в массив чисел.

$scope.submitNumber = function(){
  $scope.numbers.push($scope.telephone);
}

Ответ 4

Один из способов - преобразовать ваш массив в объект и использовать его в области видимости (симуляция массива). Этот способ имеет преимущество сохранения шаблона.

$scope.telephone = {};
for (var i = 0, l = $scope.phones.length; i < l; i++) {
  $scope.telephone[i.toString()] = $scope.phone[i];
}

<input type="text" ng-model="telephone[0.toString()]" />
<input type="text" ng-model="telephone[1.toString()]" />

и сохранить, измените его.

$scope.phones = [];
for (var i in $scope.telephone) {
  $scope.phones[parseInt(i)] = $scope.telephone[i];
}

Ответ 5

Это должно работать.

app = angular.module('plunker', [])

app.controller 'MainCtrl', ($scope) ->
  $scope.users = ['bob', 'sean', 'rocky', 'john']
  $scope.test = ->
    console.log $scope.users

HTML:

<input ng-repeat="user in users" ng-model="user" type="text"/>
<input type="button" value="test" ng-click="test()" />

Пример plunk here