Я хочу обновлять свой просмотр каждый раз, когда происходит изменение данных в 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). Если нет изменения данных, это бесполезно для запуска функции.
Что вы называете "изменением" или проблемой? Когда представление не обновляется, вы можете использовать $scope.$apply();
или вы можете обнаружить изменение с помощью
$scope.$watch('element', function () {
console.error('element' + element + ' changes');
})
Если файл находится внутри приложения:
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