Ответ 1
Проблема заключается в том, что Angular NgRepeat
останавливается, если он повторяет один и тот же объект более одного раза. Я создал jsFiddle, чтобы продемонстрировать.
В первом разделе вы можете добавить строки в массив. Первая кнопка всегда добавляет один и тот же строковый объект, а второй создает новый строковый объект каждый раз. Обратите внимание, что как только вы дважды щелкаете по первой кнопке, не важно, что вы добавляете в список.
Во втором разделе мы всегда добавляем новый объект, хотя все эти объекты содержат ссылку на тот же строковый объект. Это работает так, как вы ожидали.
Итак, чтобы сделать это явным ответом, убедитесь, что вещи, которые вы добавляете в свой список, являются отдельными объектами и используют литералы объектов для принудительного применения, если это необходимо. Я бы предпочел Array#push
над Array#concat
, потому что последний каждый раз создает новый объект массива, и если у вас много предметов, это будет много оттока и много мусора.
HTML:
<div ng-controller="Controller1">
<button ng-click="addLine()">Add Line</button>
<button ng-click="addNumber()">Add Number</button>
<button ng-click="reset()">Reset</button>
<div>{{lines}}</div>
<div ng-repeat="line in lines">
{{line}}
</div>
</div>
<hr />
<div ng-controller="Controller2">
<button ng-click="addObject()">Add Object</button>
<button ng-click="reset()">Reset</button>
<div>{{objects}}</div>
<div ng-repeat="obj in objects">
{{obj.data}}
</div>
</div>
JavaScript:
(function () {
var myApp = angular.module('myApp', []);
myApp.controller('Controller1', function ($scope) {
$scope.lines = [];
$scope.addLine = function () {
$scope.lines.push('Hello world!');
};
$scope.addNumber = function () {
$scope.lines.push('Line ' + $scope.lines.length);
};
$scope.reset = function () {
$scope.lines = [];
};
});
myApp.controller('Controller2', function ($scope) {
$scope.objects = [];
$scope.addObject = function () {
var obj = { data: 'Hello world!' };
$scope.objects.push(obj);
};
$scope.reset = function () {
$scope.objects = [];
};
});
})();