即使控制器$scope具有新值,导航部分也不会更新

Navigation partial not updating even though controller $scope has new value

本文关键字:导航部 更新 新值 控制器 scope      更新时间:2023-09-26

我们正在为一个客户端构建一个项目,该项目涉及一个动态导航栏、角度本地存储模块、一个授权服务、一个数据服务,以及两个部分,一个是导航栏部分,另一个是标头部分。我目前正在通过身份验证服务登录用户,然后使用 http.get 调用从服务器检索导航元素。然后,此值存储在名为 navElements 的 localStorage 元素中。代码如下:

指数:

<div class="main-container">
        <aside data-ng-include=" 'views/nav.html' "
               id="nav-container"
               class="nav-container"
               data-ng-class=" {'nav-fixed': admin.fixedSidebar, 'nav-horizontal': admin.menu === 'horizontal', 'nav-vertical': admin.menu === 'vertical'}"
               >
        </aside>
        <div id="content" class="content-container">
            <section data-ng-view
                     class="view-container {{admin.pageTransition.class}}"></section>
        </div>
    </div>

登录/导航元素放置

apiRequest(API_URL + 'Navigation').then(
    function(event){
       console.log(event);
       localStorageService.set("navElements", event);
       modalInstance.close(); 
       deferred.resolve(response);
       $location.url('/dashboard');
}

导航网页

<div class="nav-wrapper" data-ng-controller="DashboardCtrl">
<ul id="nav"
    class="nav"
    data-slim-scroll
    data-collapse-nav
    data-highlight-active>
    <li ng-if="initialized"><a href="#/dashboard"> <i class="ti-home"></i><span data-i18n="Dashboard"></span> </a></li> 
    <li ng-repeat="nav in navList">
        <a href="{{nav.ButtonPath}}" disabled>
            <i class="{{nav.IconPath}}"></i>
            <span data-i18n="{{nav.Title}}"></span>
        </a>
        <ul>
            <li ng-repeat="link in nav.Children">
                <a href="{{link.NavigationUrl}}">
                    <i class="ti-angle-right"></i>
                    <span data-i18n="{{link.Title}}"></span>
                </a>
            </li    >
        </ul>
    </li>
</ul>

仪表板控制器导航列表分配:

angular.module('app.DashboardCtrl', []).controller('DashboardCtrl',function ($q, $http, $scope, $location, $route, $window,  $modal, dataService, logger, localStorageService) {
   $scope.editMode=false;
   $scope.Rows = {};
   $scope.currentLocation = "";
   console.log($scope);
   $scope.navList = localStorageService.get("navElements");

奇怪的部分是,这些元素在重新加载页面后出现,但在清除cookie后的初始登录时,导航元素不存在。但是,导航元素驻留在控制器的$scope中,即使超时,$scope.$apply 也不起作用。还有一个控制台.log显示 $scope.navList 是在用户登录并转到仪表板视图后立即定义的。我对这个问题感到非常困惑,任何帮助/建议都会很棒。这个问题也存在于页面的另一部分,所以我怀疑它们是相关的。

我首先确定了导致此问题的原因。我的 HTML 正在加载多个控制器来处理页面上的各种请求。为了解决这个问题,我删除了每个页面的多个控制器,并为每个页面制作了一个控制器来处理每个页面所需的各种功能。看起来实际的范围及其数据在多个控制器中丢失了。