Элемент Angular не разрешает маршруты (?) В другом проекте angular, вместо этого на веб-сайте отображается только ‹router-outlet› ‹/router-outlet›

следующая отправная точка:

У нас есть несколько микросервисов внешнего интерфейса angular, и теперь мы хотим объединить их в одном приложении. Мы пробуем подход Angular-Elements и экспортировали один из микросервисов, в результате чего получился огромный JS-файл.

Проблема

Когда мы включили элемент angular в проект «свести вместе», просто тег «router-outlet» находится в dom, но HTML не отображается.

Код

Пользовательский элемент:

app.module.ts:

        import {NgModule, Injector} from '@angular/core';

    import {AppRoutingModule} from './app-routing.module';
    import {AppComponent} from './app.component';

    import {PhoneModule} from "./features/phone/phone.module";
    import {createCustomElement} from '@angular/elements';
    import {Router} from '@angular/router';

    @NgModule({
      declarations: [
        AppComponent,
      ],
      imports: [
        AppRoutingModule,
        PhoneModule,
      ],
      entryComponents: [AppComponent],
    })
    export class AppModule {

      constructor(private injector: Injector, private router: Router) {
        this.router = router;
      }

      ngOnInit() {
        this.router.initialNavigation();
      }

      ngDoBootstrap() {
        const customElement = createCustomElement(AppComponent, {injector: this.injector});
        customElements.define('phone-contracts', customElement);
      }
    }

app-routing.module.ts:

import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { PhoneListComponent } from './features/phone/phone-list/phone-list.component';
import {PhoneContractDetailsComponent} from "./features/phone/phone-contract-details/phone-contract-details.component";

const routes: Routes = [
    { path: '', redirectTo: 'phone-list', pathMatch: 'full' },
    { path: '', component: PhoneListComponent,},
    { path: 'phone-list/:id', component: PhoneContractDetailsComponent },
    { path: '**', redirectTo: '/phone-list', pathMatch: 'full'}
];

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

Проект объединения: Они взяты из компонента, который должен обрабатывать этот конкретный микросервис.

phone-contract.component.html:

<p>
  phone-contracts works!
</p>

<phone-contracts>
  <app-phone-list>
  </app-phone-list>
</phone-contracts>

app.module.ts:

import {CUSTOM_ELEMENTS_SCHEMA, NgModule} from '@angular/core';
import { FormsModule } from '@angular/forms';
import { BrowserModule } from '@angular/platform-browser';
import { AppComponent } from './app.component';
import { HomeComponent } from './home/home.component';
import { LoginComponent } from './login/login.component';
import { FooComponent } from './foo/foo.component';
import { HttpClientModule } from '@angular/common/http';
import { CookieService } from 'ngx-cookie-service';
import { AppRoutingModule } from './app-routing.module';
import { AppService } from './app.service';
import { PhoneContractsComponent } from './phone-contracts/phone-contracts.component';
import { DeviceListComponent } from './device-list/device-list.component';

@NgModule({
  declarations: [
    AppComponent,
    HomeComponent,
    LoginComponent,
    FooComponent,
    PhoneContractsComponent,
    DeviceListComponent
  ],
  imports: [
    BrowserModule,
    FormsModule,
    AppRoutingModule,
    HttpClientModule],
  schemas: [CUSTOM_ELEMENTS_SCHEMA],
  providers: [CookieService,AppService],
  bootstrap: [AppComponent]
})
export class AppModule { }

что может иметь значение?

  • Мы используем это как наш "строитель": "@ angular-devkit / build-angular: browser",

  • Мы думаем, что проблема в том, что настраиваемый элемент не может разрешить маршрутизацию и, следовательно, просто ничего не показывает, может ли это быть правдой?


person mehlichmeyer    schedule 12.04.2019    source источник
comment
У меня тоже похожая проблема. В моем настраиваемом элементе не выполняется маршрутизация. Очень простой элемент. В одном настраиваемом элементе всего два компонента. У вас есть идеи, как включить маршрут в настраиваемом элементе?   -  person Pushkar Rathod    schedule 13.04.2019
comment
Я не мог представить, как они могут складываться вместе. Куда поставить <router-outlet>? Я предполагаю, что он находится внутри самого AppComponent, и поскольку это настраиваемый компонент, у вас есть проблема. Не могли бы вы создать в stackblitz пример, воспроизводящий проблему.   -  person trungk18    schedule 16.04.2019
comment
Я готов поспорить, что пользовательские элементы не предназначены для работы с маршрутизацией. То же, что и @ trungk18. Я с трудом оборачиваюсь вокруг него.   -  person Tomasz Błachut    schedule 16.04.2019
comment
@mehlichmeyer сработало ли решение Максимиллион Бартанго?   -  person beanic    schedule 15.04.2020


Ответы (1)


Вот как должен выглядеть ваш список маршрутов:

const routes: Routes = [
    { 
        path: 'phone-list',
        component: PhoneListComponent
    },
    { 
        path: 'phone-list/:id',
        component: PhoneContractDetailsComponent 
    },
    { 
        path: '**', 
        redirectTo: 'phone-list', 
        pathMatch: 'full'
    }
];

В дополнение к этому, вы на самом деле не указали, где находится ваш элемент router-outlet ... если он отображает его как html, то, скорее всего, вы не закрыли его родительский тег и / или он не используется в компоненте Angular.

person Maximillion Bartango    schedule 16.04.2019