如何在AngularJS 1控制器中注入条件服务?
How do you inject a condition service into AngularJS 1 Controller
我有一个设计为自包含的角模块。一个消费应用程序可以添加带有url参数的指令,当它与小部件交互时,它将使用该url作为其整体数据源。它有一个通用的LoadService,使用$http来加载数据,并期望一个特定的JSON格式来运行小部件。
现在我正在尝试重构,以便有人也可以创建一个自定义加载服务并将其注入到模块中,但如果没有注入,那么它将使用默认的数据加载。所以我想弄清楚我如何创建一种方式,CustomLoadService被注入,如果它是由正在消费模块的应用程序定义的。但是,如果没有定义自定义服务,它不应该出错,它应该只使用默认服务。
我正在研究$injector.get
并看到这是一种可能性,但我在将$injector
注入控制器时遇到了麻烦。我以为这将是简单的$location
注入。类似…
angular
.module('Widget')
.controller('WidgetController',[
'$scope',
'WidgetLoadService',
'$injector',
WidgetController
]);
这个方法似乎不工作,所以我想知道…解决这个问题的最好的、最"有角度的方法"是什么?我应该如何使用$injector。
你可以使用$injector:
app.controller('MainCtrl', function($scope, $injector) {
$scope.name = $injector.get('test').name;
}).factory('test', function() { return {name: 'world'} });
所以你可能会得到这样的结果:
app.controller('MainCtrl', function($scope, shareService) {
$scope.name = shareService.getData();
shareService.setDataService('dataService2');
$scope.name = shareService.getData();
})
.factory('shareService', function($injector) {
var dataServiceName;
return {
setDataService: function(name) {
dataServiceName = name;
},
getData: function(name) {
return $injector.get(dataServiceName || 'dataService').data;
}
}
})
.factory('dataService', function() { return {data: 'world'} })
.factory('dataService2', function() { return {data: 'world 2'} });
相关文章:
- 通过js在新选项卡中有条件地打开url
- 我已经创建了一个jquery转盘,并使用if条件来运行和停止转盘
- 使用Objective-C的JavaScript注入方法
- 正在注入包含JS的HTML
- jQuery-有条件地附加HTML
- 迷你$provider注入茉莉花和角
- 根据某些条件在视图之间切换
- 如何做到这一点,使代码在不传递条件后执行函数
- 有条件更新d3.js力图中节点的最佳方法
- Angularjs工厂注入错误
- javascript中的布尔条件
- 通过命令行/批处理文件打开页面时,将javascript代码注入Google Chrome
- Woocommerce产品选项有条件
- 基于两个条件退出While循环
- 有条件地在选项标记中应用布尔属性
- 在 AngularJS 应用程序中有条件地注入模块
- 如何循环通过我的html和注入文本,如果一个条件是满足
- AngularJS在控制器中条件注入服务的最佳实践
- 用js DOM创建并注入条件注释
- 如何在AngularJS 1控制器中注入条件服务?