Clicky

Skocz do zawartości


Zdjęcie
- - - - -

[AngularJS] Aktualizowanie danych przy pomocy $scope.$watch

3 odpowiedzi w tym temacie
Angular

  • Zaloguj się, aby dodać odpowiedź

#1 Wojtek Sasiela

Wojtek Sasiela

    Początkujący

  • Użytkownik
  • Pip
  • 2 postów

Napisano 22 luty 2014 - 17:32

Witam.

Dopiero się uczę angulara, więc pytania nie powinny być zbyt trudne.
Mam problem z aktualizowaniem danych na stronie www, przy użyciu angulara.

 

1 pytanie)
Jest sobie zmienna "milliseconds_since_epoch", której przypisywana jest wartość pobrana z serwersa JSON.

 
     

  $http.get("http://time.jsontest.com/").success(function(data){
            $scope.milliseconds_since_epoch = data.milliseconds_since_epoch;
        });

Tak się składa że zmienna ta, powinna być cały czas aktualizowana, poprzez przepisywanie wartości zmiennej, która znajduje się na tymże serwerze JSON.

   $scope.$watch('$scope.milliseconds_since_epoch', function() 
          {
            $http.get("http://time.jsontest.com/").success(function(data){
            $scope.milliseconds_since_epoch = data.milliseconds_since_epoch;
          });

Jak poprawnie powinien wyglądać kod, żeby zmienna "$scope.milliseconds_since_epoch", aktualizowała mi się, za każdym razem gdy tylko zostanie zmieniona wartość na serwerze?
 

2 pytanie)
Dane wyświetlam za pomocą:

 <p ng-click="loadTime()"> {{ milliseconds_since_epoch }} </p>

(Co powinno byc zamiast ng-click ? ng-show mi nie dziala ;/ )

 

Proszę o pomoc.
Pozdrawiam.

 

 



#2 airborn

airborn

    Młodszy Mastah

  • Użytkownik
  • PipPip
  • 142 postów

Napisano 22 luty 2014 - 17:48

Nie jesteś w stanie pobierać na bieżąco wartości z serwera, tutaj masz tylko zwykłą komunikację po http czyli request - response. Możesz okresowo (np. co sekundę) odpytywać serwer i na tej podstawie uaktualniać zmienną. W angularze jest dyrektywa `interval` którą możesz wykorzystać do wykonywania kodu co określony czas. Robi ona też pod spodem `$scope.$apply()` które odświeża widok.


  • Wojtek Sasiela lubi to

#3 Wojtek Sasiela

Wojtek Sasiela

    Początkujący

  • Użytkownik
  • Pip
  • 2 postów

Napisano 22 luty 2014 - 18:22

Dzięki AirBorn za merytoryczną odpowiedż :)
Wystarczyło użyć:

$scope.$interval( $scope.loadTime(),"1000" );

i faktycznie, dane pobierają mi się co sekundę i odświeżają na stronie :)

Co prawda przeglądarka nie wyrabia z nagminnym wysyłaniem i odbieraniem żądań, ale przynajmniej, poznałem taką dyrektywę jak interval, jak i zainteresowałem się dyrektywą $apply :)

Także jeszcze raz, dzięki AirBorn za pomoc :D

Have you nice day & Enjoy :)



#4 bm1209

bm1209

    Początkujący

  • Użytkownik
  • Pip
  • 1 postów

Napisano 08 marzec 2016 - 17:31

Witam,

 

Dopiero uczę się AngularaJS, stworzyłem pierwszy projekt, w którym chcę odczytać dane za pośrednictwem zapytania http. Funkcja, którą zastosowałem poprawnie pobiera mi wartość zmiennej i wyświetla ją na stronie:

todoApp.run(function ($http){
  $http.get("/cgi-bin/readVal.exe?var1").success(function (data){
  model.years = data;
});

Wartość zmiennej pobierana z tego zapytania zmienia się w czasie. Wartość zmiennej wyświetlam w widoku poprzez:

<h1>Rejestr 100 = {{todo.years}} </h1>

Problem polega na tym, że wartość pobierana jest tylko raz podczas ładowania strony. Ręczne odświeżenie strony aktualizuje tą wartość. Ja chciałbym zrobić taką funkcjonalność, by ta wartość była uaktualniana automatycznie, co określony czas.

 

Próbowałem wykorzystać podpowiedzi z poprzednich postów, jednak u mnie to nie działa (całkiem być może, że umieszczam składnię w niewłaściwym miejscu. Czy należy skorzystać z funkcji $interval? Czy muszę dopisać dodatkową funkcję?

 

Bardzo proszę o pomoc w rozwiązaniu tego problemu.

Pozdrawiam.







Również z jednym lub większą ilością słów kluczowych: Angular

Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych