Смешивание Angular2, магистральной и MVC маршрутизации

#asp.net-mvc #angular #backbone.js #asp.net-mvc-5

#asp.net-mvc #angular #backbone.js #asp.net-mvc-5

Вопрос:

У нас есть существующее веб-приложение MVC5, использующее, по большей части, магистраль с магистральной маршрутизацией. Когда вы попадаете на сайт, он загружает исходный базовый home/index.html который загружает все магистральные скрипты и т.д.

Мы вводим Angular2 (версия: 2.0.1) в микс и получаем новый index.html страница для Angular, обслуживаемая нашим ngController.

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

 http://blah.com/ng/#/reports
  

Для

 http://blah.com/#/reports
  

Что, как правило, нормально, и просмотр в приложении angular изменит URL на / #/pageXyz и т. Д.
… Пока вы не попытаетесь обновить или перейти по глубокой ссылке непосредственно к последним примерам, в которых браузер технически просто собирается

 http://blah.com
  

Который обслуживает исходную страницу индекса магистрали.

Каковы варианты решения этой проблемы?

  • Возможно ли, чтобы маршрутизатор Angular добавлял префикс к маршрутам с помощью контроллера ng?
  • Может ли магистральная сеть перенаправлять любые маршруты / # / * на страницы ng / # / *?
  • Какое-то конкретное сопоставление для маршрутов MVC, которые могут распознавать угловой URL? (Хотя я считаю, что # не делают разреза, когда дело доходит до URL-адресов, поэтому не могут сопоставить их в маршрутизации?)
  • Было бы лучше переключиться на URL-адреса HTML5? (Лучше для маршрутизации MVC?)

За одну ночь сайт Angular, похоже, получил неполную страницу-тизер для настройки VS2015 (примечание: в настоящее время мы используем VS2013), и в самом низу вы попадаете в тупик, по-видимому, связанный с проблемой:

Примечание по приложениям маршрутизации

Если это приложение использовало угловой маршрутизатор, обновление браузера может вернуть 404 — страница не найдена. Посмотрите на адресную строку. Содержит ли он URL-адрес навигации («глубинную ссылку»)? Нам нужно настроить сервер для возврата index.html за эти просьбы. Пока мы этого не сделаем, удалите путь навигации и снова обновите.

Заранее спасибо.

Ответ №1:

В конечном итоге пришлось изменить магистральную маршрутизацию.

Плюсы: это работает и было всего две строки:

 #restore angular url
if location.pathname == '/' and location.hash.substring(0,2) == '#/'
    location.href = location.href.replace('/#/','/ng/#/')
  

Недостатки: при обновлении / глубокой ссылке вы получаете две полные загрузки страницы — сначала в магистраль загрузки home / index, затем в ng / index, загружающий angular после перенаправления.

Тем не менее, учитывая все обстоятельства, тот факт, что он вообще работает, достаточно хорош для меня.