angularjs 覆盖服务 setter 和 getter

angularjs override service setter and getter

我是 JS 新手 angular, 我在 angular 中有一个 currentUser 服务...它应该将检索到的当前用户设置为 localStorage 以在页面刷新之间保持它

服务定义如下

var currentUserSrvc = function() {
  // some logic on how to save the user to localStorage
  return {
    user: {}
  };
};
angular.module('app').factory('currentUser', currentUserSrvc);

我想覆盖此服务的 setter 和 getter 以与 localStorage 一起工作...但不手动添加 setter 和 getter

不介意 localStorage 内部如何工作

// I just want to use it like
currentUser.user = response.user
// instead of using it like (given that I'll provide a setter and a getter methods)
currentUser.setUser(response.user)

可以使用 angular js 吗?

这是您要找的吗?

var currentUserSrvc = function() {
  // some logic on how to save the user to localStorage

  return {
     get user() {return localStorage.user;},
     set setUser(user) {localStorage.user = user}
  };
};
angular.module('app').factory('currentUser', currentUserSrvc);

这就是您在 javascript 中使用 getter 和 setter 的方式:

所以你会:

currentUser.user //retrieves localStorage.user
currentUser.setUser = "myUser" //sets localStorage.user to "myUser"

编辑:您可以这样做。

var currentUserSrvc = function() {
  var currentUser = {}
  Object.defineProperty(currentUser, "user", {
    get: function() {return localStorage.user; },
    set: function(user) { localStorage.user = user; }
  })

  return currentUser;
};
angular.module('app').factory('currentUser', currentUserSrvc);

所以你会:

currentUser.user //retrieves localStorage.user
currentUser.user = "myUser" //sets localStorage.user to "myUser"

EDIT2:或者您甚至可以这样做:

var currentUserSrvc = function() {
  // some logic on how to save the user to localStorage

  return {
     get user() {return localStorage.user;},
     set user(user) {localStorage.user = user}
  };
};
angular.module('app').factory('currentUser', currentUserSrvc);