#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; этот декоратор или что-то еще, где измените, какой компонент вы видите.