2017-10-31 20 views
0

場合によってはURLパラメータを(コードを介して)更新し、イベントをトリガーする必要はありません。しかし、ユーザーがブラウザの戻るボタンを使用して戻る場合や、urlパラメータを手動で変更する場合は、引き続き特定のアクションをトリガする必要があります。

UI-Router v1.xより前は、この種のものに対して$stateChangeSuccessイベントと組み合わせて{ notify: false }を使用しました。しかし今ではdynamic paramsが行く方法です私はこの仕事をこれ以上行う方法を理解できません。

ルートのすべてのパラメータを動的に定義しましたが、$state.go(".", params)を実行すると、コントローラがリフレッシュされません。どちらが期待されている。しかし、$transition.onSuccessは依然としてやや奇妙なことに気付きます。この場合、このイベントが発生するとは思われません。

戻るボタンを使用して戻るとき、または手動でパラメータを変更したときも同じことが起こります。コントローラはリフレッシュされず、$transition.onSuccessが起動します。

私の主な問題は、あるイベントがユーザから来たもので、もう1つがコードから来たものであることをどのように知っているかです。私はここで何が欠けていますか?私はonSuccessコールバックの遷移パラメタをチェックしましたが、それで私に役立つものは見つかりませんでした。別のイベント/フックを使用する必要がありますか、これは単に最新のUI-Routerでこれ以上使用できませんか?

Thnx。

答えて

0

私は移行がどこから来たのかを見つける方法を見つけたようです。誰かが別の/より良い解決策を持っているなら、それを投稿してください、私はこれまでに一番きれいな解決策を見つけられませんが、より良い方法を見つけるまで、 。

// The "to:" ensures the event doesn't trigger for other routes 
this.$transitions.onSuccess({ to: "your.route" }, (trans) => { 
    let changedParams = trans._changedParams(); 
    if (trans._options.source === "url" &&     // transition came from URL change 
     changedParams && changedParams.length > 0) {  // at least one param changed 
    // do something 
    } 
}); 
関連する問題