2012-08-24 15 views
11

Zacząłem ostatnio grać z Angular.js, a projekt demonstracyjny działał całkiem nieźle. Jednak, gdy próbowałem załadować dane z usługi wewnętrznej backendu, a nie tylko z tablicy z twardym kodowaniem, zacząłem się rozłączać. W szczególności strona nie wydaje się poprawnie powiązać danych po ustawieniu zakresu $ za pomocą $ .getJSON(). Done (...). Zamiast po prostu przypisywać wartość do $ scope po zakończeniu .getJSON, czy powinienem robić to gdzie indziej/inaczej? Szukałem wysoko i nisko i naprawdę nie mogłem znaleźć żadnych dobrych przykładów kątowych, które pobierały dane intensjonalne z zaplecza.

Z góry dziękuję za pomoc!

Odpowiedz

13

Ponieważ próbujesz zaktualizować $scope poza obszarem Angular, będziesz musiał dokonać zmian w modelu za pomocą metody $apply w zakresie.

Może coś takiego:

$.getJSON('ajax/test.json', function(data) { 
     $scope.$apply(function(){ 
      $scope.modelData = data; 
     }); 
    }); 

Preferowanym sposobem dostępu backend z angularjs byłoby korzystać z usługi $http lub $resource zamiast jQuery. Nie musisz już korzystać z $scope.$apply, możesz po prostu zaktualizować swój $scope.modelData bezpośrednio.

This post ma dobrą fiddle aktualizację modelu poza kodem Angular.

+0

To jest doskonały dzięki! Podczas gdy twój przykład wydaje się działać idealnie i podoba mi się to, że wskazałeś na zastosowanie, ponieważ to pomogło mi zrozumieć, jak to wszystko działa - powinienem chyba po prostu użyć http lub zasobów, ponieważ te wydają się być bardziej preferowane, jak powiedziałeś. Dzięki jeszcze raz! – jkat98

0

lub zamiast owijania stosuje się, po prostu zadzwoń go na końcu funkcji zwrotnej jak

$.getJSON('ajax/test.json', function(data) { 
    $scope.data = data;   
    $scope.$apply(); 
}); 
Powiązane problemy