ガイド
基本的な使い方
- インストール
- はじめに
- Vue インスタンス
- テンプレート構文
- 算出プロパティとウォッチャ
- クラスとスタイルのバインディング
- 条件付きレンダリング
- リストレンダリング
- イベントハンドリング
- フォーム入力バインディング
- コンポーネントの基本
コンポーネントの詳細
- コンポーネントの登録
- プロパティ
- カスタムイベント
- スロット
- 動的 & 非同期コンポーネント
- 特別な問題に対処する
トランジションとアニメーション
- Enter/Leave とトランジション一覧
- 状態のトランジション
再利用と構成
- ミックスイン
- カスタムディレクティブ
- 描画関数とJSX
- プラグイン
- フィルター
ツール
- 単一ファイルコンポーネント
- テスト
- TypeScript のサポート
- プロダクション環境への配信
スケールアップ
- ルーティング
- 状態管理
- サーバサイドレンダリング
- セキュリティ
内部
- リアクティブの探求
移行
- Vue 1.x からの移行
- Vue Router 0.7.x からの移行
- Vuex 0.6.x から 1.0 への移行
その他
- 他のフレームワークとの比較
- Vue.js コミュニティへ参加しましょう!
- チームに会おう
v2.x 以前のドキュメントです。 v3.x のドキュメントを見たい場合はこちら
Vue Router 0.7.x からの移行
最終更新日: 2019年5月8日
Vue Router 2.0 は Vue 2.0 に対応する唯一のルータなので、 Vue を更新する場合には Vue Router も同様に更新する必要があります。2.0 のドキュメントに移行ガイドが用意されているのもそういう理由からです。新しい Vue Router を用いた包括的なドキュメントは Vue Router ドキュメントを確認してください。
ルータの初期化
router.start
置き換え
Vue Router でアプリケーションを初期化するための特別な API はなくなりました。以下の代わりに:
router.start({
template: '<router-view></router-view>'
}, '#app')
Vue インスタンスに router プロパティを渡すだけです:
new Vue({
el: '#app',
router: router,
template: '<router-view></router-view>'
})
または、Vue のランタイムのみのビルドを使用している場合は:
new Vue({
el: '#app',
router: router,
render: h => h('router-view')
})
移行ガイド
コードに対し 移行ヘルパー を実行し router.start
がコールされる箇所を検出してください。
ルートの定義
router.map
置き換え
ルートは routes
オプション に配列として定義されるようになりました。例えばこのようなルートの記述は:
router.map({
'/foo': {
component: Foo
},
'/bar': {
component: Bar
}
})
このように記述するようになります:
var router = new VueRouter({
routes: [
{ path: '/foo', component: Foo },
{ path: '/bar', component: Bar }
]
})
オブジェクトの反復走査はプロパティの順序にブラウザ毎の一貫性がないため、配列による記法を用いることで、より予測可能なルートのマッチングを実現しています。
移行ガイド
コードに対し 移行ヘルパー を実行し router.map
がコールされる箇所を検出してください。
router.on
削除
アプリケーションの開始時に、機械的にルートを生成する必要がある場合、ルートの配列に対し動的に定義を追加することができます。例えば次のような形です:
// 通常のルート定義
var routes = [
// ...
]
// 動的に生成されるルート定義
marketingPages.forEach(function (page) {
routes.push({
path: '/marketing/' + page.slug
component: {
extends: MarketingComponent
data: function () {
return { page: page }
}
}
})
})
var router = new Router({
routes: routes
})
ルータが初期化された後に新しいルートを追加する必要がある場合、加筆された新しいルート機構で、既存のものを置き換えることができます。
router.match = createMatcher(
[{
path: '/my/new/path',
component: MyComponent
}].concat(router.options.routes)
)
移行ガイド
コードに対し移行ヘルパー を実行し router.on
がコールされる箇所を検出してください。
router.beforeEach
変更
router.beforeEach
は現在非同期に動作し、3番目の引数として next
関数を取ります。
router.beforeEach(function (transition) {
if (transition.to.path === '/forbidden') {
transition.abort()
} else {
transition.next()
}
})
router.beforeEach(function (to, from, next) {
if (to.path === '/forbidden') {
next(false)
} else {
next()
}
})
subRoutes
名前変更
Vue と他のルータライブラリとの一貫性のために、children
に名前が変更されました。
移行ガイド
コードに対し移行ヘルパー を実行し subRoutes
がコールされる箇所を検出してください。
router.redirect
置き換え
ルート定義におけるオプション として記述するようになりました。よって、例えば次のような例は:
router.redirect({
'/tos': '/terms-of-service'
})
routes
設定内にて次のように記述します:
{
path: '/tos',
redirect: '/terms-of-service'
}
移行ガイド
コードに対し移行ヘルパー を実行しrouter.redirect
がコールされる箇所を検出してください。
router.alias
置き換え
ルート定義におけるオプション として記述するようになりました。よって、例えば次のような例は:
router.alias({
'/manage': '/admin'
})
routes
設定内にて次のように記述します:
{
path: '/admin',
component: AdminPanel,
alias: '/manage'
}
複数のエイリアスが必要な場合、配列記法を用いることができます。
alias: ['/manage', '/administer', '/administrate']
移行ガイド
コードに対し 移行ヘルパー を実行し router.alias
がコールされる箇所を検出してください。
任意のルートプロパティ 置き換え
将来の機能との競合を避けるために、任意のルートプロパティのスコープを新しいメタプロパティの下に設定する必要があります。例えば、次のように定義したとします:
'/admin': {
component: AdminPanel,
requiresAuth: true
}
次に、それを次のように更新します:
{
path: '/admin',
component: AdminPanel,
meta: {
requiresAuth: true
}
}
その後、ルート上でこのプロパティにアクセスすると、メタを通過します。例えば:
if (route.meta.requiresAuth) {
// ...
}
移行ガイド
コードに対し 移行ガイド を実行しメタの下でスコープされない任意のルートプロパティを利用している箇所を検出してください。
[]クエリ内配列のための構文 削除
クエリパラメータに配列を渡すとき QueryString の構文はもはや /foo?users[]=Tom&users[]=Jerry
ではなく、その代わり、新しい構文は /foo?users=Tom&users=Jerry
となりました。 内部的には、 $route.query.users
は以前として配列ですが、 もしクエリ内にパラメータが1個で: /foo?users=Tom
、このルートに直接アクセスしたとき、ルータは users
を配列として期待しているかどうかを知る方法がありません。そのため、算出プロパティを追加し、 $route.query.users
の全ての参照をそれに置き換えることを検討してください:
export default {
// ...
computed: {
// users は常に配列となります
users () {
const users = this.$route.query.users
return Array.isArray(users) ? users : [users]
}
}
}
ルートのマッチング
より柔軟性を高めるために、ルートのマッチングの内部処理には、 path-to-regexp が利用されるようになりました。
1つ以上の名前付きパラメータ
構文に多少の変化があります。例えば /category/*tags
は /category/:tags+
に変更する必要があります。
移行ガイド
コードに対し 移行ガイド を実行し廃止された文法を利用している箇所を検出してください。
リンク
v-link
置き換え
Vue 2.0 におけるコンポーネントの機能の一環として、v-link
ディレクティブは新しく <router-link>
コンポーネント に置き換えられました。以下のような形で記述されたリンクは:
<a v-link="'/about'">About</a>
次のように変更しなければなりません:
<router-link to="/about">About</router-link>
<router-link>
では target="_blank"
はサポートされいないことに注意してください。新しいタブでリンクを開く必要がある場合は、<a>
を代わりに使用しなければなりません。
移行ガイド
コードに対し 移行ヘルパー を実行し v-link
ディレクティブが使用されている箇所を検出してください。
v-link-active
置き換え
<router-link>
コンポーネント でタグの指定が可能なため、 v-link-active
ディレクティブは廃止されました。よって、例えば次のような例は:
<li v-link-active>
<a v-link="'/about'">About</a>
</li>
このような形になります:
<router-link tag="li" to="/about">
<a>About</a>
</router-link>
<a>
が実際のリンクとなり (正しい href をもっています), active クラスは外側の <li>
に付与されます。
移行ガイド
コード上で 移行ガイド を実行し v-link-active
ディレクティブが使用されている箇所を検出してください。
動的なナビゲーション
router.go
変更
HTML5 History API と一貫性を保つために、router.go
は戻る/進むナビゲーションのために使用されます。router.push
は特定のページに移動するために使用されます。
移行ガイド
コードに対し 移行ヘルパー を実行し router.push
の代わりに使用される router.go
がコールされる箇所を検出してください。
ルータオプション: モード
hashbang: false
削除
Google にURL をクロールさせるために Hashbangs を用いる必要はもはやなくなりました。よってハッシュの方式としてデフォルトではなくなり、オプションとして利用できなくなりました。
移行ガイド
コードに対し 移行ヘルパー を実行し hashbang: false
オプションが利用されている箇所を検出してください。
history: true
置き換え
ルーティングの動作に関するオプションは mode
オプション にまとめられました。このような記述は:
var router = new VueRouter({
history: 'true'
})
次のように変更しなければなりません:
var router = new VueRouter({
mode: 'history'
})
移行ガイド
コードに対し 移行ヘルパー を実行し history: true
オプションが使用されている箇所を検出してください。
abstract: true
置き換え
ルーティングの動作に関するオプションは mode
オプション にまとめられました。このような記述は:
var router = new VueRouter({
abstract: 'true'
})
次のように変更しなければなりません:
var router = new VueRouter({
mode: 'abstract'
})
移行ガイド
コードに対し 移行ヘルパー を実行し abstract: true
オプションが使用されている箇所を検出してください。
その他のルートオプション
saveScrollPosition
置き換え
関数を受け付ける scrollBehavior
オプション に変更されました。スクロールの挙動は、ルートごとに完全にカスタマイズ可能になりました。これによってより多くの可能性がひらかれましたが、単に以前の挙動を再現したい場合もあるでしょう。これまで、次のように記述していた所は:
saveScrollPosition: true
このように変更すれば、同じ動作が保たれます:
scrollBehavior: function (to, from, savedPosition) {
return savedPosition || { x: 0, y: 0 }
}
移行ガイド
コードに対し 移行ヘルパー を実行し saveScrollPosition: true
オプションを使用している箇所を検出してください。
root
名前変更
HTML の <base>
要素と合わせるため base
に名称変更されました。
移行ガイド
コードに対し 移行ヘルパー を実行し root
オプションを使用している箇所を検出してください。
transitionOnLoad
削除
Vue のトランジション機能に、appear
トランジションの制御 が実装されたため、このオプションはもはや不要になりました。
移行ガイド
コードに対し 移行ヘルパー を実行し transitionOnLoad: true
オプションを使用している箇所を検出してください。
suppressTransitionError
削除
フックをよりシンプルにするために削除されました。どうしてもトランジションのエラーを抑制しなければならない場合 try
…catch
構文を代わりに使用してください。
移行ガイド
コードに対し 移行ヘルパー を実行し suppressTransitionError: true
オプションを使用している箇所を検出してください。
ルートフック
activate
置き換え
代わりにコンポーネントにて beforeRouteEnter
を使用してください。
移行ガイド
コードに対し 移行ヘルパー を実行し activate
フックを使用している箇所を検出してください。
canActivate
置き換え
代わりに、ルート内で beforeEnter
を使用してください。
移行ガイド
コードに対し 移行ヘルパー を実行し canActivate
フックを使用している箇所を検出してください。
deactivate
削除
代わりに、コンポーネントにて beforeDestroy
を使用するか destroyed
フックを使用するようにしてください。
移行ガイド
コードに対し 移行ヘルパー を実行し deactivate
フックを使用している箇所を検出してください。
canDeactivate
削除
代わりに、コンポーネント内で beforeRouteLeave
を使用してください。
移行ガイド
コードに対し 移行ヘルパー を実行し canDeactivate
フックを使用している箇所を検出してください。
canReuse: false
削除
新しい Vue Router ではこれを使用する場面は無いでしょう。
移行ガイド
コードに対し 移行ヘルパー を実行し canReuse: false
option.
data
置き換え
$route
プロパティは常にリアクティブなため、ルートの変更は次のようにウォッチ機能を利用する事で検出できます:
watch: {
'$route': 'fetchData'
},
methods: {
fetchData: function () {
// ...
}
}
移行ガイド
コードに対し 移行ヘルパー を実行し data
フックを使用している箇所を検出してください。
$loadingRouteData
削除
独自のプロパティを定義し (例えば isLoading
), ルートのウォッチャーでローティングの状態を更新してください。例えば axiosのデータを取り込む場合、次のような例になります:
data: function () {
return {
posts: [],
isLoading: false,
fetchError: null
}
},
watch: {
'$route': function () {
var self = this
self.isLoading = true
self.fetchData().then(function () {
self.isLoading = false
})
}
},
methods: {
fetchData: function () {
var self = this
return axios.get('/api/posts')
.then(function (response) {
self.posts = response.data.posts
})
.catch(function (error) {
self.fetchError = error
})
}
}
移行ガイド
コードに対し 移行ヘルパー を実行し $loadingRouteData
メタプロパティが使用されている箇所を検出してください。