我有一个从数据库获取数据的指令,但我希望它在项目的不同位置使用不同的存储库(使用相同的API)。传入的数据具有相似的字段,因此不是问题。有没有办法通过指令标签传递它作为参数,如
<div my-directive="my-directive" service="Services.MovieService"></div>
<div my-directive="my-directive" service="Services.ActorService"></div>
或者什么是最好的做法,所以我没有使用代表服务名称的字符串if / else恶梦和依赖注入膨胀?
如何为普通控制器做到这一点?
由于
答案 0 :(得分:1)
可以使用$ injector的名称将服务动态注入到指令的控制器中。能够通过控制器参数注入服务只是Angular提供的便利。在引擎盖下,Angular使用$ injector来检索对象实例。但我们也可以自己使用$ injector。
例如,它是指令的控制器功能 controller :($scope, $injector) {
if(your_condition)
{ var ser= $injector.get(someService) // someService contains the name of a service
}
此处您的条件可以是任何条件,以检查是否包含服务