Динамическая маршрутизация на основе глобальной переменной - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть два разных проекта в одной угловой рабочей области. Я хочу динамически изменять маршрут на основе глобальной переменной в app.routing.ts

Вот мой модуль маршрутизации приложения:

import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';

const project1 = {
 path: '',
 loadchildren: '../module1#module1'
};

const project 2 = {
 path: '',
 loadchildren: '../module2#module2'
};
const selectedProject = window.id === 1 ? project1 : project2;

const routes: Routes = [selectedProject];

@NgModule({
  imports: [RouterModule.forRoot(routes, {
  useHash: true,
    paramsInheritanceStrategy: 'always'
  })],
  exports: [RouterModule]
})
export class AppRoutingModule { }

Это всегда относится ко второму проекту.

Примечание. Я хочу загрузить его пустым путем вместо отдельного пути, как project1, project2.

Попробуйте использовать как абсолютные, так иотносительный путь также, но он не работает

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

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

Ленивые загрузочные модули должны быть импортированы в angular.json с абсолютным путем.Например:

 "lazyModules": [
     "projects/website/src/app/pages/module1",
      "projects/website/src/app/pages/module2"
 ]

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

    export const PROJECT1_ROUTES = [{
       path: '/1',
       loadchildren: 'projects/website/src/app/pages/module1#Module1'
    }]

    export const PROJECT2_ROUTES = [{
       path: '*',
       loadchildren: 'projects/website/src/app/pages/module2#Module2'
    }]

    var routes = [];
    @NgModule({
       imports: [RouterModule.forRoot(routes)],
       exports: [RouterModule]
    })

    export class AppRoutingModule {
        constructor(
            private router: Router
        ) {
            const selectedProject = window.id === 1 ? true : false;
            if(selectedProject) {
                this.router.resetConfig(PROJECT1_ROUTES)
            } else {
                this.router.resetConfig(PROJECT2_ROUTES)
            }
        }
    }
0 голосов
/ 27 февраля 2019

Вы не можете изменять маршруты, используя глобальную переменную, по многим причинам.

  • Маршрутизация использует URL-адрес браузера.
  • Область видимости переменной, глобальные переменные не ищутся для изменения.
  • Вы присваиваете "selectedProject" при загрузке, и это оценивается в laod и определяет ваш объект маршрута.

Чтобы использовать маршрут для выбора между модулями, используйте клавишу param или назначьте маршрут:

const project1 = {
 path: '/1',
 loadchildren: '../module1#module1'
};

const project 2 = {
 path: '*',
 loadchildren: '../module2#module2'
};

Конечно, вам придется использовать route & navigation

...