无需控制器即可迭代服务结果的指令

时间:2013-02-06 13:38:00

标签: angularjs angularjs-directive

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

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

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

1 个答案:

答案 0 :(得分:2)

要制作通用指令,可以在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的服务。