2016-08-02 89 views
0

夥計們,我有以下指令:呼叫功能被加載AngularJS

angular.module('blah').directive('someDirective', function() { 
    return { 
     scope: { 
      arrayParam1: '=arrayParam1', 
      arrayParam2: '=arrayParam2' 
     }, 
     restrict: 'E', 
     templateUrl: '/my/path/to/someDirective.tpl.html', 
     link: function (scope, elem, attrs) { 
      //Some logic 
      scope.someEvent = function(){ 
       //some logic 
      } 
      scope.$on('$viewContentLoaded', function() { 
       debugger; 
       scope.someEvent(); 
      }); 
     } 
    }; 
}); 

現在,在HTML我有一個NG重複在陣列中的一個(arrayParam1爲例),我顯示一些東西。現在我的目標就是在HTML完全加載後(通過ng-repeat的迭代完成)觸發scope.someEvent

那麼當我使用$在它甚至不停止在調試器上。如果我將它更改爲$ watch它在JS完成所有代碼後停止,但HTML仍未呈現,並且在視圖完成之前觸發了我想要的內容。

在此先感謝。

+0

可以使用超時,而不是viewContentLoaded的 –

+0

這聽起來像一個XY問題。你想達到什麼目的? – Iso

+0

@TheMechanic嗯,我知道超時,但我希望它儘可能清楚地做到這一點。 @ Iso這個目標比我寫的例子要複雜得多。我正在用ng-repeat創建手風琴,並且在HTML中完成之後,我想dynamiclly將元素添加到每個窗格(來自js)。 –

回答

1

使用$超時。

$timeout(function() { 
    scope.someEvent();   
}); 

這會有所幫助。

,或者如果你不想使用$超時你必須做的就是再拍指導家長該指令並執行或觸發功能的父母鏈接階段

+2

使用'timeout'的錯誤做法。 –

+0

是的,它是壞的。但是他所要做的就是爲此指令創建另一個指令父項,並在父母鏈接階段執行或觸發該函數。 –