На мой взгляд, у меня есть куча связанных списков ul
, которые используют директиву jQuery UI: Sortable для облегчения перетаскивания и изменения порядка элементов списка.
Изменения, которые я делаю с помощью перетаскивания пользовательского интерфейса jQuery, я применяю к $scope
с помощью функции $apply
, эта часть работает…
Проблема, с которой я сталкиваюсь сейчас, заключается в том, что при переходе в некоторые из этих списков я предоставляю пользовательскую форму, которую должен заполнить пользователь.
Пользователь имеет возможность:
- заполните форму и продолжите, после чего вызов
$apply
сохранит данные в$scope
- нажмите кнопку отмены, которая вместо вызова
$apply
для сохранения информации должна отменить последнее взаимодействие перетаскивания, эффективно «перерисовывая» все мои списки, чтобы отразить данные, которые все еще находятся в$scope
на этом этапе (поскольку последнее перетаскивание было на это еще не повлияло).
Эффект этой кнопки «отмена» фактически возвращает все к точке, прежде чем пользователь взял элемент списка и перетащил его в другой список.
Как я могу принудительно «обновить» или «перерендерить» мои ng-repeat
, чтобы они визуально обновлялись и снова отображали текущие данные $scope
?
$scope.apply()
из директивы на основе jQuery, но, похоже, это не приводит к перезагрузке/повторному рендерингу существующих данных. Вероятно, потому что Angular думает, что все точно так же, не зная о том, что я проделал манипуляцию с DOM, не сказав ему об этом. Итак, что мне действительно нужно, так это просто вызов типа «принудительное обновление», где Angular независимо от состояния$scope
просто принудительно обновляет отображаемые данные. - person Jannis   schedule 26.09.2012$timeout( function(){ ...add removed item back to $scope here... });
Манипуляции с $scope, которые вы выполняете в функции $timeout, должны привести к повторному рендерингу. - person Mark Rajcok   schedule 03.10.2012