2014-11-05 64 views
0

我正在使用twitter bootstrap,angular和jquery來試圖解決這個問題。如何通過使用上面的div和下面的div來動態更新div的最大高度?

我有一個左邊的div裏面有4個div。這個左手div的寬度爲300px,高度爲100%。

第一個div從隱藏起始,可以更改大小,因爲它顯示三種不同的錯誤消息之一,以及用戶所做的選擇。這個div在它的一些子元素上有一個ng-show屬性和ng-show屬性。

第二個div始終是相同的大小,以及第四個div。第四個div的位置永遠在底部。

第三個div裏面有個表格。我想在此表上設置最大高度,以便我可以在此div上設置overflow-y:auto。

有沒有辦法看第二個div的底部,以便我可以計算出可用高度?

我有這樣的代碼,但是,它執行的NG-顯示完成之前,使其錯誤的大部分時間:

app.directive('adjustTableHeight', ['$window', function($window) { 
    return { 
     restrict: 'A', 
     link: function(scope, element) { 
      var w = angular.element($window); 
      scope.getUpperDivBottom = function() { 
       var upperDiv = angular.element('#secondDiv'), 
        upperDivBottom = upperDiv && upperDiv.length ? (upperDiv.position().top + upperDiv.outerHeight(true)) : 0; 
       return Math.round(upperDivBottom); 
      }; 
      scope.$watch(scope.getUpperDivBottom, function (newValue, oldValue) { 
       var lowerDiv = angular.element('#fourthDiv'), 
        lowerDivTop = lowerDiv && lowerDiv.length ? lowerDiv.position().top : 0; 
       console.log('upperDivBottom', newValue, oldValue); 
       console.log('lowerDivTop', lowerDivTop); 
       console.log('height', Math.round(lowerDivTop) - newValue); 
       element.css('max-height', Math.round(lowerDivTop) - newValue); 
      }, true); 
      w.on('resize', _resize); 
      scope.$on('$destroy', function() { 
       w.off('resize', _resize); 
      }); 
      function _resize() { 
       scope.$apply(); 
      }; 
     } 
    }; 
}]); 
+0

看看承諾。 – Gjohn 2014-11-05 23:34:57

+0

關鍵是我不想編碼每個項目,可以改變我的div的大小,這是至少5在這一點上,可能會更晚。沒有可以在渲染之後完成的檢查,而不是在摘要之後?我之前使用回調函數在普通JavaScript中編寫了這個代碼,這對我的承諾並沒有什麼不同。我希望有一個更清潔的解決方案。 – user1209809 2014-11-06 16:14:50

回答

0

所以,我是有這個問題,我是試圖監視角度無法控制的項目,如div的位置。一旦我修改了代碼來監視正在更改的範圍變量並添加了$ timeout,我就停止了所有問題,並且所有事情都開始正常運行。

scope.$watchGroup(['item1, 'item2'], 
    function(newValues, oldValues, scope) { 
     $timeout(function() { 
      setMaxHeight(); 
     }, 0); 
    } 
);