2016-08-02 95 views
0

我想每次在沒有手動刷新頁面的情況下在json文件中進行數據更改時更新我的​​視圖。 我使用下面的方法來做一些數據輪詢。這是我的服務文件,以獲得$ HTTP如何監視json文件中的數據更改

.service('employees', function ($http) { 
    this.getEmployees = function() { 
     return $http.get('./data/employee.json'); 
    }; 

這是我的控制器

.controller('The3Ctrl', function ($scope, employees, $interval) { 
    var _this = this; 
    $scope.getData = function() { 
    employees.getEmployees().then(function(response){ 
     _this.items = response.data; 
     $scope.items = _this.items; 
    }); 
    } 
    $scope.getData(); 

    $interval(function(){ 
    $scope.getData(); 
    }, 10000); 

與此有關的getData函數每10秒發送一次。但是,我想要的是隻有在數據(data.json)文件發生更改時纔會觸發該函數。如果沒有數據更改,則觸發該功能是沒用的。

+0

觀看更改某個文件的能力沒有內置角,你想要做很可能會要求角應用程序通信等什麼與另一個可以監視系統文件並通知其更新的應用程序/進程。你能提供一些關於整個過程的背景知識(文件是如何更新的,你的操作系統是...)? – GPicazo

回答

0

你用「改變」或者什麼是指什麼問題當視圖犯規更新 可以使用$scope.$apply(); 或者如果該文件是在應用程序中,你可以檢測

$scope.$watch('element', function() { 
    console.error('element' + element + ' changes'); 
}) 
0

變化:

scope.$watch('Data', function(newValue, oldValue) { 
if (newValue){ 

    } 
    }); 

如果文件服務器上:

您可以通過輪詢來實現此目的,使用舊的回調完成輪詢,您可以重複地調用它們,而無需創建新的promise實例。它的工作原理是定時器,這裏是樣品

var app = angular.module("myApp", []);  
    app.controller("The3Ctrl", ["$scope","$http","$timeout", 
     function($scope, $http,$timeout) { 
     var nextPolling; 
     var pollingInterval = 10000; // 10 seconds 
     var _polling = function() 
     { 
      $http.get('./data/employee.json') 
       .success(function(data) {$scope.items = data;}) 
       .error(function(data) {console.log('error');}) 
       .finally(function(){ nextPolling = $timeout(_polling, pollingInterval); }); 
     }; 

     _polling(); 

     $scope.$on('$destroy', function(){ 
      if (nextPolling){ 
       $timeout.cancel(nextPolling); 
      } 
     }); 


    }]); 

工作App

+0

你能解釋一下嗎? –

+0

@ObasiObenyOj希望你得到它現在 – Sajeetharan

+0

現在還在執行它在我的應用.. –