Ошибка двусторонней привязки службы angularjs

0

Возьмите следующую скрипку:

играть на скрипке

Теперь в этом коде вы увидите следующую строку:

 newList.forEach(function(y){
      activeUsers.push(y);
    });

Это прекрасно работает. однако измените код на:

activeUsers = newList;

И код больше не работает.

Может ли кто-нибудь сказать мне, почему это происходит и как я могу это исправить, так что двусторонняя привязка работает?

  • 0
    Есть ли какая-то особая причина, по которой эта скрипка использует 4-летнюю RC версию Angular?
  • 0
    @FélixSaparelli FélixSaparelli Нет, на самом деле это не шаблон угловой, я его нашел, но я обещаю вам то же самое в текущей версии угловой
Показать ещё 1 комментарий
Теги:

2 ответа

2
Лучший ответ

Это не работает, потому что вы меняете ссылку. Ваши старые $scope.activeUsers все еще указывают на тот же старый пустой массив.

После того, как вы измените ссылку, вам нужно будет вернуть новую информацию с завода. Поэтому изменение ссылки приведет к возникновению проблем.

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

  • 0
    Можете ли вы привести пример того, как я мог бы обновить значение элегантным способом тогда?
  • 0
    @MarcRasmussen Как насчет этого? jsfiddle.net/Ne5P8/2323
Показать ещё 1 комментарий
1
$scope.activeUsers = testFactory.getActiveUsers();

Вы присваиваете массив ref $ scope.activeUsers. поэтому, если вы нажмете какой-то элемент на активные пользователи, переменные scope.activeUsers также изменятся.

activeUsers = newList;

Затем, если вы сделаете это, activeUsers укажут на другой массив ref, поэтому в это время $ scope.activeUsers не является таким же, как activeUsers.

  • 0
    Спасибо за ваш ответ. Знаете ли вы, как я могу правильно создать привязку, чтобы она работала?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню