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

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

Мы вводим Angular2 (release: 2.0.1) в микс и имеем новый индекс.html страница для Angular обслуживается от нашего NgController.

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

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

к

http://blah.com/#/reports

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

http://blah.com

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

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

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

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

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

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

Спасибо заранее.

1 ответ

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

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

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

    Минусы: на refresh / deep link Вы получаете две полные загрузки страницы-сначала в home/index loading backbone, затем в NG / index loading angular после перенаправления.

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