Ответ 1
Хорошо, так что это было интересно. Я выкопал в неиспользуемый исходный код AngularJS для директива ngList.
Кажется, что в первом примере не запускается функция форматирования, которая является функцией, которая разделяет значения массива в строку, разделенную запятыми, которая отображается в поле ввода.
Дальнейшее исследование показывает, что ошибка лежит в директиве ngModel . Formatters вызывается только в том случае, если значение строго не равно предыдущему значению, но поскольку это один и тот же экземпляр массива в вашем первом примере, этот оператор оценивается как false, и, следовательно, текстовое поле не обновляется. См. исходный код.
$scope.$watch(function ngModelWatch() {
var value = ngModelGet($scope);
// $modelValue and value is the same array instance in your first example
if (ctrl.$modelValue !== value) {
// ...
}
});
В вашем втором примере вы каждый раз создаете новый экземпляр массива и, следовательно, выполняете форматирование.