AngularJS:UI路由器无声失败

时间:2015-03-26 15:54:31

标签: angularjs angular-ui-router

我有一个非常简单的角度ui路径结构:

的index.html:

<div class="container">
  <div class="header" ui-view="header"></div>

  <div ui-view></div>
</div>

的app.config:

   $stateProvider
      .state('app', {
        abstract: true,
        views: {
          'header@': {templateUrl: 'views/header.html', controller: 'HeaderCtrl'}
        }
      })
      .state('app.home', {
        url: '/',
        views: {
          '@': {templateUrl: 'views/main.html', controller: 'MainCtrl'}
        }
      })

但是,上面没有任何内容,控制台中没有错误。当我将console.logs添加到MainCtrl或HeaderCtrl时,它们不会运行。我在another ui-router silent failure question的角度'run'函数中添加了一个调试监听器。

.run(['$rootScope', function($rootScope) {
    $rootScope.$on('$stateChangeStart',function(event, toState, toParams, fromState, fromParams){
    console.log('$stateChangeStart to '+toState.to+'- fired when the transition begins. toState,toParams : \n',toState, toParams);
  });
  $rootScope.$on('$stateChangeError',function(event, toState, toParams, fromState, fromParams, error){
    console.log('$stateChangeError - fired when an error occurs during transition.');
    console.log(arguments);
  });
  $rootScope.$on('$stateChangeSuccess',function(event, toState, toParams, fromState, fromParams){
    console.log('$stateChangeSuccess to '+toState.name+'- fired once the state transition is complete.');
  });
  // $rootScope.$on('$viewContentLoading',function(event, viewConfig){
  //   // runs on individual scopes, so putting it in "run" doesn't work.
  //   console.log('$viewContentLoading - view begins loading - dom not rendered',viewConfig);
  // });
  $rootScope.$on('$viewContentLoaded',function(event){
    console.log('$viewContentLoaded - fired after dom rendered',event);
  });
  $rootScope.$on('$stateNotFound',function(event, unfoundState, fromState, fromParams){
    console.log('$stateNotFound '+unfoundState.to+'  - fired when a state cannot be found by its name.');
    console.log(unfoundState, fromState, fromParams);
  }); 

然而,唯一触发的是viewContentLoaded(2x)。记录的事件对象使我无法深入了解它所呈现的内容。

我还仔细检查过views /文件夹是否有header.html和main.html,而且views /与index.html处于同一级别(其中头部有<base href="/">)。< / p>

我完全失去了。我希望如果找不到控制器,我会从angular获得某种提供程序错误,如果.html文件的路径关闭,我会得到404错误。加载的内容似乎是两次触发,每个状态视图一次,但控制器从不运行,HTML永远不会出现。

是的,我甚至在index.html文件中添加了一些静态HTML,以确保我正在查看正确的页面。我是。

2 个答案:

答案 0 :(得分:2)

我使用相同的设置创建了working plunker

据我了解,您使用的是 html5mode ,因此添加了以下内容:

$locationProvider
  .html5Mode({enabled:true, requireBase:false})

其余的都一样有效。希望这可以提供一些见解......一些不同的看法......

答案 1 :(得分:0)

如果找不到路由,ui-router会因某种原因无声地失败。在我的情况下,这是因为斜杠。

在其中一个位置放置断点以帮助查找错误:

UrlMatcher.prototype.exec = function

if (otherwise) check(otherwise);