簡體   English   中英

如何在json文件中監視數據更改

[英]How to watch for data change in json file

我想每次在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);

這樣,每10秒鍾觸發一次getData函數。 但是,我想要的是僅在數據(data.json)文件發生更改時才觸發該函數。 如果沒有數據更改,則觸發該功能是沒有用的。

您用“更改”指的是什么?問題是什么當視圖不更新時,您可以使用$scope.$apply(); 或者您可以通過以下方式檢測到更改

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

如果文件位於應用程序內部:

 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM