2015-11-04 49 views
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 
    } 
    } 
}) 

這種方法是否正確?或者我應該如何定期寫作?

謝謝!

回答

1

你在找什麼是$timeout(fn)
fn將在控制器呈現後調用。

+0

Yeap,直接使用'$ timeout(fn)'。有用!所以'$ timeout'的函數只會在模板編譯和加載後運行,對吧? – KobeLuo

+0

是的,當我需要jquery的效果時,我多次在angularJs中使用'$ timeout'。 – user5488195