ngHide/ngShow 在单页应用程序中使用$rootScope



再次向大家寻求帮助。我正在构建一个 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

最新更新