[英]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.