W kontrolerze otrzymuję dane JSON za pomocą usług $ http lub $ resource. Następnie zapisuję te dane w rozszerzeniu $ scope i AngularJS w strukturze HTML strony. Mój problem polega na tym, że muszę wiedzieć, jaki jest nowy rozmiar (szerokość i wysokość) listy (tj. Element HTML DOM) wypełniony dyrektywą Angular ng-repeat
. W związku z tym muszę uruchomić kod javascript zaraz po ukończeniu aktualizacji modelu Angular. Jaki jest właściwy sposób na zrobienie tego? Szukałem internetu przez ostatnie cztery godziny, ale nie mogłem znaleźć żadnego rozwiązania mojego problemu.Uruchom kod jQuery po zakończeniu renderowania kodu HTML przez AngularJS
ten sposób otrzymuję JSON dane:
var tradesInfo = TradesInfo.get({}, function(data){
console.log(data);
$scope.source.profile = data.profile;
$scope.trades = $scope.source.profile.trades;
$scope.activetrade = $scope.trades[0];
$scope.ready = true;
init(); //I need to call this function after update is complete
});
I to jest to, co dzieje się w init()
funkcję:
function init(){
alert($('#wrapper').width());
alert($('#wrapper').height());
}
Wiem, że musi być coś łatwo rozwiązać ten problem, ale mogę Po prostu znajdź to teraz. Z góry dzięki.
Nie możesz. Tak samo prosto. Może wystąpić nieoczekiwane wywołanie funkcji $ compile, dowolna liczba dyrektyw, które same manipulują modelem DOM i ustawiają rzeczy do wykonania po upływie limitu czasu. System AngularJS jest pięknie zaprojektowany, więc elementy zachowują się niezależnie, a to jest niewielka cena zapłacić. Po prostu znajdź inny sposób. – rewritten
Myślę, że i tak trzeba to zrobić. Mam na myśli to, że fakt, że dom z jego dyrektywami może wywoływać funkcję kompilacji lub robić coś innego, czego nie można przewidzieć, nie może temu zapobiec, imho. – Dobby007
Przepraszam, że ożywam stare pytanie, ale czy możesz udostępnić zawartość #wrapper? Prawdopodobnie po prostu przeszukujesz transakcje? – FrEaKmAn