2017-02-21 24 views
7

Все работает нормально, когда я создаю и перемещаюсь по ссылкам в приложении, но набирать адресную строку нет! В конце концов я хочу, чтобы иметь возможность отправлять ссылку на конкретную страницу/путь по электронной почте, и я не уверен, как это сделать.Угловая 2.0 глубокая связь не работает. То же самое из адресной строки

Я следовал за angular router guide documentation. Правильно я думаю ...

Я использую NodeJS (с экспресс), и на сервере я перенаправил весь трафик на корень приложения.

app.get("*", function(req, res) { 
    console.error("in get *") 
    res.redirect("/"); 
}); 

В моей index.html я установить базовый

<base href="/"> 

У меня есть мои клиентские маршруты/пути устанавливается следующим образом

const appRoutes: Routes = [ 
    { path: 'vendor/registration', component: VendorRegistrationComponent }, 
    { path: 'vendors', component: VendorListComponent }, 
    { path: '', redirectTo: 'vendor/registration', pathMatch: 'full' }, 
    { path: '**', component: PageNotFoundComponent }  
]; 

Если я печатаю http://localhost:8080/vendors в баре I адреса браузера получить до http://localhost:8080/vendor/registration, который имеет смысл, потому что именно там сервер говорит браузеру перенаправлять.

Как же мне следует глубоко привязать мое приложение?

Редактировать. Угловой учебник - «ТУР ГЕРОЕВ» - также демонстрирует то же поведение. т. е. ввод URL-адресов в адресной строке браузера напрямую не работает. Приложение показывает текст «загрузка ...» и не направляется на контроллер.

+0

Что вы имеете в виде глубокого связывания? Что вы ожидали получить? – echonax

+0

Я хочу, чтобы вы могли отправлять пользователям ссылку по электронной почте, такую ​​как http://www.example.com/vendors, и для отображения правильного представления/контроллера (а не корневого элемента). – nsof

+0

Какой у вас код для ' app.get ('/', function (req, res) {/ * что здесь * /}) ' – idbehold

ответ

1

Ответ на ваш вопрос явно описать в angular2 documentation

+0

Спасибо. По какой-либо причине это не упоминается или не упоминается в [link] (https://angular.io/docs/ts/latest/guide/router.html). Кроме того, я действительно пробовал это, но ссылался на неправильный 'index.html', а не на папку'/dist', я ссылаюсь на папку в папке '/ src'. – nsof

2

Как правило, вам не нужно перенаправлять на сервер, так как вся ваша маршрутизация обрабатывается угловым маршрутизатором на клиенте.

Вместо этого сделайте свой удобный маршрут только для того, чтобы всегда обслуживать index.html для всех запрошенных URL-адресов. Когда клиентское приложение загружается, угловые будут заботиться о маршрутизации к соответствующему компоненту на основе запрошенного URL-адреса. Обязательно сохраняйте свой тег <base href="/">, чтобы угловой сигнал мог быть осведомлен о том, какая часть URL маршрутизирована.

const path = require('path'); 

app.get("*", function(req, res) { 
    res.sendFile(path.join(__dirname, '/path/to/your/index.html')); 
}); 
+0

Это, в конечном счете, работало для меня со следующим ** важным примечанием **: Файл 'index.html', который отправляется клиенту, должен быть тем, который находится в папке'/dist', а не в оригинальной '/ src'. (по крайней мере для проектов с узлом + экспресс с установкой по умолчанию) 'var indexFile = path.join (__ dirname," dist/index.html "); res.sendFile (indexFile);' – nsof