用例是我有一个自定义服务,需要根据用户输入进行配置。
所以我为该服务创建了一个服务提供者,但现在我只能在 module.config 调用中配置提供者,我认为它在应用程序的生命周期中只加载一次。
有什么解决办法吗?
用例是我有一个自定义服务,需要根据用户输入进行配置。
所以我为该服务创建了一个服务提供者,但现在我只能在 module.config 调用中配置提供者,我认为它在应用程序的生命周期中只加载一次。
有什么解决办法吗?
我不认为服务提供商是您在这里寻找的,因为它正是您所描述的。
正如 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
让您的服务提供某种配置 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.
}
请记住,服务基本上是对象,您可以根据需要根据设计操作它们。因此,这些可能不是实现目标的唯一方式,甚至不一定是实现目标的最佳方式。您在这里拥有完全的灵活性。