Вопрос или проблема
<div class="mr-3 ml-3 mt-0 mb-4 leave_card_outer" *ngIf="leaveStatus !=null">
<div class="row bg-white p-2">
<div class="col py-3 leave_card_inner" *ngFor="let status of leaveStatus | keyvalue; index as index">
<a [routerLink]="['dstatus-fr']" class="" (click)="setViewData(status.key)">
<h3>{{ status.key | lowercase | translate | titlecase}}</h3>
<p class="mt-3 mb-0 card_text"
[ngClass]="getStatuskColor(status.key)">
{{status.value}}</p>
</a>
</div>
</div>
</div>
Это мой HTML файл
setViewData(leaveStatus: string) {
console.log("с даты",leaveStatus,this.fromDate_YYYY_MM_DD,"по дату",this.toDate_YYYY_MM_DD);
}
Это мой TS файл
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { RouterModule, Routes } from '@angular/router';
import { ChartboardFRComponent } from './chartboard-fr.component';
import { ViewstatusFrComponent } from './viewstatus-fr/viewstatus-fr.component';
const routes: Routes = [
{ path: "", component: ChartboardFRComponent },
{ path: "dstatus-fr", component: ViewstatusFrComponent }
];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule]
})
export class ChartboardFRRoutingModule { }
А в конце это мой файл маршрутизации с соответствующими деталями маршрутизации
нам нужно перенаправиться к ViewstatusFrComponent по клику на setviewdata
вставьте описание ссылки здесь
<a [routerLink]="['/user/bob']" [queryParams]="{debug: true}" fragment="education">
ссылка на компонент пользователя
</a>
Я столкнулся с подобной проблемой однажды, используя как маршрутизатор, так и функцию, вызываемую по клику. Вместо этого я попытался перейти к указанному маршруту, используя функцию, вызванную по клику, подобно этому:
<div class="col py-3 leave_card_inner" *ngFor="let status of leaveStatus | keyvalue; index as index">
<a (click)="setViewData(status.key)">
<h3>{{ status.key | lowercase | translate | titlecase}}</h3>
<p class="mt-3 mb-0 card_text" [ngClass]="getStatuskColor(status.key)">
{{status.value}}
</p>
</a>
</div>
setViewData(leaveStatus: string) {
console.log("с даты", leaveStatus, this.fromDate_YYYY_MM_DD, "по дату", this.toDate_YYYY_MM_DD);
this.router.navigate(['dstatus-fr']);
}
Вы используете routerLink и также вызываете событие клика с (click), они могут конфликтовать.
Лучше обработать навигацию маршрутов внутри функции setViewData(leaveStatus: string)
.
<div class="mr-3 ml-3 mt-0 mb-4 leave_card_outer" *ngIf="leaveStatus != null">
<div class="row bg-white p-2">
<div class="col py-3 leave_card_inner" *ngFor="let status of leaveStatus | keyvalue; index as index">
<a class="" (click)="setViewData(status.key)">
<h3>{{ status.key | lowercase | translate | titlecase }}</h3>
<p class="mt-3 mb-0 card_text" [ngClass]="getStatuskColor(status.key)">
{{ status.value }}
</p>
</a>
</div>
</div>
ваша функция setviewData может выглядеть так.
setViewData(leaveStatus: string) {
console.log("с даты", leaveStatus, this.fromDate_YYYY_MM_DD, "по дату", this.toDate_YYYY_MM_DD);
// Перейдите к маршруту 'dstatus-fr' и передайте 'leaveStatus', если это необходимо
this.router.navigate(['dstatus-fr'], {
queryParams: { status: leaveStatus }
});
}
в конце не забудьте внедрить Router в конструктор
constructor(private router: Router) {}
Ответ или решение
Ваша проблема заключается в том, что вы пытаетесь использовать как директиву routerLink
, так и привязываете обработчик события клика с помощью (click)
, что может вызывать конфликты. Чтобы решить эту проблему, лучше всего реализовать навигацию внутри функции setViewData
. Вот подробное объяснение и исправления, которые вам необходимо внести.
-
Удаление
routerLink
: Уберите директивуrouterLink
из элемента<a>
, так как вы будете обрабатывать переход на другой компонент в функцииsetViewData
.Измените вашу HTML-шаблон следующим образом:
<div class="mr-3 ml-3 mt-0 mb-4 leave_card_outer" *ngIf="leaveStatus != null"> <div class="row bg-white p-2"> <div class="col py-3 leave_card_inner" *ngFor="let status of leaveStatus | keyvalue; index as index"> <a (click)="setViewData(status.key)"> <h3>{{ status.key | lowercase | translate | titlecase }}</h3> <p class="mt-3 mb-0 card_text" [ngClass]="getStatuskColor(status.key)"> {{status.value}} </p> </a> </div> </div> </div>
-
Обновление
setViewData
: В функцииsetViewData
вы можете вызыватьthis.router.navigate()
для перехода наViewstatusFrComponent
, и также передать параметры, если это необходимо черезqueryParams
.Ваш TypeScript код будет выглядеть следующим образом:
import { Component } from '@angular/core'; import { Router } from '@angular/router'; @Component({ // ваш декоратор @Component }) export class YourComponent { constructor(private router: Router) {} setViewData(leaveStatus: string) { console.log("fromdate", leaveStatus, this.fromDate_YYYY_MM_DD, "todate", this.toDate_YYYY_MM_DD); // Переход на маршрут 'dstatus-fr' и передача параметров, если нужно this.router.navigate(['dstatus-fr'], { queryParams: { status: leaveStatus } }); } }
-
Не забудьте про импорты: Убедитесь, что вы импортировали
Router
из@angular/router
и инъектировали его в конструктор вашего компонента. -
Добавление маршрутов: Ваша настройка маршрутизации выглядит правильно, поэтому никаких изменений здесь не нужно:
const routes: Routes = [ { path: "", component: ChartboardFRComponent }, { path: "dstatus-fr", component: ViewstatusFrComponent } ];
Подводя итог, вам нужно удалить routerLink
, использовать напрямую метод this.router.navigate()
внутри setViewData
, и, как результат, правильно маршрутизировать к компоненту ViewstatusFrComponent
. Это обеспечит корректную навигацию между компонентами без конфликтов. Если у вас остались вопросы или ещё что-то не работает, не стесняйтесь задавать их.