javascript - ऑटो रीफ्रेश डेटा तब होता है जब नया डेटा सर्वर से AngularJS के साथ मिल जाता है




angularjs-scope angular-promise (2)

मैं AngularJS के लिए नया हूँ और नए पेज को सर्वर से प्राप्त होने पर केवल एक पेज को ताज़ा करने के बारे में एक त्वरित प्रश्न पूछना होगा।

मैंने लगभग खोज की है लेकिन मेरी समस्या के समान कुछ भी नहीं मिल सका।

मेरे पास इंटरवल प्रोमोइस के साथ एक सेवा और नियंत्रक है:

MyService

angular.module('MyService', ['ngResource']).
    factory('Data', function($resource){
      return $resource('rest/getMyData', {});
});

MyController

function MyController($scope,$interval,$http, Data) {

    $scope.refresh = function() {
        $scope.jobs = Data.query();
    };

    $scope.intervalPromise = $interval(function(){
          $scope.refresh();
    }, 10000);  

    // initial load of data
    $scope.refresh();
}

डेटा को सफलतापूर्वक हर 10 सेकंड में सर्वर से पुनर्प्राप्त किया जाता है, लेकिन मुझे पृष्ठ को केवल तभी रिफ्रेश करना होगा जब नया डेटा मिल जाए।

सही दिशा में एक बिंदु बहुत सराहना की जाएगी


आप अपने वर्तमान डेटा सेट ( $scope.jobs ) से सर्वर से प्राप्त डेटा की तुलना कर सकते हैं और केवल $scope.jobs अपडेट करते हैं यदि वे अलग-अलग हैं

function MyController($scope,$interval,$http, Data) {

    $scope.refresh = function() {
        var serverData = Data.query();
        if( serverData !== $scope.jobs ) {
            $scope.jobs = serverData;
        }
    };

    $scope.intervalPromise = $interval(function(){
          $scope.refresh();
    }, 10000);  

    // initial load of data
    $scope.refresh();
}

मुझे लगता है कि मैंने एक समाधान पाया जो काम करता है

रयान का उत्तर मेरे लिए भी काम नहीं करता है खुदाई के एक सा होने के बाद ऐसा लगता है कि यह डेटा के रूप में ठीक से काम नहीं करता है .query () ऑपरेशन को लौटने के लिए थोड़े समय लगता है - और जब यह if(...) - इसलिए ताज़ा हमेशा से आह्वान किया जाता है (और स्क्रीन को प्रत्येक दस सेकंड में "फ्लैश" के रूप में यह एक ही डेटा में रीफ्रेश करता है)।

इसे ठीक करने के लिए, आपको setTimeout() साथ विलंब जोड़ने की आवश्यकता है।

function MyController($scope,$interval,$http, Data) {
  $scope.refresh = function() {
      var serverData = Data.query();
      setTimeout(function(){
            if (serverData !== $scope.jobs){
               $scope.jobs = serverData;
            }
      }, 100);
  };

  $scope.intervalPromise = $interval(function(){
      $scope.refresh();
  }, 10000);  

  // initial load of data
  $scope.refresh();
}

वैसे भी जो मेरे लिए काम करता है - इसलिए यह उपयोगी हो सकता है अगर किसी की अभी भी मुश्किल हो रही है