如何将元素的属性添加到angular指令

时间:2014-02-16 15:34:32

标签: angularjs angularjs-directive

我是棱角分明的新人。我想写一个指令,它具有我在html中使用时添加到它的所有属性。例如:

这是我的指示

'use strict';
app.directive('province', function($compile) {
    return {
        restrict: 'E',
        link: function (scope, element, attrs, controller) {
            var markup = "<select></select>";
            var elem = angular.element(element);
            elem.replaceWith($compile(markup)(scope));
         }
    };

})

HTML:

<province class="form-control" data-target"elemntId"></province>

我希望我的<select>包含我在html中添加到指令的类和其他属性。

我想要的输出:<select class="form-control" data-target="elementId"></select>

我使用了angular.element(element).attr(attr);,但它没有用;

提前感谢任何帮助。

修改

我希望将链接函数的attrs中存在的所有属性添加到markup

3 个答案:

答案 0 :(得分:8)

我将遍历指令的attr数组并将其应用于您的模板:

app.directive('province', function($compile) {
return {
    restrict: 'E',
    replace:true,
    template: "<select></select>",
    link: function (scope, element, attrs) {
      var attr;
      for (attr in attrs.$attr) {
        if(attrs.hasOwnProperty(attr)){
          element.attr(attr, attrs[attr]);
        }
      }
     }
};

})

指令标签:

<province foo="bar" foo1="bar1"></province>

编译成:

<select foo="bar" foo1="bar1"></select>

Plunkr

答案 1 :(得分:5)

根据您的需要,您无需自行编译。您可以使用模板替换。

app.directive('province', function() {
    return {
        restrict: 'E',
        template: '<select></select>',
        replace: true,
        link: function (scope, element, attrs) {
        }
    };
});

See plnkr

答案 2 :(得分:1)

您可以使用链接功能的attrs参数 - 这将获得属性的值:

attrs.classattrs.dataTarget是您需要的。

您可以查看详细说明链接功能的进一步用途的文档here