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>

在我实现Angular之前,我只有一个简单的脚本来检查窗口的高度,并相应地设置左列和右列div的高度。

对于angular,可能有一个更好的方法来做到这一点,然后将事件函数附加到窗口对象。基本上,我想在每次渲染新视图时触发一个函数,但不要在所有的角控制器中重复下面的代码,如下所示:
$scope.$on('$viewContentLoaded', setColumnHeight);

任何帮助都会很感激。谢谢!

我已经解决了这个问题在我的应用程序中有一个根"应用控制器"在DOM树的顶部。例如:

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

applicationController总是存在的,并且可以在它被创建时在它的作用域上设置绑定。

将事件侦听器放在根作用域:

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

你可以这样写:

<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-summary库。

如果你正在使用jQuery,你也可以试试这个:https://github.com/jqui-dot-net/jQuery-mutate(示例在这里)。

最新更新