ngModel с массивами

Я пытаюсь организовать свои (определенные в другом месте) переменные в массив, но это нарушает двустороннюю привязку. Я не понимаю, почему я могу привязываться к переменной напрямую, но не косвенно. Я думаю, это какая-то глупая ошибка. Пример здесь(jsfiddle) или ниже:

HTML:

<div ng-controller="MyCtrl">
<input ng-model="test1"></input>
<input ng-model="test2[0]"></input>
<p>{{test1}}</p>
</div>

Javascript:

var myApp = angular.module('myApp',[]);
function MyCtrl($scope) {
    $scope.test1 = 'text goes here';
    $scope.test2 = [$scope.test1];
}

Как видите, первый ввод привязан к переменной и корректно ее обновляет, а второй принимает начальное значение, но не привязывается.


person F43nd1r    schedule 10.07.2015    source источник


Ответы (1)


Это работает на самом деле. См. https://jsfiddle.net/ryekxkpL/2/.

$scope.test2[0] является копией $scope.test1, поэтому это то же самое, как если бы у вас было $scope.test2 = ['text goes here'];. Его изменение не повлияет на $scope.test1.

person kiswa    schedule 10.07.2015
comment
Спасибо. Я правильно понял: привязка работает, но привязывается к копии? Как предотвратить привязку к копии? - person F43nd1r; 10.07.2015
comment
Так работает JS. Если вы помещаете переменную в массив, вы сохраняете ее значение, а не переменную. См. stackoverflow.com/questions/5865094/ - person kiswa; 10.07.2015
comment
Я принял ответ, потому что он технически правильный, хотя саму проблему не решает. Я собираюсь попытаться обернуть эти примитивные переменные в объект, чтобы я мог скопировать ссылку на объект в массив. Изменить - это работает. Однако для этого требуется немного больше кода. jsfiddle.net/h8xstepp - person F43nd1r; 10.07.2015
comment
Спасибо, и извините за это. Но эй, технически правильно всегда хорошо! ;) - person kiswa; 10.07.2015
comment
@F43nd1r Попробуйте stackoverflow.com/questions/1686990/ - person Moby Disk; 10.07.2015
comment
@Moby Disk, вот что я сделал. - person F43nd1r; 10.07.2015