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

时间:2018-05-17 12:12:57

标签: angularjs angular-resource

我正在编写一个使用Resources与REST PHP后端进行通信的角度1.6.9应用程序。

资源有一些参数:

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
    }
  });
});

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

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

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

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

那么有没有办法以编程方式浏览每个资源并在登录时更新它们?

1 个答案:

答案 0 :(得分:1)

使用功能:

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
    }
  });
});

来自文档:

  

如果参数值是函数,则每次需要获取请求的参数值时都会调用它。

     

— AngularJS $resource API Reference - arguments