即使控制器 $scope 具有新值,导航部分也不会更新
Navigation partial not updating even though controller $scope has new value
我们正在为客户构建一个项目,涉及动态导航栏,angular-local-storage模块,授权服务,数据服务,两个部分,一个是导航栏部分,另一个是header 部分。我目前正在通过 Authservice 登录用户,然后使用 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');
}
导航html
<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 后首次登录时,nav 元素不存在。但是,导航元素位于控制器的 $scope 中,并且 $scope.$apply 不起作用,即使超时也是如此。此外,console.log 显示 $scope.navList 在用户登录并被带到仪表板视图后立即定义。我对这个问题很困惑,任何帮助/建议都会很棒。页面的另一部分也存在这个问题,所以我怀疑它们是相关的。
我首先确定了导致此问题的原因。我的 HTML 正在加载多个控制器来处理页面上的各种请求。为了解决这个问题,我删除了每个页面的多个控制器,并为每个页面制作了一个控制器来处理每个页面所需的各种功能。看起来实际的示波器和它们的数据在多个控制器中丢失了。
我们正在为客户构建一个项目,涉及动态导航栏,angular-local-storage模块,授权服务,数据服务,两个部分,一个是导航栏部分,另一个是header 部分。我目前正在通过 Authservice 登录用户,然后使用 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');
}
导航html
<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 后首次登录时,nav 元素不存在。但是,导航元素位于控制器的 $scope 中,并且 $scope.$apply 不起作用,即使超时也是如此。此外,console.log 显示 $scope.navList 在用户登录并被带到仪表板视图后立即定义。我对这个问题很困惑,任何帮助/建议都会很棒。页面的另一部分也存在这个问题,所以我怀疑它们是相关的。
我首先确定了导致此问题的原因。我的 HTML 正在加载多个控制器来处理页面上的各种请求。为了解决这个问题,我删除了每个页面的多个控制器,并为每个页面制作了一个控制器来处理每个页面所需的各种功能。看起来实际的示波器和它们的数据在多个控制器中丢失了。