javascript - angularjs同一服务的多个实例

标签 javascript angularjs

假设我想要多个用户服务实例(selectedUser 和 currentUser),它们提供相同的功能。目前,我只是通过创建两个从本地函数提取定义的服务来解决这个问题:

angular.module('myUserModule', [])

.factory('userFactory', ['$http', '$q', function ($http, $q) {
  return function getUser(userId) {
    return new $q(function (resolve) {
      //Gets the user with the provided userId
    }
  }
}])

.value('currentUserId', '')
.value('selectedUserId', '')

.service('currentUserService', ['userFactory', 'currentUserId', User])
.service('selectedUserService', ['userFactory', 'selectedUserId', User]);

function User(userFactory, userId) {
  var self = this;
  var promise = userFactory(userId);
  promise.then(function setUserSuccess(result) {
    self.user = result;
  }
}

只是想知道其他人是如何解决这个问题的。

更新: 只是为了澄清我也将这些服务作为单例使用。

最佳答案

在一个不相关的问题中,解决方案最终使用了创建多个实例的工厂:

what is the scope of a service in angularjs?

使用工厂模式。

本质上,如果您有 User 服务,则可以使用工厂返回该服务的唯一实例。

function User(userId, $http) {

    var self = this;    

    $http.get('/api/user/', {userId: userId}).success(function(result) {

        self.details = result.data;
    }):
}

userFactory.$inject = ['$http'];
function userFactory($http) {

    return function(user) {

        return new User(user, $http);
    } 
}
angular.module('app').factory('user', userFactory);

但对于此示例,您可以仅使用 $resource。这是一个内置的 Angular 工厂,返回唯一的资源实例。

关于javascript - angularjs同一服务的多个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31919062/

相关文章:

javascript - ng-model 在选择输入中无法正常工作

javascript - 对预检请求的响应未通过访问控制检查 Laravel 和 Ajax 调用

javascript - 代码适用于 Firefox,但不适用于 Chrome、Safari

javascript - 将选项选择中的两个值传递给 javascript 函数

javascript - "var x = "theBomb"in megalomaniac; "有什么作用?

javascript - AngularJS - 我的指令下的 html 没有显示

angularjs - bower-angular-bootstrap3 存储库移到了哪里?

javascript - javascript 回调只是作为函数调用中的参数发送的匿名函数吗?

javascript - AngularJS : Can Controller request external js on fly?

javascript - Controller 中两个变量之间的差异