2013-01-09 99 views
0

嘿,我試圖得到一個角度的感覺,並遇到了一個小障礙。viewContentLoaded - 沒有每個控制器的代碼重複 - AngularJS

我有一個容器結構如下所示:

<div class="main-container" ng-view> 
    <!-- The below divs are constantly being 
     reloaded based on the current URL and it's associated view --> 
    <div class="left-col"> 
    </div> 
    <div class="right-col"> 
    </div> 
</div> 

我實現的角度我剛做了一個簡單的腳本,將檢查窗口的高度,並設置左欄和右欄中的div的高度之前,因此。

使用angular可能有更好的方法來完成此操作,然後將事件函數附加到窗口對象。基本上,我想火的功能,每次一個新視圖渲染,但不重複下面的代碼在所有我的角度控制器,就像這樣:

$scope.$on('$viewContentLoaded', setColumnHeight); 

任何幫助,將不勝感激。謝謝!

回答

2

我在我的應用程序解決了這個問題由具有根「應用程序控制器」的DOM樹的頂端。例如:

<body ng-controller='applicationController'> 
... 
<div class="ng-view"></div> 
... 
</body> 

applicationController始終存在,並且可以在其創建時在其範圍上設置綁定。

0

你可以使用這樣的事情:

<div class="main-container" ng-view> 
    {{ setColumnHeight() }} 
    <!-- The below divs are constantly being 
     reloaded based on the current URL and it's associated view --> 
    <div class="left-col"> 
    </div> 
    <div class="right-col"> 
    </div> 
</div> 

,它將每一個渲染是由時間檢查高度,但是,這似乎是有點過處理。

最好的方法是隻更新兩個列的高度,當其中一個列的高度發生變化時。爲此,您可以使用DOM Mutation Observers,但它們尚未在所有瀏覽器上提供。如果這對您沒有問題,請檢查mutation-summary lib

如果你使用的是jQuery,你也可以試試這個:https://github.com/jqui-dot-net/jQuery-mutate(例子here)。

1

如何把在根範圍事件偵聽器:

$rootScope.$on('$viewContentLoaded', setColumnHeight);