AngularJS $location.path() изменен после обновления до 1.1.15

У меня есть NavigationController, у которого есть selectedItem для текущего выбранного элемента в списке навигации. Он использует $location.path(), чтобы попытаться установить значение по умолчанию. Это в режиме хэш-бэнга. Вот упрощенная версия:

App.controller("NavigationController", ['$scope', '$location', function($scope, $location) {
   $scope.currentSelection = $location.path() || "/dashboard";
   $scope.select = function( name ) {
       $scope.currentSelection = name;
   }
}]);

И html:

<body ng-app="App">
  <div class="container-fluid absoluteFill">
    <div class="row-fluid fill" ng-controller="NavigationController">
       <div class="span2 nav-bubble fill">
          <ul class="nav nav-list">
             <li>Option 1</li>
             <li>Option 2</li>
             <li>Option 3</li>
          </ul>
       </div>
       <div ng-view></div>
     </div>
  </div>
</body>

И конфиг:

angular.module("App", ["ngResource"])
   .config(function($routeProvider) {
      $routeProvider.
         when( '/', { redirectTo: '/dashboard' }).
         when( '/dashboard', {
            controller: 'DashboardController',
            templateUrl: '/gpa/app/views/dashboard.html'
        }).
        otherwise({redirectTo: '/'});
   })

Проблема в том, что когда я перехожу к /home/index (без хеш-банга), $location.path() возвращает «/index», где он раньше возвращал null до 1.1.15. Однако, если я перехожу к «/home/index#/dashboard», он возвращает «/dashboard», как и ожидалось. Я пытался перенаправить, когда кто-то переходит к «/» на «/dashboard», но NavigationController вызывается до перенаправления, поэтому он продолжается. чтобы получить "/индекс".

Итак, как я могу хотя бы сказать, когда хеш-банг не включен? $location.hash() всегда возвращает "". Я не хочу жестко кодировать «/index» в своем коде, чтобы знать, когда в URL-адресе ничего нет.


person chubbsondubs    schedule 21.06.2013    source источник
comment
redirectTo: "/ это опечатка? Разве это не должно быть redirectTo: "/"?   -  person starcodex    schedule 21.06.2013
comment
Да просто опечатка. Я копирую код и редактирую его, удаляя те части, которые не имеют отношения к проблеме.   -  person chubbsondubs    schedule 21.06.2013


Ответы (1)


Я думаю, вы хотите использовать службу $route и подключиться к событию $routeChangeSuccess.

App.controller("NavigationController", function($scope, $location) {
    $scope.$on("$routeChangeSuccess", function (scope, next, current) {
        $scope.currentSelection = $location.path() || "/dashboard";
    });
    $scope.select = function( name ) {
        $scope.currentSelection = name;
    }
});
person squirly    schedule 21.06.2013