Loading...
{{ error }}
{{ post.title }}
{{ post.body }}
Hello App!
Go to Foo
Go to Bar
// 0. , Vue VueRouter, Vue.use(VueRouter)
// 1. ( ) 。
// import
const Foo = { template: 'foo' }
const Bar = { template: 'bar' }
// 2.
// 。 "component"
// Vue.extend() ,
// , 。
// 。
const routes = [
{ path: '/foo', component: Foo },
{ path: '/bar', component: Bar }
]
// 3. router , `routes`
// , 。
const router = new VueRouter({
routes // ( ) routes: routes
})
// 4. 。
// router ,
//
const app = new Vue({
router
}).$mount('#app')
// , !
this.$router
を して のパスにアクセスするように、 のコンポーネントで this.$router
を して ねることができます.export default {
computed: {
username () {
// `params`
return this.$route.params.username
}
},
methods: {
goBack () {
window.history.length > 1
? this.$router.go(-1)
: this.$router.push('/')
}
}
}
const router = new VueRouter({
routes: [
{
path: '/user/:userId',
name: 'user',
component: User
}
]
})
router-link
のto
プロパティにオブジェクトを すことができます.User
router.push()
と じです.router.push({ name: 'user', params: { userId: 123 }})
/user/123
パスにナビゲートされます.const router = new VueRouter({
routes: [
{ path: '/a', redirect: '/b' }
]
})
const router = new VueRouter({
routes: [
{ path: '/a', redirect: { name: 'foo' }}
]
})
const router = new VueRouter({
routes: [
{ path: '/a', redirect: to => {
//
// return /
}}
]
})
:/a
の は /b
であり、ユーザが /b
にアクセスするとURLは /b
に されるが、ルーティングマッチングは /a
であり、ユーザが /a
にアクセスするようにする.const router = new VueRouter({
routes: [
{ path: '/a', component: A, alias: '/b' }
]
})
const User = {
template: 'User {{ $route.params.id }}'
}
const router = new VueRouter({
routes: [
{ path: '/user/:id', component: User }
]
})
const User = {
props: ['id'],
template: 'User {{ id }}'
}
const router = new VueRouter({
routes: [
{ path: '/user/:id', component: User, props: true },
// , `props` :
{
path: '/user/:id',
components: { default: User, sidebar: Sidebar },
props: { default: true, sidebar: false }
}
]
})
props
は、 true
, route.params
は、コンポーネント として されます.const router = new VueRouter({
mode: 'history',
routes: [...]
})
const router = new VueRouter({
mode: 'history',
routes: [
{ path: '*', component: NotFoundComponent }
]
})
meta
フィールドを できます.const router = new VueRouter({
routes: [
{
path: '/foo',
component: Foo,
children: [
{
path: 'bar',
component: Bar,
// a meta field
meta: { requiresAuth: true }
}
]
}
]
})
を して、 なる name
を することができます.const Foo = {
template: `
...
`
}
const Bar = {
template: `
`
}
linkActiveClass
によってグローバルに することができる.
const router = new VueRouter({
routes: [
{ path: '/user/:id', component: User,
children: [
{
// /user/:id/profile ,
// UserProfile User
path: 'profile',
component: UserProfile
},
{
// /user/:id/posts
// UserPosts User
path: 'posts',
component: UserPosts
}
]
}
]
})
/
の にネストされたパスが
. これにより、ネストされたパスを することなく、ネストされたコンポーネントを に できます.//
router.push('home')
//
router.push({ path: 'home' })
//
router.push({ name: 'user', params: { userId: 123 }})
// , /register?plan=private
router.push({ path: 'register', query: { plan: 'private' }})
path
, params
は されます. の では query
はこの ではありません. わりに の の では、ルーティングを する があります.name
または きで なパラメータ きpath
: const userId = 123
router.push({ name: 'user', params: { userId }}) // -> /user/123
router.push({ path: `/user/${userId}` }) // -> /user/123
// params
router.push({ path: '/user', params: { userId }}) // -> /user
// , history.forward()
router.go(1)
// , history.back()
router.go(-1)
// 3
router.go(3)
// history ,
router.go(-100)
router.go(100)
sidebar
(サイドナビゲーション)とmain
(メインコンテンツ)の2つのビューがあり、このとき きビューが ちます.インタフェースには、1つの だけではなく、 の に されたビューを つことができます.router-view
に が されていない 、デフォルトは default
です.
components
が しく されていることを します(s き):const router = new VueRouter({
routes: [
{
path: '/',
components: {
default: Foo,
a: Bar,
b: Baz
}
}
]
})
router.beforeEach
を して、グローバル・フロント・ガードを できます.const router = new VueRouter({ ... })
router.beforeEach((to, from, next) => {
// ...
})
to: Route
:アクセスするターゲットルーティングオブジェクトfrom: Route
: のナビゲーションが れようとするルーティングnext: Function
:このフックをresolveするために、このメソッドを び す があります. はnextメソッドの び しパラメータに します.next()
:パイプ の のフックを います.すべてのフックが されると、ナビゲーションの はconfirmed( された)になります.next(false)
: のナビゲーションを します.ブラウザのURLが された (ユーザ またはブラウザ ボタンの があります)、URLアドレスはfromルーティングに するアドレスにリセットされます.next('/')
またはnext({ path: '/' })
: なるアドレスにジャンプします. のナビゲーションが され、 しいナビゲーションが われます. の オブジェクトをnextに すことができ、replace:true、name:'home'などのオプションとrouter-link
で されるto propまたはrouterを することができます.pushのオプション.next(error)
:(2.4.0+)nextに されたパラメータがErrorインスタンスである 、ナビゲーションは し、このエラーはrouter.onError()
に されたコールバックに される.next
メソッドが び されないようにしてください.そうしないと、フックは resolved
になりません.next
を け れず、ナビゲーション を しません.router.afterEach((to, from) => {
// ...
})
beforeEnter
ガードを できます.const router = new VueRouter({
routes: [
{
path: '/foo',
component: Foo,
beforeEnter: (to, from, next) => {
// ...
}
}
]
})
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`
}
}
Loading...
{{ error }}
{{ post.title }}
{{ post.body }}
export default {
data () {
return {
loading: false,
post: null,
error: null
}
},
created () {
// ,
// data observed
this.fetchData()
},
watch: {
// ,
'$route': 'fetchData'
},
methods: {
fetchData () {
this.error = this.post = null
this.loading = true
// replace getPost with your data fetching util / API wrapper
getPost(this.$route.params.id, (err, post) => {
this.loading = false
if (err) {
this.error = err.toString()
} else {
this.post = post
}
})
}
}
}
beforeRouteEnter
ガードでデータを することができ、データ に した 、next
メソッドのみを び すことができる.export default {
data () {
return {
post: null,
error: null
}
},
beforeRouteEnter (to, from, next) {
getPost(to.params.id, (err, post) => {
next(vm => vm.setData(err, post))
})
},
// ,
//
beforeRouteUpdate (to, from, next) {
this.post = null
getPost(to.params.id, (err, post) => {
this.setData(err, post)
next()
})
},
methods: {
setData (err, post) {
if (err) {
this.error = err.toString()
} else {
this.post = post
}
}
}
}
vue-router
は、ルーティング り え にページがどのようにスクロールするかをカスタマイズすることができます.history.pushState
をサポートするブラウザでのみ できます.const router = new VueRouter({
routes: [...],
scrollBehavior (to, from, savedPosition) {
// return
}
})
scrollBehavior
メソッドは、toおよびfromルーティングオブジェクトを する.3 のパラメータsavedPosition
は、ブラウザの / ボタンによってトリガーされた popstate
がナビゲートされた にのみ である.falsy
(falsyはfalseではありません.ここを )の を すか、 のオブジェクトを すと、スクロールは しません.scrollBehavior (to, from, savedPosition) {
return { x: 0, y: 0 }
}
savedPosition
に り、 / ボタンを すとブラウザのオリジナル のようになります.scrollBehavior (to, from, savedPosition) {
if (savedPosition) {
return savedPosition
} else {
return { x: 0, y: 0 }
}
}
scrollBehavior (to, from, savedPosition) {
if (to.hash) {
return {
selector: to.hash
}
}
}