用于角度的ui-router似乎正在缓存决心.当我不想要它时

Chr*_*ris 8 javascript angularjs restangular angular-ui-router

的背景:

我正在使用ui-router来满足我的Angular页面路由需求.它到目前为止工作得很好,但是我遇到了一个问题.当我加载状态并解析我的用户对象.我使用restangular来调用数据库,它返回一个promise.一切都很好.如果我然后注销,并以另一个用户身份登录.然后导航回同一页面,显示上一个用户对象.

我发现的事情:

  • 每次加载状态时都会进行其余的api调用,这是正确的信息.
  • 如果我在控制器中放置一个断点,则解析通过的用户对象是缓存的信息.

理论:

  • 其余的API端点是/ users/me /,这是每个用户的相同端点.我们只是根据我们传递的JWT令牌提供不同的信息.在某个地方必须有东西,因为它是同一个电话,不打扰交付它已经得到的货物.

我试过的事情:

  • 我已经确认API调用没有被缓存,它正在向angular提供正确的信息
  • 我试过抓住$ http和.removeAll的$ cacheFactory.

示例代码:

angular.module('services.user', [ ])
  .factory('User', function(Restangular) {
    return Restangular.service('users');
  });

angular.module('settings.profile', [
  'ui.router',
  'services.user'
])

.config(function($stateProvider){
  $stateProvider
    .state('settings.profile',{
      url: '/profile',
      templateUrl: 'app/settings/profile/settings.profile.html',
      controller: 'SettingsProfileCtrl',
      authenticate: true,
      resolve: {
        user: function(User) {
          var user = User.one('me').get()
          return user;
        }
      }
    });
})

.controller('SettingsProfileCtrl',
  function($scope, $location, user, $http, apiUrl){

  $scope.user = user;
}
Run Code Online (Sandbox Code Playgroud)

bha*_*tol 0

您的 REST API 参数不会更改,即它/users/me/在所有请求中保持不变。虽然浏览器可能不会缓存 - 这就是为什么您会在缓存中看到不同的正确信息。

您可以尝试配置 Restangular 来验证理论,方法如下:-

RestangularProvider.setDefaultHttpFields({cache: true});
Run Code Online (Sandbox Code Playgroud)

不过,我建议您本着 REST 风格的精神使用 URL 和 REST API,即使用类似...

/users/me/username
Run Code Online (Sandbox Code Playgroud)

username根据用户进行更改,或者如果您有一些限制,请执行以下操作

/users/me/?t=timestamp
Run Code Online (Sandbox Code Playgroud)