Аурелия: Детски маршрутизатор Навигация: Маршрутът не е намерен

По-долу са моите изгледи: 1. app - стандартен 2. home - Има списък с елементи вляво, при избор на който и да е, ще покаже част от съдържанието от дясната страна в изгледа на рутера (изгледът на договора ще бъде зареден). 3. contract-view

app.ts: конфигурация на маршрута:

configureRouter(config: RouterConfiguration, router: Router) {
        config.title = 'Contracts Portal';
        config.map([
            { route: ['', 'home'], name: 'home', moduleId: 'home', nav: true, title: 'Home' },
            { route: 'resources', name: 'resources', moduleId: 'resources', nav: true, title: 'Resources' },
            { route: 'tools', name: 'tools', moduleId: 'tools', nav: true, title: 'Tools' }
        ]);
        this.router = router;
    }

Конфигурация на рутера Home.ts:

configureRouter(config: RouterConfiguration, router: Router) {
        config.title = "test";
        config.map([
            { route: ['', 'contract-view/:id'], name: 'contract-view', moduleId: 'contract-view', nav: true, title: 'Test' } 
        ]);
        this.router = router;
    }

при избор на елемент в списъка с начални страници, опитвам се да навигирам както е показано по-долу, за да заредя съдържание в изгледа на рутера в десния панел, в home.ts:

this.router.navigateToRoute("contract-view", { id: 4090 });

Въпреки това извежда грешката: Маршрутът не е намерен: /contract-view/4090

В този момент това все още е начална страница и маршрут по подразбиране, следователно url адресът гласи: http://localhost:9000/#/ и така се проваля. Но ако ръчно променя URL адреса на http://localhost:9000/#/home и след това избера елемент от списъка, навигацията към изглед на договор работи. Какво ми липсва тук?

Търся абсолютна навигация по пътя. Опитах да навигирам до home/contract-view, но не успях с грешка: Маршрут с име „home/contract-view“ не може да бъде намерен. Проверете дали името: home/contract-view е посочено в конфигурацията на маршрута.


person TSR    schedule 17.12.2015    source източник


Отговори (2)


Маршрутът по подразбиране на Home.ts има параметър:

config.map([
     { route: ['', 'contract-view/:id'], name: 'contract-view', moduleId: 'contract-view', nav: true, title: 'Test' } 
]);

Това може да е проблем, защото параметърът :id не се споменава в първото име. Така че предлагам да промените маршрута, както следва:

config.map([
     //create another route with no parameters,
     //this route will represent an empty selection of contract
     { route: [ '', 'contract-view' ], name: 'contract-view-empty', moduleId: 'contract-view-empty', Title: 'Select a Contract' } 
     { route: 'contract-view/:id', name: 'contract-view', moduleId: 'contract-view', nav: true, title: 'Test' } 
]);

След това, за да генерирате връзка за навигация, можете да използвате route-href attr. Като този:

<a route-href="/bgroute: contract-view; params.bind: { id: 4090 }">Navigate</a>

Дано помогне!

person Fabio Luz    schedule 17.12.2015
comment
Навигацията по подразбиране е наред. Проблемът възниква само когато навигирам от viewmodel с помощта на това: this.router.navigateToRoute("contract-view", { id: 4090 }); Опитва се да извърши относителна навигация, докато url все още чете /#/. - person TSR; 18.12.2015
comment
Освен това всъщност нямам етикет, а div, който не отговаря на route-href. И така, използвам click.delegate=$parent.select(contract) и във функцията за избор навигирам. - person TSR; 18.12.2015
comment
моля, предоставете и html, съдържащ функцията div и select - person Fabio Luz; 18.12.2015
comment
` ‹ul› ‹li repeat.for=договор за договори click.delegate=$parent.select(contract)› ... ‹/li› ‹/ul› ` - person TSR; 21.12.2015
comment
можеш ли да използваш a? <ul> <li repeat.for="contract of contracts" > <a click.delegate="$parent.select(contract)"></a> </li> </ul> - person Fabio Luz; 21.12.2015

Това е проблем с рамката на Aurelia Router. Дискусия и заобиколно решение тук: https://github.com/aurelia/skeleton-navigation/issues/230

person TSR    schedule 22.12.2015