角度路线没有错误但没有工作

时间:2014-04-05 16:42:35

标签: javascript angularjs angular-ui angular-ui-router

这很简单,但我不知道什么是错的。我有以下示例,使用角度ui-router和角度1.2.16制作一个简单的Web模板。

     <script type='text/javascript' src='angular.js'></script>
     <script type='text/javascript' src='angular-ui-router.js'></script>
     <script type='text/javascript' src='js/me/app.js'></script>

我已经写了app.js和index.html这样的东西

app.js

angular.module('app',[
    'ui.router'

])
.config(['$urlRouterProvider','$stateProvider'],function($urlRouterProvider,$stateProvider){
    $urlRouterProvider.otherwise('/');

    //console.log($urlRouterProvider);

    $stateProvider
    .state('home',{
        url:'/',
        templateUrl:'home.html'
    })
})

并且index.html是

    <body ng-app="app">
           <header ng-include="'header.html'"></header>
            <!-- End of Header -->
           <div ui-view="''"></div>
           <footer ng-include="'footer.html'"></footer></body>

我的页眉和页脚正常工作。这是一个很好的第一步。但是当我尝试路线时,没有任何反应。

在我的控制台中根本没有错误..我不明白,这是什么问题?我认为这很简单。也许是因为我对角度很新。因此,如果您可以提供解决方案,请提供帮助。

2 个答案:

答案 0 :(得分:7)

状态更改错误通常不会显示在控制台中。您需要添加一个错误监听器,以便查看出现了什么问题:

$rootScope.$on('$stateChangeError', function(event, toState, toParams, fromState, fromParams, error) {
  $dialogs.error("Something went wrong!", error);
  console.error("$stateChangeError: ", toState, error);
});

您的模板很可能不在您指定的位置或类似的位置。

答案 1 :(得分:0)

我的问题在我的网址中是一条糟糕的道路:

  

检查网址! http://example.com/#/未注册且$ stateProvider不会告诉您它的错误。

     

我只需从我的网址中删除&#34; /#/&#34;

我想在某个地方添加了一个哈希,但是我遇到了与OP相同的问题:页眉和页脚很好,但<ui-view></ui-view>

内没有

不知道为什么开发人员会这样做,以便当你进入未注册的路径时,它不会出现任何错误或任何形式的错误,但是你去了......

如何永久解决此问题:

$stateProvider会覆盖$urlProvider,因此.otherwise无法正常工作。

添加otherwise州:

/// OP's code ///
$stateProvider
  .state('home',{
    url:'/',
    templateUrl:'home.html'
  })                       

                              // Just add a new state
  .state('otherwise',{
    url:'*path',              // uses regex, and doesn't mess up preceding state urls
    templateUrl: 'home.html'  // sends the user back home if a bad url happens
  })

回应使用$rootScope

虽然@GlenFilson的答案没有提供任何迹象表明路径不正确,但我能够找出 他的答案应该去哪里:

var app = angular.module(...); // can't inject $rootScope here except through providers (e.g., $httpProvider)
app.config(...);               // nor here

// define app.run() after configuration

app.run(function($rootScope){
    $rootScope.$on('$stateChangeError', function(event, toState, toParams, fromState, fromParams, error) {
      $dialogs.error("Something went wrong!", error);
      console.error("$stateChangeError: ", toState, error);
    });
})