Возьмите следующую скрипку:
Теперь в этом коде вы увидите следующую строку:
newList.forEach(function(y){
activeUsers.push(y);
});
Это прекрасно работает. однако измените код на:
activeUsers = newList;
И код больше не работает.
Может ли кто-нибудь сказать мне, почему это происходит и как я могу это исправить, так что двусторонняя привязка работает?
Это не работает, потому что вы меняете ссылку. Ваши старые $scope.activeUsers
все еще указывают на тот же старый пустой массив.
После того, как вы измените ссылку, вам нужно будет вернуть новую информацию с завода. Поэтому изменение ссылки приведет к возникновению проблем.
Если вы берете ссылку с завода, как и вы, то вам придется продолжать работать над тем же массивом, если вы хотите, чтобы все привязки работали так, как вы ожидаете.
$scope.activeUsers = testFactory.getActiveUsers();
Вы присваиваете массив ref $ scope.activeUsers. поэтому, если вы нажмете какой-то элемент на активные пользователи, переменные scope.activeUsers также изменятся.
activeUsers = newList;
Затем, если вы сделаете это, activeUsers укажут на другой массив ref, поэтому в это время $ scope.activeUsers не является таким же, как activeUsers.