Mam kilka połączonych list ul
w moim widoku, które są przy użyciu jQuery UI: Sortable dyrektywy, aby ułatwić przeciąganie i upuszczanie i zmianę kolejności elementów listy.Angular.js: czy możliwe jest ponowne renderowanie powtórzeń ng w oparciu o istniejące dane zakresu?
zmiany wprowadzone poprzez przeciąganie jQuery UI i upuść I stosuje się do $scope
użyciu funkcji $apply
ta część działa ...
Problem używam do teraz jednak jest to, że na spadek do niektórych z tych wykazów I świadczą niestandardowy formularz, który użytkownik musi wypełnić.
Użytkownik ma możliwość:
- wypełnić formularz i kontynuować który następnie robi
$apply
wywołanie utrzymuje dane do$scope
- kliknij przycisk anulować który zamiast wywoływania
$apply
do przechowywania informacji, powinna przywrócić ostatnią interakcję przeciągania/upuszczania, skutecznie "renderując ponownie" wszystkie moje listy, aby odzwierciedlić dane, które wciąż są na tym etapie w$scope
(ponieważ ostatnie przeciągnięcie jeszcze nie miało na nie wpływu).
Efekt tego przycisku "Anuluj" skutecznie przywraca wszystko do punktu, w którym użytkownik wybrał element listy i przeciągnął go na inną listę.
Jak mogę wymusić odświeżenie lub ponowne renderowanie moich ng-repeat
s, aby odświeżyć i ponownie wyświetlić bieżące dane $scope
?
Normalnie zmiana modelu danych ($ scope) będzie działać, jeśli zostanie wykonana wewnątrz AngularJS. Jeśli zostanie wykonane na zewnątrz, wywołanie funkcji $ scope. $ Apply() powinno uruchomić aktualizację/odświeżenie. Pod koniec operacji anulowania wywołujesz $ scope. $ Apply() lub zawijanie zmian w $ scope. $ Apply (function() {... zmiany tutaj ...})? –
Rzeczywiście nazywam '$ scope.apply()' z dyrektywy opartej na jQuery, ale nie wydaje się wymuszać przeładowania/ponownego renderowania istniejących danych. Prawdopodobnie dlatego, że Angular uważa, że wszystko jest dokładnie takie samo, nie wiedząc o tym, że wykonałem manipulację DOM, nie mówiąc o tym. Tak naprawdę potrzebuję tylko połączenia typu "odświeżaj siłę", gdzie kątowe niezależnie od stanu '$ scope' wymusza jedynie odświeżenie renderowanych danych. – Jannis
Cóż, jako możliwe obejście problemu, co jeśli usuniesz przeciągnięty element z $ scope wewnątrz twojego wywołania do $ scope. $ Apply() - Angular powinien to zobaczyć i ponownie wysłać - następnie w następnym wierszu (nadal w twoim $ scope . $ apply() call) dodaj je ponownie za pomocą $ timeout(): '$ timeout (function() {... dodaj usunięty element z powrotem do $ scope tutaj ...});' manipulację $ scope, którą wykonujesz w funkcja $ timeout powinna spowodować drugie renderowanie. –