2016-06-21 19 views
0

私のプロジェクトでは、他のルートを経由して移動しない限り、ユーザーにアクセスさせたくないルートがあります。今、私は経路に移行するときに変数を渡すべきだと思っています。ルートがロードされると、その変数を調べ、それを使用してページをロードするか、別のページにリダイレクトするかを判断する必要があります。 transitionToとtransitionToRouteは、コントローラとモデル内の変数のみを設定できます。私は間違いなくリダイレ​​クトのためだけに私のモデルに属性を追加したくないので、コントローラに変数を設定するべきだと思っています。ルートをロードするときは、activate、beforeModel、afterModelなどの関数を呼び出すことができますが、コントローラの前に実行されるものはすべて作成されます。これは、transitionToまたはtransitionToRouteの間にコントローラに渡された変数を読み取ることができないことを意味します。コントローラーでは、コントローラー変数を正常に読み取るinitを呼び出すことができますが、ページが正しく(transitionToを介して)アクセスされると、init関数は最初にレンダリングに失敗します。私が同じセッションで後でそれに行くと、正しくレンダリングされます。Ember js - ページがURLでアクセスされた場合のリダイレクト

ここでは、ユーザーがページに正しくアクセスしたかどうかを確認する簡単な方法が必要であると仮定しています。 transitionToの間に経路変数を設定する方法はないようですが、経路がロードされたときにパラメータを渡して読み込むことはできますか?どんな洞察も高く評価されるだろう。

答えて

2

ルータ内には、setupControllerフックを使用できます。その署名は

setupController(controller, context, transition) { 
    if (controller && (context !== undefined)) { 
     set(controller, 'model', context); 
    } 
    }, 

です。最後のパラメータはtransitionです。これはオプションです。ユーザーがルートにアクセスする方法に関する情報が含まれています。ナビゲーションまたはアプリケーション自体のいずれかで、ユーザーがページを更新したりURLを直接入力すると空になります。

+0

移行はAPIドキュメントhttps://emberjs.com/api/ember/3.0/classes/Route/methods/setupController?anchor=setupControllerの一部ではありませんが、非表示のパラメータです。それは将来のEmberのバージョンでそれがなくなることを意味するでしょうか? – michaelklopf

関連する問題