【问题标题】:Directive to iterate over service result without controller在没有控制器的情况下迭代服务结果的指令
【发布时间】:2013-02-06 13:38:00
【问题描述】:

我正在研究使用 AngularJS 作为以声明方式定义 Web 组件的框架的可能性(尽可能避免对控制器的需求)。所需的大部分功能已经可以通过 Angular 的内置指令实现,但是我还希望能够迭代用于异步请求数据的各种服务的结果。

我需要的功能可以通过将服务注入控制器并将结果存储在范围内来轻松实现,但我希望有一种方法可以实现这一点而根本不需要控制器(具体来说,我是希望生成模板而不是手写它们)。

在 Angular 中是否有任何内置的方法来实现这一点(例如,一种将服务调用包含到重复表达式的方法)?如果不是,那么实现这一目标的最有效方法是什么?我假设我应该能够创建一个引用服务的新指令,但我不确定这是否是实现这一目标的正确方法。

【问题讨论】:

  • 您可以像使用控制器一样将服务注入指令。这足以满足您的需求吗?
  • 是否可以使用这种技术创建一个通用的“ng-repeat-service”指令,或者我需要为我想要使用的每个服务创建一个新指令?抱歉,如果这似乎是一个显而易见的问题,我实际上还没有正确使用 Angular,到目前为止,我仍在尝试确定它是否适合这项工作。

标签: angularjs angularjs-directive


【解决方案1】:

要制作通用指令,其中可以在 HTML 中声明服务而不是作为指令定义的一部分注入,可以使用 $injector:

<some_element ... my-directive service="myService">

指令:

myApp.directive('myDirective', function($injector) {
    return {
       link: function(scope, element, attrs) {
          var service = $injector.get(attrs.service);
          service.someMethod();
          ...
       }
    }
});

注意:我还没有测试上述技术是否真的有效,但我已经 tried the technique with controllers 并且它有效。

要使这项技术有用,您显然必须提出一个静态服务 API,并且只能使用使用该 API 的服务。

【讨论】:

  • +1 你也可以通过嵌套指令获得“花式”,让外部指令拉入服务,内部指令使用外部指令提供的任何服务。
猜你喜欢
  • 1970-01-01
  • 2020-04-21
  • 1970-01-01
  • 2021-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-06
相关资源
最近更新 更多