带参数的资源,如何在登录时更新参数?

Resources with Parameter, How to update the parameters on login?

我正在编写一个 angular 1.6.9 应用程序,它使用资源与 REST PHP 后端通信。

资源有一些参数:

angular.module('app').factory('BookResource', function($resource, $localStorage) {
  return $resource('/rest/:roleId/ul/:ulId/book/:id',
    {
      roleId: $localStorage.currentUser.roleId,
      ulId  : $localStorage.currentUser.ulId,
      id    : '@id'
    }, {
    update: {
      method: 'PUT' // this method issues a PUT request
    }
  });
});

在这里你可以看到我使用了两个从本地存储中获取的参数。

一切正常,除非在同一浏览器中更改用户 window。 重新登录时,REST 调用是使用参数的先前值进行的,而不是存储在 $localStorage 中的新值(在注销和登录时被清除)。

SHIFT+REFRESH 确实解决了这个问题,但我想知道我是否可以避免在每次用户更改时要求用户执行 SHIT+REFRESH,这种情况将会发生。

一个解决方法是要求他们系统地使用私人导航,但我很确定有些人不会并且会抱怨 ;)

那么有什么方法可以通过编程方式遍历每个资源并在登录时更新它们吗?

使用函数:

app.factory('BookResource', function($resource, $localStorage) {
  return $resource('/rest/:roleId/ul/:ulId/book/:id',
    {
      roleId: function () { return $localStorage.currentUser.roleId },
      ulId  : function () { return $localStorage.currentUser.ulId },
      id    : '@id'
    }, {
    update: {
      method: 'PUT' // this method issues a PUT request
    }
  });
});

来自文档:

If a parameter value is a function, it will be called every time a param value needs to be obtained for a request.

— AngularJS $resource API Reference - arguments