如何在angularjs中动态地将服务注入指令

时间:2014-08-06 19:13:01

标签: angularjs angularjs-directive

我的指示是使用删除按钮构建一个脚手架表。我有一个名为Post的服务设置,所以当我调用指令时我会在元素上包含一个servicename属性。如何根据我的服务名称属性I动态注入我的服务?或者有更好的方法吗?

var lassoDirectives = angular.module('lassoDirectives', []);

lassoDirectives.directive('autoTable', ['parse', function(parse) {
    return {
        restrict: 'AE',
        scope: {
            data: '=',
            modelname: '='
        },
        templateUrl: 'http://local.angular.com/webroot/app/templates/directives/auto-table.html',
        controller: function($scope) {
            console.log(parse);
            $scope.deleteItem = function(id) {
                console.log(id);
                // rocket = modelname.query();
                //console.log(rocket);
            }
            $scope.check = function() {
                parse.get("Posts", 123, function(response) {
                    console.log(response.toString());
                });
            }
        }
    };
}]);

1 个答案:

答案 0 :(得分:4)

我不确定这是解决问题的最佳方法。您可能应该只有一项服务,负责与此lassoDirective相关的所有数据,因此您可以正常注入它。

但您可以使用$injector提供商,例如......

.directive('autoTable', function($injector) {
  return {
    restrict: 'EA',
    scope: {
      servicename: '='
    },
    controller: function(scope) {
       var service = $injector.get(scope.servicename);

       scope.deleteItem = function(Id) {
         del = service.delete({Id: Id});
         items = service.query();
       };
    }
  }
});

如果您希望您的服务根据所点击的指令执行不同的操作,那么最好只传递与该指令相关的服务附加参数?不确定你的情况如何,如果N / A,请忽略这个常见。