从孙子导航到父子时,AngularJS UI 路由器数据仍然存在
Posted
技术标签:
【中文标题】从孙子导航到父子时,AngularJS UI 路由器数据仍然存在【英文标题】:AngularJS UI Router data persists when navigating from grand-child to parent 【发布时间】:2015-06-04 16:14:00 【问题描述】:我在从孙子 (/dashboard/1/production
) 导航到父 (/dashboard
) 时遇到奇怪的问题,可能是缓存问题。
以下是几张截图:
不应保留选择,即 Delphi-UI
和 production
。
以下是我的application config
sn-p:
$stateProvider
.state('root',
url: '/',
views:
'header':
templateUrl: 'ngapp/templates/header.html'
)
// dashboard routes
.state('root.dashboard',
url: 'dashboard',
views:
'content@' :
templateUrl: 'ngapp/home/templates/dashboard.html',
controller: 'DashboardCtrl',
controllerAs: 'vm'
)
.state('root.dashboard.app',
url: '/id:int',
views:
'body@root.dashboard' :
templateUrl: 'ngapp/home/templates/dashboard-body.html',
controller: 'DashboardBodyCtrl'
)
.state('root.dashboard.app.env',
url: '/:name',
views:
'body@root.dashboard' :
templateUrl: 'ngapp/home/templates/env-content.html',
controller: 'EnvContentCtrl'
);
而DashboardCtrl
是:
controllers.controller('DashboardCtrl', ['$scope', '$http', '$state', '$timeout', 'appsFactory', function($scope, $http, $state, $timeout, appsFactory)
$scope.envs = [];
$scope.deps = [];
$scope.envBtnText = $scope.appBtnText = "Choose here";
$scope.headerTitle = "Environment Configuration And Management";
$scope.appStatus =
isopen: false
;
$scope.envStatus =
isopen: false
;
appsFactory.list(function(data)
$scope.apps = data;
);
]);
完整的控制器代码:http://goo.gl/BWtiU5
项目托管在这里:https://github.com/budhrg/atlantis-dashboard
此外,导航回Atlantis UI(dashboard)
不会像
$scope.envs
、$scope.deps
、$scope.envBtnText
和 $scope.appBtnText
。
这里可能有什么问题?我错过了什么吗?
【问题讨论】:
【参考方案1】:嵌套状态和视图
当应用程序处于特定状态时——当状态为“活动”时——它的所有祖先状态也隐式地处于活动状态。下面,当“contacts.list”状态处于活动状态时,“contacts”状态也隐式处于活动状态,因为它是“contacts.list”的父状态。
您的控制器没有被重新实例化(预期)。有几种方法可以解决这个问题。
见:
How to make angular ui-router's parent state always execute controller code when state changes?【讨论】:
以上是关于从孙子导航到父子时,AngularJS UI 路由器数据仍然存在的主要内容,如果未能解决你的问题,请参考以下文章
当UiRouter路由改变时观察和显示通知的AngularJS组件