2017-02-18 13 views
1

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

Когда я пытаюсь перейти к account_view из create.ts, он говорит, что имя маршрута не существует, когда я перечисляю все маршруты в this.router в create.ts, он говорит только account_overview и accounts_create, но не дочерние маршруты accounts_overview.

app.ts

import {inject} from 'aurelia-framework'; 
import {RouterConfiguration, Router} from 'aurelia-router'; 
import {HttpClient} from "aurelia-fetch-client"; 
import {AureliaConfiguration} from "aurelia-configuration"; 
import {Container} from 'aurelia-dependency-injection'; 
import {AuthorizeStep} from 'app/authorize-step'; 

export class App { 
    private router: Router; 

    configureRouter(config: RouterConfiguration, router: Router): void { 
     config.title = 'Optios partners'; 
     config.addAuthorizeStep(AuthorizeStep); 
     config.map([ 
      { route: '', redirect: "login" }, 
      { route: '/accounts', name: 'accounts', moduleId: 'account/view/index', title: 'Accounts', settings: { roles: [ 'partner', 'admin' ] } } 
     ]); 
     this.router = router; 
    } 
} 

счета/вид/index.ts

import {computedFrom} from 'aurelia-framework'; 
import {RouterConfiguration, Router} from 'aurelia-router'; 

export class Index { 
    router: Router; 
    hasSearchFocus: boolean; 
    search: string = ''; 

    configureRouter(config: RouterConfiguration, router: Router) 
    { 
     config.map([ 
      { route: '/overview', name: 'accounts_overview', moduleId: 'account/view/overview', nav: true }, 
      { route: '/create', name: 'accounts_create', moduleId: 'account/view/create', nav: true } 
     ]); 

     this.router = router; 
     this.router.refreshNavigation(); 
    } 
} 

счета/просмотр/overview.ts

import {AccountRepository} from "../repository/account-repository"; 
import {inject, computedFrom} from 'aurelia-framework'; 
import {RouterConfiguration, Router} from 'aurelia-router'; 
import {EventAggregator} from 'aurelia-event-aggregator'; 

@inject(AccountRepository, EventAggregator) 
export class Overview { 
    router: Router; 
    eventAggregator: EventAggregator; 
    accountRepository: AccountRepository; 
    accounts: string[]; 
    previousLetter: string = 'Z'; 

    configureRouter(config: RouterConfiguration, router: Router) 
    { 
     config.map([ 
      { route: ['', '/blank'], name: 'account_blank', moduleId: 'account/view/blank', nav: true }, 
      { route: '/:id', name: 'account_view', moduleId: 'account/view/view', nav: true, href: '0' } 
     ]); 

     this.router = router; 
     this.router.refreshNavigation(); 
    } 
} 

счета/вид/create.ts

import {inject} from 'aurelia-framework'; 
import {Router} from 'aurelia-router'; 
import {computedFrom} from 'aurelia-framework'; 
import {HttpClient} from 'aurelia-fetch-client'; 
import {AccountRepository} from "../repository/account-repository"; 

@inject(AccountRepository, Router) 
export class Create 
{ 
    router: Router; 
    accountRepository: AccountRepository; 
    name: string; 
    isSubmitted: boolean = false; 

    constructor(accountRepository: AccountRepository, router: Router) 
    { 
     this.accountRepository = accountRepository; 
     this.router   = router; 
    } 

    create() 
    { 
     this.isSubmitted = true; 
     if (this.isValid()) { 
      this.accountRepository 
       .create(this.name) 
       .then(response => { 
        if (! response.ok) { 
         throw Error(response.statusText); 
        } 

        return response.json(); 
       }) 
       .then(response => { 
        console.log(this.router.routes); 
        this.router.navigateToRoute('account_view'); 

        return response; 
       }) 
       .catch(error => { 
        console.error(error); 
       }); 
     } 
    } 
} 
+1

Почему вы используете ведущие косые черты в определении маршрутов? Они должны работать нормально без них. Https://gist.run/?id=11b928907440e90ea6564ec18d4e0f76 –

+0

да, да, я не знаю, что это произошло. Мне не удалось решить свой вопрос, но я изменил свой подход к работающим и отброшенным дочерним маршрутам и поместил все в отдельные «пользовательские» элементы. Который заставляет меня иногда повторять небольшие части макета. – tmas

+0

Вы не должны использовать Custom Elements для этого, так как вы потеряете глубокую привязку. –

ответ

4

Вы не можете направлять на именованный маршрут на другой маршрутизатор ребенка. Мы обсуждаем способы решения таких вопросов в будущем выпуске Aurelia.

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

 APP 
     | 
    ACCOUNTS 
    / \ 
    OVERVIEW CREATE 

Вы пытаетесь иметь CREATE маршрутизатор маршрута к маршруту в OVERVIEW маршрутизатор, который не имеет никакого знания. ИМО, у вас слишком сложная структура маршрутизатора. Я бы немного сгладил структуру маршрутизатора, а затем подумал об использовании EventAggregator, чтобы опубликовать событие, на которое будет подписаться страница родительского маршрутизатора, и вызвать событие навигации или что-то еще.