javascript - 如何动态选择要在指令/ Controller 中使用的存储库/服务?

标签 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 噩梦和依赖注入(inject)膨胀?

对于普通 Controller 如何做到这一点?

谢谢

最佳答案

服务可以通过其名称使用 $injector 动态注入(inject)到指令 Controller 中。能够通过 Controller 参数注入(inject)服务只是 Angular 提供的一种便利。在底层,Angular 使用 $injector 来检索对象实例。但我们也可以自己使用 $injector。

例如,它是指令的 Controller 函数

  controller :($scope, $injector) {
  if(your_condition)
 { var ser= $injector.get(someService)  // someService contains the name of a service
  }

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

关于javascript - 如何动态选择要在指令/ Controller 中使用的存储库/服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26640356/

相关文章:

javascript - 我失去了 $scope 值

JavaScript 顺序执行

javascript - 难道没有标准的 jQuery 弹出菜单组件吗?

javascript - 我无法为已加载的 Javascript 分配 ID

javascript - Angular Material 对话框 : position always bottom right of windows

javascript - Angular.js : How to access nested object literals

javascript - 如何在 Vue 组件中的每个列表项上附加事件监听器?

javascript - AngularJS:使用指令前置 HTML

javascript - 如何有条件地在 Angular 中包含脚本元素

javascript - 如何从html ng-click调用链接功能方法?