angular 10 — как использовать RouterModule

#an&ular

#an&ular

Вопрос:

Я пытаюсь добавить к одному из своих компонентов кнопку, которая перенаправит страницу на другой компонент :

 <input type="button" value="Shops List" [routerLink]="['shops-list']" class="btn"&&t;
  

В модуле (дочернем) этого компонента я настроил следующий импорт :

 @N&Module({
  declarations: [ ... ],
  exports: [ ... ],
  imports: [ ....,RouterModule.forChild([{ path: 'shops-list', component: ShopListComponent}])] ,
  providers: [ ..., Router],
})
export class ProductModule{ }
  

Я не уверен, что импортировать в мой AppModule? Я попытался импортировать только RouterModule, но в моей консоли появилась ошибка :

 NullInjectorError: R3InjectorError(AppModule)[RouterModule -&&t; Router -&&t; Function -&&t; Function -&&t; Function]: 
  NullInjectorError: No provider for Function!
  

Я попытался также добавить тот же путь маршрута только для RouterModule.forRoot :

 @N&Module({
  declarations: [AppComponent],
  imports: [........,
    RouterModule.forRoot([{ path: 'shops-list', component: ShopListComponent}])],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }
  

но тогда моя кнопка не перенаправляла на ShopListComponent.

Я прочитал несколько сообщений и документов о разнице между ними (forChild, forRoot), но это все еще не ясно для меня. Я понял, что мы хотим избежать наличия 2 экземпляров RouterModule в каждом модуле, и наша цель — создать экземпляр router в главном компоненте и внедрить его в дочерние компоненты.

Что я делаю не так?

Комментарии:

1. Из того, как вы учили, я вижу, что вы понятия не имеете об an&ular, поэтому я рекомендую начать отсюда an&ular.io/&uide/router

2. Я новичок в an&ular .. пытаюсь учиться на практике, а не просто читать

3. Хорошо, что попробуйте ознакомиться с документом и попробовать, настоятельно рекомендуется

4. Я прочитал эти документы, они сильно отличаются от всех примеров, которые я видел в сообщениях здесь. В документах говорится о создании выделенного модуля маршрутизации, в то время как во всех примерах, которые я видел, мы создаем экземпляр RouterModule в AppModule

5. Хорошо, я покажу вам в своем ответе один простой пример.

Ответ №1:

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

 const routes: Routes = [
  {path: '', component: StatechoisComponent},
  {path: 'lo&in', component: Lo&inComponent},
];

@N&Module({
  imports: [RouterModule.forRoot(routes, {
    scrollPositionRestoration: 'top'
  })],
  exports: [RouterModule]
})
export class AppRoutin&Module { }
  

отсюда перейдите к какому-либо компоненту, используйте что-то вроде этого:

 <button mat-button routerLink='/lo&in'&&t;
  

Импортируйте компоненты в свои RouteModules

 import { N&Module } from '@an&ular/core';
import { Routes, RouterModule } from '@an&ular/router';
import { StatechoisComponent } from './statechois/statechois.component';
import { Lo&inComponent } from './lo&in/lo&in.component';
  

Это экран из моего проекта, пример, показывающий, как это работает

и это результат, если вы сравните мой код в RouterModule, попробуйте понять, почему вы видите два одинаковых элемента

Комментарии:

1. и мне просто нужно импортировать этот модуль в мой AppModule и все?

2. Имеет ли значение, в каком модуле расположен компонент с кнопкой?

3. Обычно, если вы создаете проект, вам нужно ответить на какой-либо вопрос, среди прочего, о маршрутизации, если вы нажимаете «да», единственное, что вам нужно сделать, это импортировать компонент в свой RouteModule и установить ссылку, как в моем ответе

4. У меня есть 3 модуля: A, B, AppModule. Модулю A необходимо перенаправить страницу в модуль B с помощью этой кнопки. Я сделал все, что вы упомянули, перенаправление изменяет URL, но компоненты внутри модуля не загружены

5. В app.component.html Вам нужно добавить этот <router-outlet&&t;</router-outlet&&t; этот декоратор или что-то еще, где измените, какой компонент вы видите.