1
我寫了一個'light-gallery'指令。它需要jquery.lightgallery.js
插件來初始化$.fn.lightGallery()
函數,這些函數在編譯和加載指令模板後必須執行。Angular指令不會發出'viewContentLoaded'事件
但是,Angular指令不會在link
函數中發出'viewContentLoaded'事件。所以我想問我怎麼知道指令模板編譯和加載的時間?
現在,我使用$timeout
偵聽範圍值,如果它已被編譯。範圍值編譯完成後,可以運行oncompiled
函數。看:
myApp.directive("light-gallery", function(){
return {
restrict: "E",
scope: {},
replace: true,
template: '<div compiled="{{compiled}}"></div>',
link: function(scope, elem, attrs){
var onCompiled = function(){
$("#lightgallery").lightGallery();
};
var recur = function(){
// when the attr `compiled` values `true`
// it means template compiled and loaded
if("true" === elem.attr("compiled")){
onCompiled();
}else{
setTimeout(recur, 100);
}
};
recur();
// to tell template compiled
scope.compiled = true
}
}
})
這種方法是否正確?或者我應該如何定期寫作?
謝謝!
Yeap,直接使用'$ timeout(fn)'。有用!所以'$ timeout'的函數只會在模板編譯和加載後運行,對吧? – KobeLuo
是的,當我需要jquery的效果時,我多次在angularJs中使用'$ timeout'。 – user5488195