Angularjs 1.6.0 (последние сейчас) маршруты не работают

Я ожидал увидеть этот вопрос в Stackoverflow, но не сделал этого. По-видимому, я единственный, у кого есть эта проблема, которая кажется мне очень распространенной.

У меня есть базовый проект, над которым я работаю, но маршруты, похоже, не работают, хотя все, что я сделал до сих пор, кажется правильным.

У меня есть этот кусок html в моем файле index.html:

<html>
<head ng-app="myApp"> 
    <title>New project</title>
    <script src="https://code.angularjs.org/1.6.0/angular.min.js"></script>
    <script src="https://code.angularjs.org/1.6.0/angular-route.min.js"></script>

    <script src="app.js"></script>
</head>
<body>
    <a href="#/add-quote">Add Quote</a>
    <div ng-view ></div>
</body>
</html>

и вот мой app.js:

var app = angular.module('myApp', ['ngRoute']);


app.config(['$routeProvider', function ($routeProvider) {
    $routeProvider
        .when('/add-quote', {
            templateUrl: 'views/add_quote.html',
            controller: 'QuoteCtrl'
        })
        .otherwise({ redirectTo: '/' });
}]);

Теперь, когда я просто заходил на страницу, вот что я получаю в URL:

http://localhost:8000/admin#!/

и когда я нажимаю кнопку Add quote, я получаю следующее:

http://localhost:8000/admin#!/#%2Fadd-quote

В чем может быть проблема? Спасибо за помощь

Ответ 1

Просто используйте hashbang #! в href:

 <a href="#!/add-quote">Add Quote</a>

Из-за aa077e8 префикс по умолчанию для хеша, используемый для URL-адресов $ location hash-bang, изменился с пустой строки ('') на bang ('!').

Если вы на самом деле хотите, чтобы у вас не было префикса хеша, вы можете восстановить предыдущее поведение, добавив в приложение блок конфигурации:

appModule.config(['$locationProvider', function($locationProvider) {
  $locationProvider.hashPrefix('');
}]);

Для получения дополнительной информации см.


Извините, что забрался на мою высокую лошадь, но... Как это выпустили? Это серьезная ошибка. - @MiloTheGreat

Разрушающее изменение, как на # 14202, должно быть отменено, так как эталонная спецификация уже официально устарела # 15715

Я собираюсь закрыть эту проблему, потому что мы не получили никакой обратной связи. Не стесняйтесь, чтобы открыть эту проблему, если вы можете предоставить новый отзыв.

- https://github.com/angular/angular.js/issues/15715#issuecomment-281785369

Ответ 2

Просто включите ! в href:

<body>
    <a href="#!/add-quote">Add Quote</a>
    <div ng-view ></div>
</body>

Ответ 3

Я не мог получить маршрутизацию для работы в 1.6.4, поэтому решил использовать angular 1.5.11, а маршрутизация работает нормально, хотя мне нужно было определить все мои маршруты, когда (..) функции с завершающим "/"

Если придерживаться более старой версии angular, это вариант для вас, если вы считаете, что это может спасти ваши нервы...

var app = angular.module("myApp", ["ngRoute"]);

app.config(function($routeProvider) {
$routeProvider
.when("/layoutandviewbox", {
    templateUrl : "views/layout-and-viewbox.html"
})
.when("/basicshapes", {
    templateUrl : "views/basic-shapes.html"
})
.when("/advancedshapes", {
    templateUrl : "views/advanced-shapes.html"
})
.when("/groups", {
    templateUrl : "views/groups.html"
})
.when("/transformations", {
    templateUrl : "views/transformations.html"
})
.when("/effects", {
    templateUrl : "views/effects.html"
})
.when("/", {
    templateUrl : "views/basic-shapes.html"
});
});

Ответ 4

app.config(['$routeProvider', '$locationProvider', function($routeProvider, $locationProvider) {
  $locationProvider.hashPrefix('');
  $routeProvider
    .when('/add-quote', {
      templateUrl: 'views/add_quote.html',
      controller: 'QuoteCtrl'
    })
    .otherwise({ redirectTo: '/' });
}]);

Ответ 5

Попробуйте это может помочь...

В HTML или просмотр страницы

 <body>
       <a href="#/Home.html">Home</a>
       <div ng-view></div>
 </body>

На странице скрипта

var app=angular
.module('myModule',['ngRoute'])
.config(function($routeProvider, $locationProvider) {
  $routeProvider
    .when('/Home', {
      templateUrl: 'FolderName/Home.html',
      controller: 'homeCtr'
    })
      $locationProvider.hashPrefix('');
     });