2015-02-20 2 views
1

Мое отображение ссылок хорошо работает с использованием модуля углового модуля ng-route, пока я не нажму обновить. Затем я получаю ошибку 404. Я использую простой HTML на питон SimpleHTTPServerОбновление маршрута с угловым маршрутомПроводчик вызывает ошибку 404 с Python

каталога Дерево

. 
└── test1 
    ├── html 
    └── static 
     ├── css 
     └── js 

сервер запускается внутри каталога test1 всех HTML файлов внутри HTML папки

маршрутизация выполняются внутри app.js

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

eclassApp.config(['$routeProvider','$locationProvider', 
    function ($routeProvider, $locationProvider){ 
     $routeProvider. 
      when('/',{ 
       templateUrl: '/html/student-list.html', 
       controller: 'StudentsListCtrl', 
      }). 
      when('/students/:studentId',{ 
       templateUrl: '/html/student-details.html', 
       controller: 'StudentDetailsCtrl', 

      }).otherwise({ 
       redirectTo: '/' 
      }); 
      $locationProvider.html5Mode({ 
       enabled:true 
      }); 
    }] 
); 

Я могу перейти к своим URL-адресам из приложения, но когда на странице и обновляется, я получаю ошибку 404. Возвращаясь назад (история), я получаю ту же ошибку. Почему это? Это потому, что я не использую символ хэша?

+1

с режимом HTML5, у вас должен быть маршрут сервера, который перенаправляет на страницу вашего приложения, соответствующую любым (или всем) маршрутам, которые должны обрабатываться клиентом. какую серверную технологию вы используете? – Claies

+0

Я использую python -m SImpleHTTPServer для четкого тестирования и быстрого обучения. Это проблема? Сервер, который я использую? – Apostolos

ответ

0

Режим HTML5 в Angular использует PushState, чтобы тихо менять URL-адрес без запроса сервера. Это не работает для новых запросов или обновлений. HTML, обслуживаемый с сервера, всегда/index.html. HTML PushState не может изменить страницу сервера, пока она фактически не загружена, но фактически не может загрузиться с запрошенного URL-адреса /students/1234 (в качестве примера из вашего кода).

В Python SimpleHTTPServer, вы можете добавить что-то вдоль линий этого кода, чтобы заставить сервер загрузить /index.html:

if not os.path.exists(request_file_path): 
    self.path = 'index.html' 

Если используется режим маршрутизации по умолчанию, а не поведение совершенно иное. Маршрутизация «Хеш» использует #, давая вам маршруты, такие как /index.html/#/students/1234. Хеш интерпретируется браузером как якорь, и ваш сервер будет всегда получить правильный запрос для /index.html.

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

+0

Если я не использую режим html5, он будет работать с обновлением? – Apostolos

+0

Я уточню свой ответ с большим контекстом. – Claies

+0

BTW Я просто использую python -m SimpleHTTPServer, а не модуль python, который я создал – Apostolos

Смежные вопросы