LoginSignup
IcheleaL
@IcheleaL

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Vue.jsでrouter-link内のcomputedが呼び出されない

解決したいこと

Vue.jsのチュートリアルとして
Vue-cliでページングを行う機能を搭載するWebアプリを作成しております。
本を参考にしており、記載されているコードをそのまま貼り付けましたが、期待する動きになりませんでした。

コードをいろいろ変えてみて$route.paramsは取得できていることはわかりましたが、
なぜcomputedが呼び出されないのかが分かりませんでした。

発生している問題・エラー

http://localhost:8080/paging/12
にアクセスした際の画面

image.png

nextを押した際の画面(prevも同様)
image.png

該当するソースコード

project
-src
--views
---Paging.vue

<template>
<div class="about">
  <h1>Page:{{$route.params.page}}</h1>
  <router-link :to="'/paging/${prevPage}'">Prev</router-link>
  <router-link :to="'/paging/${nextPage}'">Next</router-link>
</div>
</template>
<script>
export default {
  computed: {
    prevPage() {
      return Number(this.$route.params.page) - 1
    },
    nextPage() {
      return Number(this.$route.params.page) + 1
    }
  }

}
</script>

project
-src
--router
---index.js

import Vue from 'vue'
import VueRouter from 'vue-router'
import Home from '../views/Home.vue'

Vue.use(VueRouter)

const routes = [
  {
    path: '/',
    name: 'Home',
    component: Home
  },
  {
    path: '/about',
    name: 'About',
    // route level code-splitting
    // this generates a separate chunk (about.[hash].js) for this route
    // which is lazy-loaded when the route is visited.
    component: () => import(/* webpackChunkName: "about" */ '../views/About.vue')
  },
  {
    path: '/counter',
    component: () => import(/* webpackChunkName: "count" */ '../views/Count.vue')
  },
  {
    path: '/paging/:page',
    component: () => import(/* webpackChunkName: "paging" */ '../views/Paging.vue')
  }
]

const router = new VueRouter({
  mode: 'history',
  base: process.env.BASE_URL,
  routes
})

export default router

project
-src
--App.vue

<template>
<div id="app">
  <div id="nav">
    <router-link to="/">Home</router-link> |
    <router-link to="/about">About</router-link> |
    <router-link to="/counter">Counter</router-link>
  </div>
  <router-view />
</div>
</template>

自分で試したこと

vuejs router-link computed 呼び出されない で検索をし
https://ics.media/entry/200716/
こちらの記事を見つけて、
3. 微妙に再計算されない/されるcomputed
を参考にconsole.logの追加をしてみましたが、ログが出力されていなかったので、
呼び出されていないことはわかりましたが、原因が分かりませんでした。

0

2Answer

<router-link :to="'/paging/${prevPage}'">Prev</router-link>
<router-link :to="'/paging/${nextPage}'">Next</router-link>

ではなく

<router-link :to="`/paging/${prevPage}`">Prev</router-link>
<router-link :to="`/paging/${nextPage}`">Next</router-link>

ではないでしょうか。

0

ほかの言語で`を使う機会があまりなかったのでシングルクォーテーションと同じものだと思っていたのですが別ものなんですね。
盲点でした。ありがとうございます。

0

Your answer might help someone💌