Angular 2 - не может соответствовать ни один маршрут для вложенного ресурса

Я работаю с приложением Angular front end, созданным генератором JHipster. Это связано с микросервисом, который поддерживается Mongo. Я имею дело с ресурсом, который содержит список подобъектов. Что-то вроде:

preferenceList: {
   preferences: [{name: "", type: "", setting: ""}] 
}

"Имя" гарантированно будет уникальным, и я пытаюсь создать routerLink, который будет генерировать всплывающее окно для просмотра этого конкретного документа предпочтения при щелчке по нему в представлении списка. Тем не менее, я продолжаю получать сообщение об ошибке:

ОШИБКА Ошибка: Uncaught (в обещании): Ошибка: не удается сопоставить ни один маршрут. Сегмент URL: "предпочтение" Ошибка: не удается сопоставить ни один маршрут. Сегмент URL: "предпочтение" в ApplyRedirects.noMatchError (vendor.dll.js:73690)

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

В моем HTML, вот как я генерирую кнопку из preference-list-detail.component.html:

<button type="submit"
    [routerLink]="['/preference', { outlets: { popup: [preferenceList.id, 'edit', 'TSTCODE'] } } ]"
    replaceUrl="true"
    class="btn btn-primary btn-sm">
    <span class="fa fa-pencil"></span>
    <span class="hidden-md-down">Edit</span></button>

Вот соответствующий код из моего файла маршрутизации:

@Injectable()
export class PreferenceResolvePagingParams implements Resolve<any> {

    constructor(private paginationUtil: PaginationUtil) {}

    resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
        const page = route.queryParams['page'] ? route.queryParams['page'] : '1';
        const sort = route.queryParams['sort'] ? route.queryParams['sort'] : 'id,asc';
        return {
            page: this.paginationUtil.parsePage(page),
            predicate: this.paginationUtil.parsePredicate(sort),
            ascending: this.paginationUtil.parseAscending(sort)
      };
    }
}

export const PreferenceRoute: Routes = [
    {
        path: 'preference',
        component: PreferenceComponent,
        resolve: {
            'pagingParams': PreferenceResolvePagingParams
        },
        data: {
            authorities: ['ROLE_USER'],
            pageTitle: 'Preferences'
        },
        canActivate: [UserRouteAccessService]
    }
];

export const PreferencePopupRoute: Routes = [
    {
        path: 'preference-new',
        component: PreferencePopupComponent,
        data: {
            authorities: ['ROLE_USER'],
            pageTitle: 'Preferences'
        },
        canActivate: [UserRouteAccessService],
        outlet: 'popup'
    },
    {
        path: 'preference/:id',
        component: PreferencePopupComponent,
        data: {
            authorities: ['ROLE_USER'],
            pageTitle: 'Preferences'
        },
        canActivate: [UserRouteAccessService],
        outlet: 'popup'
    }
];

Я ссылаюсь с ресурса в одном пакете на другой ресурс в другом пакете (то есть, preferenceList to preference). Я экспериментировал с несколькими разными вещами в routerLink, включая не использование именованных маршрутизаторов, но безрезультатно.

2 ответа

Решение

Поскольку я все еще новичок в Angular, я действительно не уверен в деталях, но я полагаю, что эта проблема была связана с моей попыткой использовать маршрут, определенный в другом пакете (используемый другим модулем). Я думаю, что JHipster определил эти маршруты так, чтобы они не могли использоваться другими объектными модулями.

Я решил создать маршрут внутри файла маршрутизации моего модуля PreferenceList и таким образом связать его с нужными компонентами.

Я заметил, что ваш routerLink указывает на "/ preference" единственное число. Я не вижу настроенный маршрут для этого пути в вашем коде.

Из угловой документации:

Имя первого сегмента может начинаться с /,./ или../

  • Если первый сегмент начинается с /, маршрутизатор будет искать маршрут от корня приложения
  • Если первый сегмент начинается с./ или не начинается с косой черты, маршрутизатор вместо этого будет искать дочерние элементы текущего активированного маршрута.
  • И если первый сегмент начинается с../, маршрутизатор поднимется на один уровень вверх.
Другие вопросы по тегам