Przenoszę niektóre elementy strony za pomocą ng-repeat
i przejść CSS. Jeśli zmienię tablicę danych za pomocą unshift
, lista przejdzie ładnie. (W mojej aplikacji zmieniam pozycję, a także nieprzezroczystość.)Dlaczego występują przejścia CSS dla unshift(), a nie dla shift() na listach powtórzeń ng?
Jeśli jednak zaktualizuję tablicę za pomocą shift
, DOM zostanie natychmiast zaktualizowany bez żadnego przejścia.
Here's a demo z jednego podejścia, w którym wszystkie działają zgodnie z oczekiwaniami poza przejściami. Porównaj zachowanie przy użyciu dwóch przycisków.
$scope.items.push($scope.items.shift());
Here's another demo alternatywnego podejścia, w którym działa się przejścia, ale macierz traci Elementem każdorazowo funkcji uruchomienia.
$scope.items.shift($scope.items.push());
Chodzi o to, że użytkownik może przełączać się pomiędzy elementami w macierzy przejścia na czas nieokreślony i CSS występują w obu kierunkach. Wydaje się, że problem polega na tym, że AngularJS aktualizuje DOM w jednym przypadku, ale nie w drugim, chociaż nie byłem w stanie tego wykazać w moich testach.
Ponadto, na podstawie niektórych odczytów próbowałem użyć `track by item.id 'bez powodzenia. Dzięki wielkie.
Rzeczywiście, wydaje się, że działa. Oto skrzypce demonstrujące coś bardziej podobnego do tego, co robię. Mam problem z uruchomieniem go w mojej aplikacji. http://jsfiddle.net/isherwood/w123q5na/5 – isherwood
Bingo. Miałem w utworze instrukcję "track by", która podniosła sprawę. Dzięki! – isherwood
Niesamowite, cieszę się, że mogę pomóc. Nawet jeśli jest to dziwne rozwiązanie, które wydaje się bardziej hackowe. :) – jnthnjns