[英]How to access DOM element of directive from another directive?
我正在嘗試在Directive的鏈接函數中訪問DOM元素。 該元素位於另一個指令的視圖中。 這是代碼:
第一指令
(function () {
'use strict';
angular.module("testAPP",[])
.directive('firstDirective', function(){
var directive = {
restrict: 'E',
templateUrl: 'firstDirective.html'
}
return directive;
})
})();
第二條指令
(function () {
'use strict';
angular.module("testAPP",[])
.directive('anotherDirective', function(){
var directive = {
restrict: 'E',
templateUrl: 'anotherDirective.html',
link: function($scope){
//element from another directive's view
var height = document.getElementByClassName("sky")[0].offsetHeight;
}
};
return directive;
});
})();
出現控制台錯誤,提示高度變量未定義。 我嘗試了超時功能,對我有用,但是我認為這不是一個好的解決方案:
setTimeout(function(){
var height = document.getElementByClassName("sky")[0].offsetHeight;
console.log(height);
});
我也嘗試過“ require ”,但它導致找不到指令的錯誤(我認為這可能是因為指令位於單獨的目錄中)
因此,您能告訴我為什么要求不起作用的原因,並建議我比超時更好的解決方案
首先,這似乎不是一個好主意,而且會被認為是“不好的做法”-您還必須更改指令的優先級,以使其能夠按需要的順序進行編譯進行編譯,以確保第二個指令嘗試訪問元素時第一個指令已准備就緒。
我認為,您的內容指令在第二個指令之前加載,在內容指令上添加ng-if
可能會解決此問題
angular.module("testAPP",[])
.directive('secondDirective', function(){
var directive = {
restrict: 'E',
templateUrl: 'secondDirective.html',
link: function($scope){
$scope.scondDirctiveLoaded = true;
}
};
return directive;
});
<second-directive></second-directive>
<div ng-if="scondDirctiveLoaded">
<content-directive ng-if="scondDirctiveLoaded" ></content-directive>
</div>
在DOM實際就緒之前實例化該指令時會發生此錯誤。 $ timeout的工作原理是將元素的獲取延遲到Angulars下一個刻度周期為止-雖然這感覺像是一種反模式,但似乎可以解決該問題。
與此類似的問題已經有了答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.