AngularJS.将服务作为指令的论据

ses*_*ses 12 angularjs

我有自己的指示: <form-wrapper>

现在这个指令使用自己的内部控制器,使用一些Service(User服务)

像这样:

 directives.directive("formWrapper", ['User',  function(User) {
        return {
         ...        
         controller: function($scope, $location, User) {

                    $scope.fields = User.get( {id: "1"}  );              // GET
        ...
Run Code Online (Sandbox Code Playgroud)

如您所见:我使用硬编码的 Service(User).

问题:我如何将服务作为指令的参数?要像这样使用它:

  Service = comesFromArgument
  $scope.fields = Service.get( {id: "1"} )
Run Code Online (Sandbox Code Playgroud)

我想如果我将服务名称作为字符串(作为服务名称)传递它将无济于事.传递参数通常发生在link-function控制器中但不在控制器中.

更新(更多解释):

当使用directives.directive("formWrapper", ['User', function(User) {名称'User'导致注入用户服务时,因为这就是IoC在这里工作的方式.它知道这是一项服务.但如果我做了:

<form-wrapper service="User"> // 这就是我要的.

然后,"用户"将只是一个字符串,而不是对用户服务的引用.

mus*_*_ut 18

您可以使用angular的$injector服务在控制器中为字符串注入服务.

在HTML中:

<form-wrapper my-attr-with-service="User">
  ...
</form-wrapper>
Run Code Online (Sandbox Code Playgroud)

在指令定义中:

controller: function ($scope, $element, $attrs, $injector) {
    var myService = $injector.get($attrs.myAttrWithService);
    // ...
}
Run Code Online (Sandbox Code Playgroud)