На моей странице у меня есть динамический список музыкантов (игроков), в то время как игрок может быть удален и добавлен в список. Каждый игрок должен иметь несколько инструментов, которые также являются динамическим списком, тогда как инструмент может быть добавлен или удален из списка инструментов игрока. Итак, мы говорим о двух вложенных динамических списках.Добавить новый вход в динамический вложенный список в AngularJS
Вот код и описание проблемы внизу.
jamorg.html:
<!DOCTYPE html>
<html ng-app='jamorgApp'>
<head>
<link rel="stylesheet" type="text/css" href="C:\Users\jazzblue\Documents\Bootstrap\bootstrap-3.3.2-dist\css\bootstrap.min.css" />
<title>Jam Organizer</title>
</head>
<body>
<div ng-controller='JamOrgController as jamOrg'>
<h1>Jam</h1>
<div ng-repeat='player in players'>
<div>
<h3 style="display: inline-block;">player {{$index}}</h3>
<button ng-click="removePlayer($index)">Remove</button>
</div>
<br/>
<div ng-controller='JamOrgPlayerController as jamOrgPlayer'>
<div ng-repeat='instrument in player'>
<span>Instrument: {{instrument.instrument}},</span>
<span>Level: {{instrument.level}}</span>
<button ng-click="remove($index)">Remove</button>
</div>
<button ng-click="addInstrument()">Add Instrument</button>
Instrument: <input ng-model='newInstrument.instrument'>
Level: <input ng-model='newPlayer.level'>
</div>
</div>
</div>
<script type="text/javascript" src="C:\Users\jazzblue\Documents\AngularJS\angular.min.js"></script>
<script type="text/javascript" src="jamorgApp.js"></script>
</body>
</html>
jamorgApp.js
var app = angular.module('jamorgApp', []);
app.controller('JamOrgController', ['$scope', function($scope){
$scope.players = players;
$scope.removePlayer = function(index) {
$scope.players.splice(index, 1);
}
}]);
app.controller('JamOrgPlayerController', ['$scope', function($scope){
$scope.newInstrument = newInstrument;
$scope.remove = function(index) {
$scope.player.splice(index, 1);
}
$scope.addInstrument = function() {
$scope.player.push(newInstrument);
}
}]);
var players = [
[{instrument: 'Guitar', level: 3}, {instrument: 'Keyboard', level: 3}],
[{instrument: 'Bass', level: 4}],
[{instrument: 'Drums', level: 3}]
];
var newInstrument = [
{instrument: 'x', level: 'y'}
]
Вот моя проблема: та же newInstrument добавляется ко всем различным спискам игроков, которые не так: у каждого игрока список инструментов должен иметь свой собственный newInstrument.
Как мне изменить его, чтобы получить правильный дизайн? Спасибо!
Спасибо, но это не появляется на работе. Как и в исходном коде, все, что вводится (в браузере), как новый инструмент для игрока 1, автоматически реплицируется на всех других игроков, что означает, что я скопировал объект, но эта копия попала ко всем игрокам. – jazzblue
Хмм, теперь я снова вижу ваш код. Что такое '$ scope.player'? Потому что я вижу '$ scope.players', но не' $ scope.player'. Проверьте мой обновленный ответ, чтобы узнать, работает ли он. – Mindastic
Я думаю, что вы нашли ошибку с $ scope.player, я даю вам точку для вашего комментария, однако решение, которое вы предлагаете, по-прежнему не работает для меня. Я думаю, проблема в том, что одна и та же копия newInstrument переносится на разных игроков. Мне нужен, однако, отдельный экземпляр для каждого игрока или что-то в этом роде. Вы пробовали свое предложение? Благодарю. – jazzblue