Как следить за изменением данных в файле json

0

Я хочу обновлять свой просмотр каждый раз, когда происходит изменение данных в json файле без обновления вручную страницы. Я использую следующий метод для проведения некоторых опросов данных. Вот мой файл службы, чтобы получить $ http

.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
    Возможность просмотра файла на наличие изменений не встроена в Angular, поэтому для того, чтобы вы хотели сделать, скорее всего, приложение Angular должно было взаимодействовать с другим приложением / процессом, которое может просматривать системные файлы и уведомлять его об обновлении. Можете ли вы рассказать немного об общем процессе (как обновляются файлы, ваша операционная система, ...)?
Теги:
angularjs-directive

2 ответа

0

Что вы называете "изменением" или проблемой? Когда представление не обновляется, вы можете использовать $scope.$apply(); или вы можете обнаружить изменение с помощью

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

Если файл находится внутри приложения:

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

   }
  });

Если файл находится на сервере:

Вы можете добиться этого путем опроса, опрос выполняется со старыми обратными вызовами, вы можете вызывать их повторно, без необходимости создавать новый экземпляр обещания. Он работает как таймер, вот образец

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 надеюсь, ты понял это сейчас
Показать ещё 8 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню