javascript - $http AngularJS 之后数据范围不更新

标签 javascript angularjs scope ionic-framework

我不明白为什么当我设置用户空闲时它不更新 $scope.user_free_status 但当我取消设置参数时它工作得很好。我需要在一种情况下重新加载页面,而不是另一种情况...... 获取的数据存储在本地存储中。

这是代码:

    .state('app', {
    url: "/app",
    abstract: true,
    templateUrl: "templates/menu.html",
    controller: 'InitialCtrl',
    resolve: {
      theUserFreeStatus: function(DataService) {
        return DataService.getUserFreeStatus();
      }
    }
  })

Controller :

.controller('InitialCtrl', function($scope, $state, DataService ,FreeService, SharedService, theUserFreeStatus) {
// Showing set free but not unset or not
  if (FreeService.isSetFree()) {
    $scope.showSetFree    = false;
    $scope.showUnSetFree  = true;
  } else {
    $scope.showSetFree    = true;
    $scope.showUnSetFree  = true;
  }

  // Show the Free status set when arriving on page/app
  $scope.user_free_status = theUserFreeStatus;
  // Set user as Free
  $scope.setFree = function(activity, tags) {
    FreeService.setFree(activity, tags).success(function() {
      console.log($scope.user_free_status);
      $scope.user_free_status = DataService.getUserFreeStatus();
      console.log($scope.user_free_status);
      $scope.showSetFree    = false;
      $scope.showUnSetFree  = true;
      SharedService.goHome();
    })
  }  

  //// Free status unset
  $scope.unsetFree = function() {
    FreeService.unsetFree().success(function() {
      $scope.user_free_status = [];
      $scope.showSetFree    = true;
      $scope.showUnSetFree  = false;
      SharedService.goHome();
    });
  };
})

服务:

.factory('FreeService', function(WebService, $localstorage, $ionicPopup, DataService, $sanitize, CSRF_TOKEN) {
    var cacheFreeStatus = function(free_status) {
        $localstorage.setObject('user_free_status', free_status)
    };
    var uncacheFreeStatus = function() {
        $localstorage.unset('user_free_status')
    }
    return {
        setFree: function(activity, tags) {
            var status  = { SOME STUFF BLABLABLA };
            var setFree = WebService.post('setstatus/', sanitizeStatus(status));
            setFree.success(function(response) {
                console.log('available' + response.flash);
                cacheFreeStatus(response.status_response);
            })
            setFree.error(freeError)
            return setFree;
        },
        unsetFree: function() {
            var details  = {OTHER STUFF};
            var unsetFree = WebService.post('unsetstatus/', details);
            unsetFree.success(function(response) {
                console.log('unset ' + response.flash);
                uncacheFreeStatus(response.status_response);
            })
            unsetFree.error(freeError)
            return unsetFree;

        },
        isSetFree: function() {
            return $localstorage.get('user_free_status');
        }
    }
})
.service('DataService', function($q, $localstorage) {
  return {
    activities: $localstorage.getObject('activities'),
    getActivities: function() {
        return this.activities;
    },
    user_free_status: $localstorage.getObject('user_free_status'),
    getUserFreeStatus: function() {
        return this.user_free_status;
    }
  }
})
 * Local Storage Service
 ------------------------------------------------------*/
.factory('$localstorage', ['$window', function($window) {
  return {
    set: function(key, value) {
      $window.localStorage[key] = value;
    },
    unset: function(key) {
      localStorage.removeItem(key);
    },
    get: function(key, defaultValue) {
      return $window.localStorage[key] || defaultValue;
    },
    setObject: function(key, value) {
      $window.localStorage[key] = JSON.stringify(value);
    },
    getObject: function(key) {
      return JSON.parse($window.localStorage[key] || '{}');
    }
  }
}])

设置用户状态时,控制台返回 $http 调用有效,但我尝试设置的 $scope 变量为空数组。重新加载页面后,我可以看到显示的更新。如果我取消设置用户的状态,$scope 会正确更新,无需重新加载页面。 Web 服务只是 $http 调用。

我在这里缺少什么来正确更新 $scope.user_free_status 而无需重新加载页面?

感谢您的宝贵时间!

最佳答案

您的数据服务作为服务注入(inject),但您尚未将函数附加到此。相反,您已将其作为文字的一部分返回,就像您在工厂中所做的那样

关于javascript - $http AngularJS 之后数据范围不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28187924/

相关文章:

javascript - 使用 ng-repeat 后专注于特定行

javascript - 一个javascript对象二义性问题

javascript - 页面提交后将焦点设置到 IG 中先前选定的行

angularjs - ionic 文件传输错误

javascript - 在javascript中加载html内容

注入(inject)函数中的 Javascript 作用域

我可以存储指向 __PRETTY_FUNCTION__ 的指针以供以后使用,还是需要立即复制该字符串?

javascript重复更改文档背景颜色

javascript - 我是否需要 Goodreads API key 来检索图书元数据?

javascript - jQuery 单击事件未在 IE 上触发