You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue.js分页中v-model与pageNumber自动更新的逻辑疑问

关于Vuetify分页组件自动更新v-model值的疑问

我是Vue.js新手,每次点击分页页码,控制台都会打印对应页码数字,但我并没有在自定义方法里写增减pageNumber值的逻辑,完全搞不懂这个组件是怎么识别并更新pageNumber的。之前我还傻兮兮地尝试过获取元素文本内容这种复杂操作。

相关代码

<v-pagination
     v-model="pageNumber"
     :length="numberOfPages"
     color="primary"
     totalVisible="5"
     class="paginationComponent"
     @update:modelValue="changePage()">
</v-pagination>

<script>
export default {
  data: () => ({
    pageNumber: 1,
  }),
  methods: {
    init() {
      axios({
        method: "get",
        url: "/products",
        params: {
          size: 10,
          page: this.pageNumber - 1,
        },
      })
        .then((response) => {
          console.log('Success');
        })
        .catch((error) => {
          console.error(error);
        });
    },
    changePage() {
      console.log(this.pageNumber);
      this.init();
    },
  }
}
</script>

分页组件展示:一个包含多个可点击页码按钮的分页控件,当前选中的页码会高亮显示。


这是因为你用了v-model指令绑定pageNumber,Vuetify的v-pagination组件内部已经封装了点击页码时更新绑定值的逻辑——当你点击不同页码,组件会自动触发update:modelValue事件并把选中的页码值传过来,而v-model本质就是Vue提供的语法糖,它会自动帮你完成「监听update:modelValue事件 + 更新绑定的pageNumber数据」这两步操作,根本不需要你手动去写增减数值的代码。

你代码里写的@update:modelValue="changePage()"其实可以简化,甚至不需要单独写这个事件监听:因为v-model已经帮你同步了pageNumber的值,你可以直接通过监听pageNumber的变化来触发请求,比如用Vue的watch选项:

export default {
  // ... 其他代码
  watch: {
    pageNumber() {
      this.init()
    }
  }
}

这样连changePage方法都可以省掉,代码会更简洁。

之前你尝试获取元素文本内容的做法完全是绕远路,Vue的核心思想就是数据驱动视图,这类UI组件已经帮你封装好了交互逻辑,直接用v-model绑定数据就能实现双向同步,不用再操作DOM元素。

内容的提问来源于stack exchange,提问作者SAMPREET GUMPARLA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 22:33:35