2013-02-05 12 views
10

Jak mogę użyć funkcji $ .ajax() jQuery wewnątrz kontrolera angularJS (zamiast wbudowanego angularJS $ http), aby można było uzyskać dostęp do wartości $ scope z widoku/szablon później?

mam tego dość minimalistyczny kontroler angularjs:

function UserCtrl($scope, $http) { 
    $.ajax('http://localhost:8080/admin/user/johndoe').success(function(data) { 
     $scope.user = data; 
    }); 
} 

iw widoku coś takiego:

<h1>Hello, {{ user.Username }}</h1> 

Jednak <h1> w widoku będzie pusta od obciążenia, altough o console.log() w kontroler mówi mi, że $ scope.user jest zapełniany, tak jak chcę.

Teraz, jeśli zastąpię połączenie $.ajax() z $http.get() wszystko działa poprawnie zgodnie z oczekiwaniami.

Znam $http, który jest wbudowany w angularJS, ale ponieważ nie zaczynam od zera, ale mam już dużo kodu, który używa całego jQuery, chcę trzymać się jQuery dla $ .ajax().

Wszelkie pomysły?

Odpowiedz

23

Ponieważ za pomocą jQuery ajax jest poza światem kanciasty, trzeba owinąć $ zadanie zakres wewnątrz

$scope.$apply(function(){ 
    $scope.user = data; 
}); 

kątowa na $ http jest wstępnie zbudowane z cyklu Digest mechanizm wyzwalania.

+0

Oooooohhh mężczyźni, jesteś czarownicą, dziękuję bardzo – krekto

Powiązane problemy