Jestem bardzo nowy w AngularJS (4 godziny nowe) i próbuję uruchomić wywołanie http, jednak wydaje się, że to się dzieje, że Angular ciągle wywołuje żądanie http get. Jestem pewien, że to dlatego, że moje podejście jest błędne. To właśnie próbuję zrobić.

Fragment mojego pliku kontrolera Usługa internetowa działa poprawnie. Używam tego w aplikacji node.js

 function peopleController($scope,$http){
  $scope.getPeople = function(){
    $scope.revar = {};
    $http.get('/location/-79.18925/43.77596').
    success(function(data){
      console.log(data);
      $scope.revar = data;
    });
  }
}

Mój plik list.html

   <div ng-controller="busController">
        <div class="blueitem">{{getPeople()}}</div>
   </div>

Wiem, że nie zobaczę wyników, ponieważ nie zwracam niczego w mojej metodzie getPeople, ale chciałem zobaczyć wynik dziennika wyniku, który widziałem w chrome, ale milion razy i licząc od kątowego ciągle wywołuje tę metodę adresu URL. Zamiast tego wciąż uderza.

Jak uzyskać kąt, aby zwrócić odpowiedź tylko raz?

1
Faisal Abid 25 wrzesień 2012, 00:44

2 odpowiedzi

Najlepsza odpowiedź

Problem, którego doświadczasz, jest powiązany ze sposobem, w jaki działa AngularJS i – mówiąc dokładniej – w jaki sposób decyduje, że szablon wymaga odświeżenia. Zasadniczo AngularJS odświeży szablon na podstawie brudnego sprawdzenia modelu. Nie chcę tu wchodzić w zbyt wiele szczegółów, ponieważ jest doskonały post wyjaśniający to (Jak działa wiązanie danych w AngularJS?), ale w skrócie będzie się zmieniać wraz ze zmianami modelu, aż się ustabilizuje (nie można już zaobserwować zmian w modelu). W twoim przypadku model nigdy się nie stabilizuje, ponieważ przy każdym wywołaniu metody getPeople() otrzymujesz nowe obiekty.

Właściwym sposobem podejścia do tego byłoby (jedno z możliwych rozwiązań):

function peopleController($scope,$http){
    $http.get('/location/-79.18925/43.77596').
    success(function(data){
      $scope.people = data;
    });      
} 

A następnie w szablonie:

   <div ng-controller="busController">
        <div class="blueitem">{{people}}</div>
   </div>

Wspomniany szablon zostanie automatycznie odświeżony po dostarczeniu danych.

Po raz kolejny jest to tylko jedno z możliwych rozwiązań, więc sugerowałbym skorzystanie z samouczka AngularJS, aby lepiej zrozumieć, co jest możliwe: http://docs.angularjs.org/tutorial/

5
Community 23 maj 2017, 15:33

Kilka rzeczy. Witamy w angularjs, jego świetnym frameworku. Prawdopodobnie nie powinieneś dzwonić do getPeople ze strony internetowej. W zamian,

 function peopleController($scope,$http){
  var getPeople = function(){
    $scope.revar = {};
    $http.get('/location/-79.18925/43.77596').
    success(function(data){
      console.log(data);
      $scope.revar = data;
    });
  }
  getPeople();
}

A potem w html

<div ng-controller="busController">
        <div class="blueitem">{{revar|json}}</div>
</div>

Polecam również zajrzeć do ngResource, zwłaszcza jeśli robisz aplikacje typu CRUD.

Mam nadzieję że to pomoże

--dan.

3
Dan Doyon 25 wrzesień 2012, 01:08