AngularJS $ LocalStorage очищен, но setInterval еще работает - PullRequest
0 голосов
/ 23 мая 2019

У меня проблема с фрагментом, он работает так, как будто я обновляю что-либо на вкладке, другая вкладка должна измениться (вызывая функцию GET)

И мой фрагмент работает очень хорошо в этом случае, вот вам мой фрагмент:

$scope.updateContact = function (contact) {
    $http.put('http://127.0.0.1:8000/api/v1/contact/' + $scope.clickedContact.id + '/?=format=json', $scope.clickedContact)
    .then(function(response){
      $scope.successEdit = 'You have updated the contact successfully';
      $scope.getAllContact(); // this function will make sure to reload the page after edit
      $localStorage.editedData = response.data;
      $scope.editedID = $localStorage.editedData.id;
      if (response.data.id == $localStorage.editedData.id) {
        $localStorage.isChanged = true;
      }
      $timeout(function(){
        $scope.successEdit = '';
      },4000);
    }, function(response){
      var errorData = response.data;
      $scope.errorEdit = Object.values(errorData)[0][0];
      $timeout(function(){
        $scope.errorEdit = '';
      }, 5000);
    });
  };


  setInterval(function() {
    if ($localStorage.isChanged == true) {
      $scope.getAllContact();
      localStorage.clear();
    }
  }, 5000);

Надеюсь, вы заметили setinterval в конце фрагмента:

setInterval(function() {
    if ($localStorage.isChanged == true) {
      $scope.getAllContact();
      localStorage.clear();
    }
  }, 5000);

Проблема с этим,

Я хочу, чтобы локальное хранилище изменилось, чтобы оно вызывало эту функцию $scope.getAllContact();, и после этого оно должно очистить localstorage Это работает, но проблема в том, что оно работает постоянно, даже если локальное хранилище очищено.

Я хочу вот так:

  1. Когда данные локального хранилища изменились, он должен вызвать эту функцию $scope.getAllContact(); и затем очистить локальное хранилище. и даже если позднее произойдет другое изменение, функция $scope.getAllContact(); выполнится снова, а затем снова очистится , но проблема в том, что теперь она выполняет и очищает, даже если не ждет, когда произойдет другое изменение, она постоянно выполняется после того, как произойдет только одно изменение. Как я могу заставить его ждать, чтобы выполнить снова после того, как другое изменение происходит?.

1 Ответ

1 голос
/ 23 мая 2019

взять в переменную

var clearInterval = setInterval(function() {
    if ($localStorage.isChanged == true) {
      $scope.getAllContact();
      localStorage.clear();
    }
  }, 5000);

и так ясно

clearInterval(clearInterval);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...