2017-02-18 5 views
1

子ルート間のナビゲーションで、ルートが見つかりませんでした。私はいくつかの解決策を試してきました。私はいつも注射しています。しかし、私は特定のルートに移動することができません。子ルート間のナビゲーション

create.tsからaccount_viewに移動しようとすると、ルート名が存在しないと表示されますが、create.tsにthis.routerのすべてのルートをリストすると、accounts_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

ディープリンクを失うので、カスタム要素を使用しないでください。 –

答えて

4

することはできません別の子ルータ上の名前付きルートへのルート。今後のAureliaのリリースで、このような問題に対処する方法について検討しています。

言われていることは、あなたがこれをやろうとしているやり方であなたがやろうとしていることをやることができるとは思えません。あなたはそれがの知識を持たないOVERVIEWルータでルートにCREATEルータルートを持ってしようとしている

 APP 
     | 
    ACCOUNTS 
    / \ 
    OVERVIEW CREATE 

:あなたはこのように見える子ルータの構造を有しています。 IMO、あなたは過度にネストされたルータ構造を持っています。私はルータ構造をいくつか平坦化してから、EventAggregatorを使って、親ル​​ータのページが購読してナビゲーションイベントなどを引き起こすイベントを公開することを考えます。

関連する問題