组合 API | Vue 路由参数未被监视

Voj*_*rić 2 vue.js vue-router vuejs3 vue-composition-api vue-script-setup

我在watchvue router的文档中有几乎相同的示例用于组合 API。但console.log即使route.params.gameId在模板中正确显示,也永远不会被触发

<script setup>
import { ref, watch } from 'vue'
import { useRoute } from 'vue-router'
import { useStore } from 'vuex'
const store = useStore()
const route = useRoute()

watch(
      () => route.params.gameId,
      async newId => {
        console.log("watch"+newId)
      }
    )
</script>

<template>
    <div>
        {{route.params.gameId}}
    </div>
</template>
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?我还尝试使 watch 函数成为非异步的,但它没有改变任何东西,稍后我将需要它来获取 api,所以它应该是异步的。

Bou*_*him 6

您应该immediate: true向手表添加选项:

watch(
      () => route.params.gameId,
      async newId => {
        console.log("watch"+newId)
      },
      { 
          immediate: true

      }
    )
Run Code Online (Sandbox Code Playgroud)

因为手表不会在第一次渲染时运行,而参数仅在页面加载时更改一次,所以手表会错过该更改。

  • @VojinPurić 由于这个原因,文档中的示例是不切实际的,但它非常具体,“当参数更改时获取用户信息”。它并不断言它是为初始路线导航而获取的。路由器文档的目标不是解释如何使用框架 api。这只是如何访问路线信息的一个片段,而不是一个真实的示例。大多数时候,您可能想要使用导航守卫来获取路线数据,因为它会阻止导航 (2认同)