从孙子导航到父子时,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-UIproduction

以下是我的application configsn-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组件

单击链接时,Angularjs ui-view路由无法正常工作[关闭]

angularjs - 路由时如何保留当前视图数据

AngularJS ui-router

AngularJs,路由,创建多个路由的问题

angularJs ui-router路由之多视图实现菜单缓存切换