我有一个角度模块,设计为自包含。消费者应用程序可以使用url参数添加指令,并且在与窗口小部件交互时,它将使用该URL作为整体数据源。这有一个使用$ http加载数据的通用LoadService,并期望一个特定的JSON格式来运行该小部件。
现在我正在尝试重构,以便有人也可以创建自定义加载服务并将其注入模块,但如果没有注入,那么它将使用默认数据加载。所以我试图找出如何创建一种注入CustomLoadService的方法,如果它是由使用该模块的应用程序定义的。但是,如果未定义自定义服务,则不应该出错,它应该只使用默认服务。
我正在查看$injector.get
,并认为这是一种可能性,但我无法将$injector
注入控制器。我认为注入就像$location
一样简单。有点像...
angular
.module('Widget')
.controller('WidgetController',[
'$scope',
'WidgetLoadService',
'$injector',
WidgetController
]);
这种方法似乎不起作用,所以我想知道......解决这个问题的最佳“角度方式”是什么。我应该如何使用$ injector。
答案 0 :(得分:0)
您可以使用$ injector:
import os
# path : string to relative or absolute path to be queried
# subdirs: tuple or list containing all names of subfolders that need to be
# present in the directory
def all_dirs_with_subdirs(path, subdirs):
# make sure no relative paths are returned, can be omitted
path = os.path.abspath(path)
result = []
for root, dirs, files in os.walk(path):
if all(subdir in dirs for subdir in subdirs):
result.append(root)
return result
def get_directory_listing(path):
output = {}
output["text"] = path.decode('latin1')
output["type"] = "directory"
output["children"] = all_dirs_with_subdirs(path, ('Maps', 'Reports'))
return output
with open('test.json', 'w+') as f:
listing = get_directory_listing(".")
json.dump(listing, f)
所以你可能有这样的结果:
app.controller('MainCtrl', function($scope, $injector) {
$scope.name = $injector.get('test').name;
}).factory('test', function() { return {name: 'world'} });