AngularJS UI-Router:抽象状态+子状态不起作用

时间:2015-09-23 13:38:11

标签: javascript angularjs state angular-ui-router

我试图使用抽象状态,但我无法加载孩子。

我的应用设置如下:

angular
  .module('milordApp', [
    'ui.router',
    'ngAnimate',
    'ngCookies',
    'ngMessages',
    'ngResource',
    'ngRoute',
    'ngSanitize',
   'ngTouch'
])
.run(function($rootScope) {
    $rootScope.$on('$routeChangeStart', function(event, toState,  toParams, fromState, fromParams) {
      console.log(toState, toParams, fromState, fromParams);
    });
})
.config(function($stateProvider, $urlRouterProvider){
    $urlRouterProvider.otherwise("/login");
    $stateProvider
      .state('login', {
        url: '/login',
        templateUrl: 'views/login.html',
        controller: 'LoginCtrl',
        data: {
          requireLogin: false
        }
     })
     .state('app', {
       abstract: true,
       url: '/app',
       data: {
        requireLogin: true
       }
     })
     .state('app.dashboard', {
       url: '/dashboard',
       templateUrl: 'views/dashboard.html',
       controller: 'DashboardCtrl',
     });
});

登录路线工作正常。但是,app或app.dashboard路由没有注册,因为我甚至无法从控制器调用console.log。

请注意index.html正在正确创建导航

<ul class="nav navbar-nav">
   <li><a ui-sref="login" href="#/login">Login</a></li>
   <li><a ui-sref="app.dashboard" href="#/app/dashboard">Dashboard</a></li>
</ul>

1 个答案:

答案 0 :(得分:3)

如果抽象状态的片段是真实的(按原样),问题应该像这样解决:

.state('app', {
   abstract: true,
   url: '/app',
   data: {
    requireLogin: true
   }
   // add template for child
   template: "<div ui-view></div>",
 })

简单地说,每个州都需要注入某个地方。如果我们不使用命名视图(甚至是绝对命名),则需要:

  

每个孩子都注入其父目标 ui-view