VUEルーティングガード——コンポーネント内のルーティングガード
2370 ワード
vue公式、VUE.jsコンポーネント内ナビゲーションガード.ルーティング・コンポーネント内で、次のルーティング・ナビゲーション・ガードを直接定義できます.
ただし、
注意
この離脱ガードは、通常、ユーザが変更を保存する前に突然離脱することを禁止するために使用される.このナビゲーションは、
完全なナビゲーション解析プロセスナビゲーションがトリガーされます. は、不活性化されたコンポーネント内でガードを離れるように呼び出される. は、グローバルな は、再利用されたコンポーネントにおいて は、ルーティング構成において 非同期ルーティングコンポーネントを解析します. は、アクティブ化されたコンポーネントにおいて は、グローバルの ナビゲーションが確認されました. は、グローバルな はDOM更新をトリガする. は、作成されたインスタンスを用いて、
beforeRouteEnter
beforeRouteUpdate
(2.2新規)beforeRouteLeave
beforeRouteUpdate , , 。
const Foo = {
template: `...`,
beforeRouteEnter (to, from, next) {
// confirm
// ! ! `this`
// ,
},
beforeRouteUpdate (to, from, next) {
// ,
// , /foo/:id, /foo/1 /foo/2 ,
// Foo , 。 。
// `this`
},
beforeRouteLeave (to, from, next) {
//
// `this`
}
}
beforeRouteEnter
ガードはthis
にアクセスできません.ガードはナビゲーション確認前に呼び出されるため、間もなく登場する新しいコンポーネントはまだ作成されていません.ただし、
next
にコールバックすることで、コンポーネントインスタンスにアクセスできます.ナビゲーションが確認されたときにコールバックを実行し,コンポーネントインスタンスをコールバックメソッドのパラメータとする.beforeRouteEnter (to, from, next) {
next(vm => {
// `vm`
})
}
注意
beforeRouteEnter
は、next
へのコールバックをサポートする唯一のガードである.beforeRouteUpdate
およびbeforeRouteLeave
では、this
は既に利用可能であるため、必要がないため、転送コールバックはサポートされない.beforeRouteUpdate (to, from, next) {
// just use `this`
this.name = to.params.name
next()
}
この離脱ガードは、通常、ユーザが変更を保存する前に突然離脱することを禁止するために使用される.このナビゲーションは、
next(false)
によってキャンセルすることができる.beforeRouteLeave (to, from , next) {
const answer = window.confirm('Do you really want to leave? you have unsaved changes!')
if (answer) {
next()
} else {
next(false)
}
}
完全なナビゲーション解析プロセス
beforeEach
ガードを呼び出す.beforeRouteUpdate
ガード(2.2+)を呼び出す.beforeEnter
を呼び出す.beforeRouteEnter
を呼び出す.beforeResolve
ガード(2.5+)を呼び出す.afterEach
フックを呼び出す.beforeRouteEnter
ガードにおいてnext
に伝達されるコールバック関数を呼び出す.