Скажем, у меня есть список заката, который я динамически добавляю в свой шаблон html:
<button type="button" ng-click="addRow()" style="margin-bottom:5px;">Add cities </button>
<div ng-repeat="city in cities">
<select ng-model="cities_$index"
ng-options="n.id as n.name for n in citiesList"
class="form-control"
ng-required="true">
<option value="">-- Choose City --</option>
</select>
</div>
Угловой контроллер:
$scope.addRow = function () {
var newrow = [];
if ($scope.cities.length === 0) {
newrow.push({ 'cities': $scope.cities_0 });
}
else {
$scope.cities.forEach(function (row, key) {
var city= '$scope.cities_'+key; // in php i can do this
//but i dont know how to do it with Js/Angular
console.log('row' + city);
newrow.push({ 'cities': city});
console.log(newrow);
});
}
$scope.cities.push(newrow);
}
Я попробовал это, чтобы получить значения из выбранных городов, но у меня есть неопределенные значения.
$scope.send = function () {
angular.forEach($scope.cities, function (value, key) {
console.log(value.id); // the id from the ng-options
};
В регулярном html-коде я просто добавляю name="city"
и получаю все города, добавленные в поле ввода. Но как я могу получить thoses города от ng-модели в моем контроллере?
Я знаю, что я делаю что-то неправильно, но так как я новичок с угловой, я пытаюсь!
спасибо
ng-model
по-прежнему уникальна. Здесь вам не хватает того, что ng-repeat
создает дочернюю область для каждого элемента. Следовательно, значение ng-model
уникально для EACH-области. ng-model
не ведет себя так же, как простой ввод HTML и наличие нескольких входов с одной и той же ng-model
будет указывать только на один и тот же объект в памяти. И нет, "добавить" значения в город свойств, как вы ожидали бы в простых вложениях HTML.
Если вы используете datas
объекта в своем ng-repeat
, это обычная практика, что ваш <input/>
будет привязан к свойству элементов datas
.
<div ng-repeat="data in datas">
<input type="text">{{data.city}}
</div>
предположив, что ключ (город) находится внутри массива данных, вы можете сделать:
<div ng-repeat="data in datas">
<input type="text">{{data.name}}
</div>