Вы можете ознакомиться с руководством angular по развертыванию.
Давайте поговорим о разнице между HashLocationStrategy
и PathLocationStrategy
. Для получения дополнительной информации ознакомьтесь с документацией.
Angular по умолчанию использует PathLocationStrategy
.
Допустим, у вас есть следующие маршруты в вашем приложении.
const routes: Route[] = [{
path: '',
redirectTo: 'home',
pathMatch: 'full'
},
{
path: 'home',
component: HomeComponent
}];
Когда вы перейдете к этому компоненту, ваша адресная строка будет выглядеть как localhost:4200/home
. Если бы вы использовали HashLocationStrategy
, это выглядело бы как localhost:4200/#home
. Итак, какая разница здесь?
PathLocationStrategy
Когда вы находитесь на странице Home
и нажимаете кнопку F5
или обновляете страницу, браузер сделает запрос к localhost:4200/home
, который будет обработан angular-cli, и вы получите свой HomeComponent
.
HashLocationStrategy
Точно так же, когда вы нажмете F5
, на этот раз браузер отправит запрос на localhost:4200
, потому что он игнорирует все, что идет после #
.
Если вы не хотите иметь #
, удалите указанную вами часть. По умолчанию это будет PathLocationStrategy
. Однако это приводит нас к расставанию, когда вы запускаете свое приложение за пределами angular-cli
, что означает сборку и обслуживание его с какого-то сервера. Допустим, вы создаете свое приложение с помощью ng build
и у вас есть минимизированные, скомпилированные файлы javascript. Вы развертываете его на каком-то сервере, который работает на yourdomain.com
Кроме того, вы помещаете это встроенное, связанное угловое приложение по некоторому URL-адресу, чтобы люди могли получить доступ к вашему приложению из yourdomain.com/ng-app
, здесь все в порядке. Даже когда вы перенаправляетесь на HomeComponent
, это будет работать, и ваша адресная строка будет выглядеть как yourdomain.com/ng-app/home
. Однако, когда вы нажмете F5
в этот момент, ваш браузер отправит запрос к yourdomain.com/ng-app/home
, которого нет на вашем сервере, потому что вы обслуживаете свое приложение из /ng-app
. Вы должны выполнить некоторые настройки на стороне вашего сервера, чтобы вы могли обслуживать все, что начинается с /ng-app/**
.
Например, в моем приложении Spring есть этот метод, который возвращает угловое приложение,
@GetMapping("/ng-app/**")
Поэтому, когда мой сервер получает запрос, начинающийся с /ng-app
, он просто передает его угловому приложению, которое будет обрабатывать правильный маршрут.
Надеюсь, это проясняет это для вас.
person
Bunyamin Coskuner
schedule
28.02.2018