角。限制:' A'指示。传递对象

时间:2015-01-01 06:18:44

标签: angularjs angularjs-directive

有没有办法将配置对象传递给定义为属性指令的自定义指令?

我在Controller中有一个我想发送给指令的对象:

$scope.configObject = {
    count: 5,
    mode: 'fast',
    getData: myService.getData // function of external service that avaliable in controller
}

在我的视图中我声明了指令:

<div class='list-class' my-list='configObject'></div>

指令如下:

return {
    restrict: 'A',
    link: function(scope, elem, attrs) {
        var config = angular.fromJson(attrs.myList);
    }
}

我试图使用angular.getJson获取配置对象 - 但它不适用于函数(它只能获得计数和模式)。 .getJson()是不正确的获取配置的方法吗?

另外(我猜它甚至不可能) - 有没有办法让配置对象避免访问

attrs.myList

直接?我的意思是如果我从

更改指令的初始化
.directive('myList', function() { ... }) to
.directive('myCustomList', function() { ... })

我应该更改对

的访问
attrs.myCustomList

因为视图看起来像

<div class='list-class' my-custom-list='configObject'></div>

3 个答案:

答案 0 :(得分:8)

如果需要,可以使用隔离范围传递

return {
    restrict: 'A',
    scope: { config : '=myList' }
    link: function(scope, elem, attrs) {
        //access using scope.config
    }
}

或者已经回答你可以从attrs解析它

      $parse(attrs["myList"])(scope);

并且如果您将指令更改为myCustomList,则必须更改代码

    scope: { config : '=myCustomList' }

      $parse(attrs["myCustomList"])(scope);

答案 1 :(得分:2)

您可以使用$ parse服务来获取配置对象。

(function(){
    var directiveName = 'myList';
    angular.module('YourModule').directive(directiveName,['$parse',function($parse){
        return {
            restrict: 'A',
            link: function(scope, elem, attrs) {
                var config = $parse(attrs[directiveName])(scope);
            }
        };
    }]);
})();

答案 2 :(得分:1)

你可以$ eval属性

 link: function(scole, element, attrs) {
      var config = scope.$eval(attrs['myList']);
  }