我的应用程序中有 ng-view 和近 40 个控制器,我有两个按钮块,其中一个块我只在主页上显示,第二个块我在休息页面上显示(我在示例中简化了两个按钮块)。而且在某些页面上我根本不需要那个按钮。
<div id="body">
<div id="header" ng-if="!hideHeader">
<button class="button" ng-if="mainPage"/>
<button class="button" ng-if="!mainPage"/>
</div>
<div ng-view=""/>
<div>
这些按钮属于 $rootScope 并且元素可见或隐藏取决于根范围变量。我在根范围上创建了监听器,每次路由更改时都会调用它。但是在那种情况下,我看到在 ng-view 更改视图之前,一个按钮块在另一个按钮块上发生了更改,这很烦人。
$rootScope.$on('$routeChangeStart', function(next, current) {
$rootScope.hideHeader = true;
});
第二种解决方案是在控制器中设置 hideHeader 变量。但在那种情况下,我需要在每个控制器中设置这个变量。在这种情况下,解决方案将难以支持。例如,我将添加另一个只想显示在一个页面中的按钮块,这意味着我需要重写所有控制器。
什么是最好的解决方案?