2015-07-10 2 views
1

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

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]; 
} 

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

ответ

1

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

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

+0

Спасибо. Я правильно понял: привязка работает, но привязывается к копии? Как я могу предотвратить привязку к копии? – F43nd1r

+1

Так работает JS. Если вы поместите переменную в массив, вы сохраните ее значение, а не переменную. См. Http://stackoverflow.com/questions/5865094/how-can-i-store-reference-to-a-variable-within-an-array#answer-5865121 – kiswa

+0

Я принял ответ, потому что это технически правильно, хотя он сам не решает проблему. Я попытаюсь обернуть эти примитивные переменные в объект, поэтому я могу скопировать ссылку на объект в массив. Изменить - это работает. Это требует еще немного кода. https://jsfiddle.net/h8xstepp/ – F43nd1r