2015-04-16 1 views
5

Я начинаю с AngularJS и задаю следующий вопрос. Я играю с модулем ngRoute и это мой код до сих пор:Угловой ngRoute - Не удается создать страницу, если введите url вручную

HTML:

<nav ng-controller="navController as nav"> 
    <ul> 
     <li ng-repeat="item in navItems"> 
      <a href="{{ item.url }}">{{ item.name }}</a> 
     </li> 
    </ul> 
</nav> 


<div id="main"> 
    <div ng-view></div> 
</div> 

app.js

(function(window) { 

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

    app.config(['$routeProvider', '$locationProvider', function($routeProvider, $locationProvider) { 
     $routeProvider 
      .when('/', { 
       templateUrl : 'pages/home.html', 
       controller : 'mainController' 
      }) 
      .when('/contact', { 
       templateUrl : 'pages/contact.html', 
       controller : 'contactController' 
      }); 

     if (window.history && window.history.pushState) { 
      $locationProvider.html5Mode(true); 
     } 
    }]); 


    app.controller('mainController', ['$scope', function($scope) { 
     $scope.message = 'Hello from home page'; 
    }]); 


    app.controller('contactController', ['$scope', function($scope) { 
     $scope.message = 'Hello from contact page'; 
    }]); 

    app.controller('navController', ['$scope', function($scope) { 
     $scope.navItems = [ 
      { name: 'Home', url: '/' }, 
      { name: 'Contact', url: '/contact' } 
     ]; 
    }]); 

})(window); 

И это прекрасно работает. Угловое меню рендеринга, и когда я нажимаю на ссылку, он показывает мне желаемую страницу. Но за исключением следующего случая. Когда он отображает главную страницу (url: http://localhost:3000), и я вручную добавляю адрес url "/ contact", тогда я получаю пустую страницу с ошибкой "Can not GET/contact". Может ли кто-нибудь объяснить мне, почему это происходит, и как я могу это исправить? Буду признателен за любую помощь. Благодарю.

+0

пытаются добавить #/контакт – Reena

+0

Вы имеете в виду в URL? Да, тогда это работает. Но пользователь, вероятно, не будет вводить #/contact;] Скорее всего, я не должен об этом беспокоиться, но мне любопытно, есть ли у него исправления. – covfefe

+0

Я хотел, чтобы вы набрали вручную? – Reena

ответ

-1

На самом деле вам нужно # (hashtag) для браузеров без HTML5.

В противном случае они просто сделают HTTP-вызов на сервер по указанному href. # - это старый короткошерстный обозреватель, который не запускает запрос, что позволяет многим js-фреймворкам самостоятельно создавать свои собственные клиентские переадресации.

Вы можете использовать $ locationProvider.html5Mode (true), чтобы указать угловую стратегию HTML5, если она доступна.

Вот список браузера, который поддерживает HTML5 стратегию: http://caniuse.com/#feat=history

Источник: AngularJS routing without the hash '#'