Моя текущая конфигурация:
const routes: Routes = [
{ path: '', component: NavComponent, outlet: 'nav' }, // (1)
{ path: '**', component: NavComponent, outlet: 'nav' } // (2)
];
Оно работает. NavComponent
всегда выводится на выход nav
. В частности, он работает для всех следующих типов URL-адресов:
http://example.com/foo(nav:bar) // (a) non-empty path in nav --> (2)
http://example.com/foo(nav:) // (b) empty path in nav --> (2)
http://example.com/foo // (c) no nav at all --> (1)
Обратите внимание, что маршрутизатор сопоставляет разные маршруты с этими URL-адресами:
(1)
используется для(c)
(2)
используется для(a)
и(b)
Вот почему экземпляр NavComponent
уничтожается и создается заново каждый раз, когда меняется местоположение, скажем, с (c)
на (a)
. И это то, что мне нужно предотвратить. Мне нужно сохранить мой экземпляр из-за его состояния, анимации и т. д. Насколько я понимаю, это возможно только в том случае, если для всех URL-адресов используется один и тот же маршрут, однако я не могу найти способ сделать это. Если я удалю (1)
, URL-адреса типа (c)
перестанут показывать NavComponent
в nav
. По-видимому, **
не соответствует таким URL-адресам (хотя я не уверен, почему).
Вы можете увидеть это в действии здесь: https://stackblitz.com/edit/angular-ptzwrm
Какое правильное решение здесь?
На данный момент я переопределяю UrlSerializer
, чтобы добавить (nav:)
к URL-адресам, таким как (c)
, перед синтаксическим анализом, но это похоже на взлом.
'**'
против''
, это может быть даже ошибка в Angular или, что более вероятно, просто одно из многих недокументированных небольших дизайнерских решений. Однако решение сRouteReuseStrategy
кажется мне достаточно хорошим. По крайней мере, это работает, и компонент не перезагружается. Я соглашусь, хотя здесь для меня не все ясно. - person thorn0   schedule 19.02.2018matcher
, но он просто не вызывается для URL-адресов типа (c). - person thorn0   schedule 19.02.2018null
(c). В то время как путь основного выхода просто не может бытьnull
, так как эта часть URL-адреса не считается необязательной. Для корня сайта путь представляет собой пустую строку. - person thorn0   schedule 19.02.2018