私の質問は:ルータのビュー間を入れ替えると、ルータビューの同じビューモデルインスタンスを維持できますか?Aureliaルーティング - 毎回新しいビューモデルをインスタンス化するのを防ぐ
私は私の問題について説明します:EventAggregator
のおかげで、ルータの子コンポーネントが通信できるようにしたいと思います。私のルータ - 子コンポーネントの1つは、ボタンをクリックしてメッセージを公開し、もう1人がそれを購読します。ここで
は、そのイベントをサブスクライブコンポーネントのコードです:
constructor(private ea: EventAggregator) {
ea.subscribe(GameInfo, msg => console.log(msg));
}
私は私のボタンをクリックすると、私はコンソール複数のログ(またはnone)で見る私はナビゲート時間の数に応じて、私の意見には購読しています。ここで
は、私のルータコンポーネントです:
import {Router, RouterConfiguration} from 'aurelia-router';
export class Playground {
public router: Router;
public configureRouter(config: RouterConfiguration, router: Router) {
config.map([
{ route: ['', 'media-creator'], name: 'media-creator', moduleId: './media-creator/media-creator', nav: true, title: 'Media Creator' },
{ route: 'board-initializer', name: 'board-initializer', moduleId: './board-initializer/board-initializer', nav: true, title: 'Board Initializer' },
{ route: 'code-editor', name: 'code-editor', moduleId: './code-editor/code-editor', nav: true, title: 'Code Editor' }
]);
this.router = router;
}
}
私はコードエディタにボード初期化子からの情報を送信したいのですが、私はルータをナビゲートしていたとき、私は、各コンポーネントの状態を維持する必要があります。
おそらく、このメカニズムを防ぐことはできません。私の解決策は、ブートストラップnav-tabs/data-toggleを使用することです。
ありがとうございました。
実際の問題は、同じView Modelから複数のイベントリスナーを取得することです。 – Tom
@thebluefox私の問題は、私のビューに移動するたびに私のコンストラクタが呼び出され、同じイベントに複数回サブスクライブすることだと思います。もう1つは、私が(少なくともBoardInitializerコンポーネントのために)ナビゲートしているときと同じ状態にモデルビューを保持したいので、ユーザーはそのビューで行ったことを失わないということです。 – SimonC
こんにちは@SimonC、thebluefoxさんがあなたの質問に答えましたか?そうでない場合、私はさらに助けてくれることを嬉しく思っています。あなたの質問に答えるなら、受け入れられた答えに印を付けてください。ありがとう! – thinkOfaNumber