2016-08-02 4 views
0

Ich möchte meine Ansicht jedes Mal aktualisieren, wenn Daten in JSON-Datei ändern, ohne manuell Seite aktualisieren. Ich verwende die folgende Methode, um einige Datenabfragen durchzuführen. Hier ist meine Service-Datei $ httpWie für Datenänderungen in JSON-Datei zu beobachten

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

Dies ist mein Controller

.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); 

Damit die getData Funktion ausgelöst wird alle 10 Sekunden zu erhalten. Was ich will ist jedoch, dass die Funktion nur ausgelöst wird, wenn es eine Änderung in der Datei data (data.json) gibt. Wenn keine Daten geändert werden, ist es nutzlos, dass die Funktion ausgelöst wird.

+0

Die Fähigkeit, eine Datei für Änderungen eingebaut ist nicht in Schräg zu sehen, so was Sie wollen, würde wahrscheinlich die Winkel Anwendung erfordern tun zu kommunizieren mit einer anderen Anwendung/einem anderen Prozess, der Systemdateien überwachen und sie zur Aktualisierung auffordern kann. Können Sie Hintergrundinformationen zum gesamten Prozess bereitstellen (wie werden die Dateien aktualisiert, Ihr Betriebssystem, ...)? – GPicazo

Antwort

0

Was Sie mit „change“ beziehen oder was ist das Problem Wenn die Ansicht doesnt Update Sie $scope.$apply(); verwenden können, oder Sie können eine Änderung mit

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

erkennen Wenn die Datei innerhalb der App ist :

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

    } 
    }); 

Wenn die Datei auf dem Server ist:

Sie können dies durch Abfragen erreichen, Polling wird mit alten Callbacks durchgeführt, Sie können sie wiederholt aufrufen, ohne eine neue Instanz des Versprechens erstellen zu müssen. Es funktioniert wie Timer, hier ist die Probe

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); 
      } 
     }); 


    }]); 

Arbeiten App

+0

Können Sie etwas erklären? –

+0

@ObasiObenyOj hoffe, Sie haben es jetzt – Sajeetharan

+0

bin immer noch versucht, es in meiner Anwendung zu implementieren .. –