如何动态选择要在指令/控制器中使用的存储库/服务?

时间:2014-10-29 20:45:09

标签: javascript angularjs angularjs-directive angularjs-service angularjs-controller

我有一个从数据库获取数据的指令,但我希望它在项目的不同位置使用不同的存储库(使用相同的API)。传入的数据具有相似的字段,因此不是问题。有没有办法通过指令标签传递它作为参数,如

<div my-directive="my-directive" service="Services.MovieService"></div>
<div my-directive="my-directive" service="Services.ActorService"></div>

或者什么是最好的做法,所以我没有使用代表服务名称的字符串if / else恶梦和依赖注入膨胀?

如何为普通控制器做到这一点?

由于

1 个答案:

答案 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
  }

此处您的条件可以是任何条件,以检查是否包含服务