2016-02-04 37 views
0

我的目標相對簡單。我希望能夠在<ul>列表中顯示一個滾動條內的按鈕。當滾動條變得可見時更新ng-show

要做到這一點,我添加下面的jQuery插件,以檢查是否有我的名單上的滾動條:

(function($) { 
    $.fn.hasScrollBar = function() { 
     return this.get(0).scrollWidth > this.width(); 
    } 
})(jQuery); 

此代碼工作得很好,所以我把調用這個hasScrollBar()功能的方法我的控制器這樣的:

$scope.hasGoTabButtonToBeDisplayed = function() { 
    return $("#tabset>ul").hasScrollBar(); 
} 

,而且我用ng-show指令,以顯示我的按鈕只有在有我的名單上的滾動條:

<button type="button" 
class="btn btn-xs" 
style="float:left;" 
ng-show="hasGoTabButtonToBeDisplayed()" 
ng-click="onGoLeftTabButtonClicked()"> 
    <span class="glyphicon glyphicon-triangle-left" aria-hidden="true"></span> 
</button> 

當我加載頁面時,如果我的列表中有一個滾動條,但是如果我調整我的窗口的大小和滾動條的顯示,按鈕的顯示不會改變,這意味着我的hasGoTabButtonToBeDisplayed()方法是不叫。我明白爲什麼不調用這個方法,因爲Angular無法檢測到這個變化,但我不知道該怎麼做。

也許我有一個錯誤的邏輯來解決這樣的問題?

回答

0

其實,我找到了一個解決方案。我不知道這是最好的解決方案還是好的解決方案,但它似乎有效。

所以要解決我的問題,我只是抓住我在我的範圍窗口的resize事件,我稱之爲$scope.$digest()方法是這樣的:

angular.element($window).bind('resize', function() { 
    $scope.$digest(); 
});