Угловая перезагрузка всего маршрута - PullRequest
0 голосов
/ 27 сентября 2019

У меня проблема с Angular (8), когда маршрутизатор будет перезагружать весь маршрут (т. Е. Родительский) при навигации по children маршрутам родительского маршрута.Ожидаемое поведение заключается в том, что родительский маршрут не будет уничтожен / перезагружен, а дочерние маршруты будут просто отображаться на основе маршрута.

Странно то, что этого не происходит, когда мое приложение загружает любой путь из родительского маршрута и ниже.Это происходит только при запуске с маршрута вне маршрутов модуля, на которые я ссылаюсь.То есть модуль, на который я ссылаюсь, является лениво загруженным функциональным модулем, и если я перехожу к функциональному модулю из корня приложения (или из любого места между корнем приложения и функциональным модулем), возникает проблема.Если я загружаю приложение из маршрута в модуле функций и перемещаюсь по маршрутам этого модуля, проблема не возникает.

Мои лениво загруженные маршруты модулей функций выглядят следующим образом:

const routes: Routes = [
  {
    path: ':rid',
    component: Feature_Root_Component,
    children: [
      {
        path: '',
        component: Feature_Component_Home,
      },
      {
        path: 'foo',
        component: Feature_Foo_Component
      },
      {
        path: 'bar',
        component: Feature_Bar_Component
      },
      {
        path: 'baz/:bid',
        component: Feature_Baz_Component,
      }
    ],
  },
];

@NgModule({
  imports: [RouterModule.forChild(routes)],
  exports: [RouterModule]
})
export class Feature_Routing_Module { }

Маршруты приложений:

const routes: Routes = [
  {
    path: 'feature-module',
    canLoad: [User_Guard],
    loadChildren: () => import('./feature.module').then(mod => mod.Feature_Module)
  },
  {
    path: '',
    canLoad: [User_Guard],
    loadChildren: () => import('./home/home.module').then(mod => mod.Home_Module),
  },
  {
    path: '**',
    redirectTo: '',
  },
];

@NgModule({
  imports: [
    RouterModule.forRoot(
      routes,
      {
        // enableTracing: true, // Debugging only.
        preloadingStrategy: Selective_Preload_Strategy_Service,
        paramsInheritanceStrategy: 'always',
      },
    )
  ],
  exports: [RouterModule]
})

export class App_Routing_Module { }

Итак, как я уже говорил, если я перейду прямо к feature-moduoe/:rid (через URL или просто перезагрузлю, находясь на этом маршруте), а затем перейду к foo, bar,baz/:bid или просто пустой путь, поведение соответствует ожидаемому, и дочерние компоненты будут заменены.

Однако, если я начну переходить от за пределами к функциональному модулю (скажем, из корня приложения /) к маршруту функционального модуля, любая последующая маршрутизация в функциональном модуле вызовет функциюмодуль для перезагрузки при каждой навигации.Т.е. Feature_Root_Component уничтожит и повторно инициализирует.

Это нормальное поведение, или я иду по моему маршруту неправильно?

Обновление 1

Я узнал пару вещей.Если я переместу навигацию (то есть <a>, содержащую routerLink) в корень приложения, и перейду, проблема действительно возникает.В настоящее время ссылка находится в другом загруженном ленивом модуле функций.Маршрутизация из другого функционального модуля вызовет проблему, тогда как навигация из корня приложения не будет.

Обновление 2 Просто еще больше сузили проблему.При перемещении навигации к модулю home она также работает правильно.Проблема была сужена до сбоя при соединении с feature-module из лениво загруженного модуля, вложенного в home.

Для иллюстрации приведена иерархия маршрутов:

// app routing
 -feature-mod <-- I navigate to here
 -home-mod
   -''
     -lazy-mod-1
       -lazy-mod-2  <-- from here

Переход от lazy-mod-2 к feature-mod завершится неудачно и приведет к тому, что последующая маршрутизация внутри дочерних маршрутов feature-mod будет перезагружать корневой компонент feature-mod при каждой навигации.Я проверил это, войдя в систему из конструктора корневого компонента.

Однако навигация из корня приложения или lazy-mod-1 будет работать нормально.То есть маршруты feature-mod не будут вызывать перезагрузку корневого компонента при маршрутизации.

1 Ответ

0 голосов
/ 27 сентября 2019

Это нормальное поведение угловой маршрутизации.Если вы находитесь в родительском модуле и пытаетесь получить доступ к дочернему элементу, то загружаются только дочерние элементы,

Однако, если вы получаете доступ к маршруту от корневого родительского к дочернему, все родительские и дочерние элементы перезагружаются.

...