再次向大家寻求帮助。我正在构建一个 SPA,其中我的布局(母版)页面分为三个部分左侧导航栏、中心内容、右侧项目列表栏。加载主页时,我的右侧项目列表应隐藏,但应在其余屏幕中可见。我在 homeController 中创建了一个 $rootScope 变量,并根据位置路径将值设置为"true",并在模板中使用该变量将值设置为 ngHide。当我在使用 SPA 时导航到其他页面时,我的左右栏不会再次加载,只有我的中心内容会加载,这是一个新视图。在将数据发送到新视图模板的控制器中加载新视图时,我将在 homeController 中创建的$rootScope变量重置为"false",但我的右栏仍然不可见。我可以看到 ng 隐藏类仍在打开,尽管插注已将值更新为"true"。任何建议将不胜感激。
布局页面中的标记:
<aside class="right_bar" ng-hide="{{$root.show}}">
<div class="my-list"><span class="f3">My Cart</span><div class=""><span class="list-count">0</span></div></div><div class="list-item"><ul></ul></div>
</aside>
首页控制器代码:
function getHomeConfigsCtrl($http, $location, $rootScope) {
$rootScope.show = false;
var loc = $location.path();
if (loc === '/Home/Index' || loc ==='')
{
$rootScope.show = true;
}
}
分类目录 控制器代码:这是我重置$rootScope变量值的地方
function getAllCategoryDetails($routeParams,$rootScope) {
$rootScope.show = false;
}
关于角度,你需要知道两件事才能使你呈现的代码工作:
-
您不需要在 ng 指令中使用
{{}}
插值,而是使用ng-hide="showCart"
。 -
假设所有控制器都在同一个角度应用程序中,同一应用程序中的所有作用域都继承自同一根,即您在$rootScope上定义的任何内容都将可供所有人使用子作用域。要从应用程序的任何视图中访问 $rootScope.x,您所要做的就是:{{x}} 或者,在您的情况下,您在指令中使用它,您可以执行以下操作:
<aside class="right_bar" ng-hide="showCart">
这将查找您当前的范围,如果它有一个 showCart,那么它将使用它,否则它将获取 $rootScope.showCart