2014-02-16 187 views
6

我是新來的角度。我想寫一個指令,它具有我在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指令Directive類和其他屬性。

輸出,我想:<select class="form-control" data-target="elementId"></select>

我用angular.element(element).attr(attr);,但它不工作;

任何幫助提前感謝。

編輯

我希望所有存在的鏈接功能ATTRS屬性被添加到markup

回答

4

根據您的需求的進一步使用的文檔here,你並不需要自己編譯。您可以使用模板並進行替換。

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

See plnkr

+1

我不知道這個答案是不能接受的,但是,但是謝謝你!這是一個非常簡單的解決方案,但我還沒有看到任何我已經完成的教程。 – Dustin

1

您可以使用邏輯函數的參數attrs - 這將讓你的屬性值:

attrs.classattrs.dataTarget是你需要的人。

你可以看看那個闡述邏輯函數

7

我會遍歷指令的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