2015-09-26 18 views
5

私のAureliaアプリケーションのベースタイトル値を設定し、アクティブなルートに基づいてその値を追加したいとします。Aureliaルータconfig.titleに値を追加する

私のルータの設定は次のとおりです。

export class App { 
    configureRouter(config, router) { 
     config.title = 'Brandon Taylor | Web Developer | Graphic Designer'; 
     config.map([ 
      . . . 
      { route: 'work', name: 'work', moduleId: 'work', nav: true, title: ' | work' }, 
      . . . 
     ]); 

     this.router = router; 
    } 
} 

アウレリアはconfig.titleのを開始からtitleナビゲーションパラメータを追加したいが、私は最後でそれをしたいと思います。

私は、ビューモデルでオーバーライドをやってみました:

export class Work { 
    activate(params, routeConfig, navigationInstruction) { 
     routeConfig.navModel.router.title += ' | work'; 
    }; 
} 

が、これは、その結果:各ルーティング要求に

Brandon Taylor | Web Developer | Graphic Designer | work | work | work ... 

。私は間違って何をしていますか?またはtitleという属性をの末尾にconfig.titleに追加するにはどうすればよいですか?

+0

より良い質問は、なぜ3回呼び出されてアクティブにされています。 –

+0

@AshleyGrantには別のコールバックが必要ですか?私はAureliaを使い始めました。ありがとう。 – Brandon

+0

いいえ、あなたは正しい場所を探しています。ただし、ルートが複数回アクティブ化されている場合は、より大きな問題があります。開始するには、アクティブコールバックにブレークポイントをドロップして、何が起こっているのか、またその理由を確認します。 –

答えて

0

感謝。私がなってしまった何

た:

import {NavigationContext} from 'aurelia-router'; 

NavigationContext.prototype.standardBuildTitle = NavigationContext.prototype.buildTitle; 

function buildTitle(separator=' | ') { 
    var titleValues = this.standardBuildTitle(separator).split(separator), 
     routeTitle = titleValues[0], 
     configTitle = titleValues.slice(1); 
    configTitle.push(routeTitle); 
    return configTitle.join(separator); 
} 

NavigationContext.prototype.buildTitle = buildTitle; 

与えられたということで理由:

config.title = 'Brandon Taylor | Web Developer | Graphic Designer' 

と呼び出し:

Graphic Designer | Web Developer | Brandon Taylor | about 
:中

return standardTitle.split(separator).reverse().join(separator); 

結果0

の代わりには:

Brandon Taylor | Web Developer | Graphic Designer | about 
0

私は、上記のコードが〜ダーティ〜回避策であることを知っていますが、あなたがAureliaのサポートから望むものを得るための美しい方法を得るまで、おそらくあなたを助けることができます。

あなたが行うことができませんでした。

export class App { 
    configureRouter(config, router) { 
     const title = 'Brandon Taylor | Web Developer | Graphic Designer'; 
     config.title = ''; 
     var configMap = [ 
      . . . 
      { route: 'work', name: 'work', moduleId: 'work', nav: true, title: ' | work' }, 
      . . . 
     ]; 
     configMap.forEach(item => item.title = title + item.title); 

     config.map(configMap);  
     this.router = router; 
    } 
} 
+1

Clever :)静的なタイトルでは効果がありますが、ビューでは動的な値では効果がありません。 – Brandon

5

アウレリアの標準的なタイトルのロジックは、外側のルート/ルータのタイトルへのルートのタイトルを付加します。たとえば、スケルトン・ナビゲーション・アプリでは、アプリケーション・ルータのタイトルはAureliaです。 githubユーザールートのタイトルはルータタイトルの先頭に追加され、Github Users | Aureliaとなります。子ルータのページに移動する場合、タイトルはWelcome | Child Router | Aureliaに更新されます。 title

質問を正しく理解していただければ、このロジックを元に戻してください。この例の望ましい結果はAurelia | Child Router | Welcomeです。

タイトルビルディングロジックは、NavigationContextクラスのbuildTitleメソッドにあります。

あなたのmain.jsに以下を追加することで、このメソッドをオーバーライドすることができます

// import the NavigationContext class. It contains the method that 
// builds the title. 
import {NavigationContext} from 'aurelia-router'; 

// rename the standard "buildTitle" method. 
NavigationContext.prototype.standardBuildTitle = NavigationContext.prototype.buildTitle; 

// replace the standard "buildTitle" method with a version that 
// reverses the order of the title parts. 
function buildTitle(separator = ' | ') { 
    let standardTitle = this.standardBuildTitle(separator); 
    return standardTitle.split(separator).reverse().join(separator); 
} 
NavigationContext.prototype.buildTitle = buildTitle; 

最終的な結果は次のようになります。右方向@Jeremy Danyowに私を指しているため result

+0

非常に近い!設定タイトルの単語の順番が逆になります。私の答えを見てください。 – Brandon

+0

これはNavigationInstruction内にあり、メソッドは_buildTitleです:https://github.com/aurelia/router/blob/master/src/navigation-instruction.js#L226 – hcoverlambda

+0

'_buildTitle'は公開用ですか?つかいます? [API](http://aurelia.io/docs.html#/aurelia/router/1.0.0-β1.1.3/doc/api/class/NavigationInstruction)には言及していません。 –

関連する問題