2012-11-02 73 views
1

好吧,所以我知道在使用AngularJS時,在控制器中執行任何DOM操作被認爲是不好的做法,您應該使用指令和$ scope作爲那些東西,但是事件綁定又如何呢?從外觀上看,考慮到所有內置的事件指令,例如ngClick,ngMousedown,ngMouseenter等等,也是不滿的......但是如果是這樣的話,那麼我有一段代碼,我不知道如何做AngularJS的方式。事件綁定AngularJS方法?

我正在構建的應用程序有無限滾動和它與這段代碼執行(即目前生活在一個控制器):

$(document).bind('scroll', function(){ 
    if(!$scope.loadingIssues && $(window).scrollTop() + $(window).height() >= $('.user-feedback-list').offset().top + $('.user-feedback-list').height()) { 
     $scope.loadIssues(); 
    } 
}); 

這允許用戶滾動頁面和頁面獲取時到存儲具有無限滾動的數據的元素的底部,它觸發該函數以加載更多數據。現在我沒有執行任何DOM操作,所有函數只是更新附加到$ scope的數據,我讓AngularJS執行DOM更新,但是將此事件與AngularJS的最佳做法綁定?如果是這樣,我怎麼能夠以AngularJS的方式做到這一點(我不認爲一個指令會在這種情況下工作,因爲我不認爲可以附加一個指令到文檔對象)?

+0

我想我會嘗試使用服務並運行來處理它 – maxisam

+0

當你說「運行處理它」你的意思是「學會處理它」嗎?否則我不知道這意味着什麼。 – ryanzec

+0

不,我的意思是http://docs.angularjs.org/api/angular.Module,運行(initializationFn),使用這種方法註冊工作,當與當前模塊的注入器完成加載時需要執行的工作。我認爲這可能會有所幫助。 – maxisam

回答

1

我不認爲目前有一種AngularJS方式來做這種事件綁定。據我所知,爲所有失蹤事件添加本地支持正在進行中,但它尚未在任何穩定版本中發佈。

所以現在我們必須像你在你的問題中說的那樣去做。

我認爲,雖然,你需要做到這一點,使其工作:

$scope.$apply(
    function() { 
     $scope.loadIssues(); 
    } 
); 

這是因爲你在處理來自AngularJS之外的事件。 $ apply事件確保AngluarJS得到任何模型更改的通知以及像loadIssues()調用可能發生的情況。