2013-01-03 23 views
17

mam następujące działaniawidoki Angular JS nie aktualizowanie poprawnie

ng kliknij moim zdaniem -> który inturn wywołuje jQuery ajax funkcję, która wyświetla jQuery Q-Tip -> W Q-Tip popup Mam ng-click na elemencie ->, który wykonuje $ http post i ma niektóre wywołania zwrotne od w celu aktualizacji wartości zakresu $.

Wszystkie te rzeczy dzieją się prawidłowo. Ale aktualizacje nie są odzwierciedlane w widoku, jak na zmiany wprowadzone w wywołaniu zwrotnym w końcowym etapie.

Mam funkcję "ng-mousemove" w moim widoku. Dlatego za każdym razem, gdy poruszam myszą, aktualizacje w widoku są odbijane.

Co ja tu robię źle? Czy jest to spowodowane przejściem kątowym i nie-kątowym? Czy ktoś może mi pomóc, jak to rozwiązać?

Odpowiedz

36

Jako docs wyjaśnia:

$ apply() służy do wykonywania wyraz w kanciasty spoza kątowa ramowej. (Na przykład z zdarzeń DOM przeglądarki, setTimeout, XHR lub bibliotek stron trzecich). Ponieważ wywołujemy w architekturze kątowej, musimy wykonać prawidłowy cykl życia w zakresie obsługi wyjątków , wykonując zegarki.

Więc jeśli masz kod jQuery jak

$('#myDiv').on('click', function() { 
    // do stuff 
    $scope.$apply(); 
}); 
+0

W moim kodu, mam tylko NG-kliknięcie, które wywołuje funkcję kątową. Robię ** jQuery.qtip() ** wewnątrz tej funkcji kątowej. Ten jQuery.qtip robi również ** post jQuery wewnętrznie **, aby uzyskać zawartość Qtip. Ale podsumowanie jest już uruchomione, gdy próbuję zastosować po wywołaniu funkcji qtip(). Jakie jest odpowiednie miejsce na ** $ **? Nie powinno się tego wywoływać po renderowaniu qtip? –

+0

Lepiej dodaj fragment kodu do swojego pytania. – asgoth

+1

Kątowy nerd powiedział mi, żebym użył 'if (! $ Scope. $$ phase) $ scope. $ Apply();' –