簡體   English   中英

在AngularJS中獲取指令名稱

[英]Getting directive name in AngularJS

我有一個Angular指令。 link函數中,我這樣做:

link: function(scope, element, attrs) {
    ...
    element.data('startY', value);
    ...
}

我想做的是使用指令名稱加上前綴'startY' ,而無需對名稱進行硬編碼。 我想動態獲取名稱。

有什么辦法嗎? Angular是否提供一種反映方式? 就像是:

link: function(scope, element, attrs) {
    ...
    element.data(this.$name + '-startY', value);
    ...
}

如果不是,那么為避免沖突而選擇data()鍵的推薦最佳實踐是什么?

AngularJS源代碼所示 ,在您的指令選項所在的對象文字的上下文中分配指令的名稱。 但是,鏈接函數無法訪問對象文字的上下文this ,因為它將被傳遞到編譯函數,在編譯過程完成后,該函數將被返回並調用該函數。

要在鏈接函數中獲取名稱,可以遵循以下任何建議:

[1]創建一個變量,該變量可以包含對對象文字的引用(指令選項)。

.directive('myDirective', function() {
  var dir = {
    link: function(scope, elem, attr) {
      console.log(dir.name);
    }
  };
  return dir;
});

[2]由於指令是在指令選項的上下文中調用的,因此您還可以使用編譯函數來獲取指令的名稱。

.directive('myDirective', function() {
  return {
    compile: function(tElem, tAttr) {
      var dirName = this.name;
      return function(scope, elem, attr) { /* link function */ }
    }
  };
});

據我所知,您已經回答了自己的問題。 您可以在完成時使用字符串串聯作為名稱的前綴,但是將其添加為單獨的數據存儲可能會更容易。

element.data('directiveName', this.$name).data('startY', value);

我不確定避免沖突的含義,因為這僅適用於傳遞給鏈接函數的元素。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM