0

用例是我有一个自定义服务,需要根据用户输入进行配置。

所以我为该服务创建了一个服务提供者,但现在我只能在 module.config 调用中配置提供者,我认为它在应用程序的生命周期中只加载一次。

有什么解决办法吗?

4

2 回答 2

0

我不认为服务提供商是您在这里寻找的,因为它正是您所描述的。

正如 Chris 所说,角度服务是单例的。但是,如果您希望您的服务根据用户输入输出“实例”,我喜欢以下方法。

function myController(myService, $scope) {
  var config = { value1: 'default', value2: 'default' };
  $scope.newInstance=myService.create(config);

}

app.service('myService', [function(){

   function serviceInstance = function (config){
     //take config and return output object
   }

   return {
      create: function(config){
         return new serviceInstance(config);
      }
   }
}]);

我没有想过能够像 Chris 建议的那样操作配置变量。我认为它在我的示例中不起作用,但您可以将数据绑定到$scope.newInstance

于 2013-11-05T05:07:36.497 回答
0

让您的服务提供某种配置 API 以根据需要设置这些配置值。作为一个简单的示例,您可能会执行以下操作:

function myController(myService, $scope) {
  $scope.config = myService.config;
  // You can manipulate various config options now through direct binding.
}

但是请记住,AngularJS 服务是单例的,这意味着它们都将共享相同的状态。如果您需要不同的状态,或者每次都需要一个“新”状态,您将想做一些更像 $resource 或 $http 工作方式的事情,这基本上是一个工厂。

function myController(myService, $scope) {
  $scope.config = { value1: 'default', value2: 'default' };
  var thisService = myService($scope.config);
  // You can manipulate various config options now through direct binding.
}

请记住,服务基本上是对象,您可以根据需要根据设计操作它们。因此,这些可能不是实现目标的唯一方式,甚至不一定是实现目标的最佳方式。您在这里拥有完全的灵活性。

于 2013-11-05T04:38:00.740 回答