Angular Router Изменение URL-адреса для базового href - PullRequest
0 голосов
/ 03 октября 2019

мой вопрос в двух словах:

Почему угловой маршрутизатор в режиме хеширования меняет базу пути URL-адреса на то, что я установил для своей базы href? И как мне предотвратить это поведение?

для получения более подробной информации о моем случае использования ...

Я использую маршрутизацию хэша в приложении Angular 8.

В моемСтраница index.html (которая является страницей MVC, сгенерированной на сервере) Я должен указать базовый href, чтобы моя html-страница знала, куда загрузить все файлы js и css, сгенерированные сборкой angular-cli. После загрузки приложения angular базовый путь в url в адресной строке меняется на базовый href, который я указал в моем index.html. Это вызывает проблемы при попытке перезагрузить страницу, потому что URL больше не указывает на исходный URL, который я запросил при первой загрузке приложения.

Мои вопросы: как отключить это поведение илипомешать угловой изменить URL-адрес, как это? Я чувствую, что angular не должно заботиться ни о чем в URL до хэша, если я использую хеш-маршрутизацию. Я искал базу кодов Angular и не смог найти причину.

(это не поведение браузера по умолчанию, которое я вижу. Само по себе, когда вы загружаете простой html-файл, в котором указан базовый href, браузер не меняет URL-адрес по сравнению с тем, который вы изначально запрашивали. Я проверил это, просто чтобы убедиться, что я не сумасшедший).

Я мог бы реализовать обходной путь, предоставив свой собственный LocationStrategy . У меня нет никаких проблем с этим, но я чувствую, что не должен был делать дополнительный шаг только для того, чтобы поддерживать поведение браузера по умолчанию, когда angular все равно. В качестве обходного пути я также могу удалить базовый href и предоставить --deploy-url при сборке приложения, но это опять-таки дополнительный шаг, когда браузер может самостоятельно обрабатывать загрузку файлов и не связываться сurl.

Я создал репозиторий с базовым примером, который воспроизводит проблему и предоставляет немного больше деталей. Я ЗНАЮ, что сервер экспресс не настроен "правильно". Это только для иллюстрации того, как мне приходится иметь дело с файлами в моем случае использования. Пожалуйста, обратите внимание на угловой вопрос, заданный в начале сообщения, а не на вспомогательные детали.

Обновление

Я открыл проблему с угловым, так как это, кажется, дефект где-то в базе углового кода,https://github.com/angular/angular/issues/33000.

1 Ответ

0 голосов
/ 03 октября 2019

вы используете Angular 8, и есть проблема, связанная с этим: https://github.com/angular/angular/issues/30835.

1) Вам необходимо настроить экспресс-сервер , чтобы правильно получить статические файлы,По сути, вы должны установить корень .

2) Вам не нужно использовать base href . Поскольку согласно вашему экспресс-серверу ваши статические файлы находятся в корне.

3) Что касается проблемы с Angular 8, вы должны установить es5 в своей конфигурации TS (прочитайте ссылку выше). Tsconfig:"target": "es5",

Наконец, пожалуйста, удалите базовый тег , после этого используйте эту конфигурацию для экспресс:

"use strict";

const express = require('express')
const app = express()
const port = 3000
const _app_folder = 'dist/ng-hash-router-problem';

app.get('*.*', express.static(_app_folder, {maxAge: '1y'}));

app.all('*', function (req, res) {
  res.status(200).sendFile(`/`, {root: _app_folder});
});

app.listen(port, () => console.log(`listening on port ${port}`))

Ссылка: https://itnext.io/express-server-for-an-angular-application-part-1-getting-started-2cd27de691bd

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...