Vue3中子组件向父组件传值的方法

这篇具有很好参考价值的文章主要介绍了Vue3中子组件向父组件传值的方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

父组件可以通过props向子组件传值, 子组件可以用过 emits(‘update:prop’, propValue) 修改父组件绑定在此Prop上父组件的值
本文演示了一个可以缓存分页大小(每页显示几行数据)的分页组件的使用, 它是对el-pagination做了一个简单的封装

子组件

如下是一个分页组件
核心: 在换页时通过 emits(‘update:skipCount’, skipCount) 更新Prop和绑定在此Prop上父组件的值
MkPagination.vue

<template>
  <el-pagination
    v-model:currentPage="data.currentPage"
    v-model:page-size="props.pageSize"
    v-model:total="props.totalCount"
    :page-sizes="[5, 10, 15, 20, 25, 30, 50, 100]"
    layout="total, sizes, prev, pager, next, jumper"
    @size-change="sizeChange"
    @current-change="currentChange"
    class="main"
  />
</template>

<script lang="ts" setup>
import { reactive } from 'vue'
import { getPageSize, setPageSize, isNull } from '@/utils'

//定义公共参数
const props = defineProps({
  skipCount: {
    type: Number,
    default: 0,
  },
  pageSize: {
    type: Number,
    default: function () {
      return getPageSize()
    },
  },
  totalCount: {
    type: Number,
    default: 0,
  },
})

const data = reactive({
  currentPage: props.skipCount / props.pageSize + 1,
})

let _pageSize = props.pageSize

//修改了页大小
const sizeChange = (pageSize: number) => {
  setPageSize(pageSize) //缓存页大小
  data.currentPage = 1 // 回到第一页
  _pageSize = pageSize //记录页大小
  // 回到第一页 : 修改页大小时SkipCount修改为0
  query(0, pageSize)
}

//修改了当前页码
const currentChange = (currentPage: number) => {
  var skipCount = (currentPage - 1) * _pageSize //修改页码时,计算SkipCount
  query(skipCount, _pageSize)
}

const query = (skipCount: number, pageSize: number) => {
  emits('update:skipCount', skipCount) //更新Prop和绑定在此Prop上父组件的值
  emits('update:pageSize', pageSize)
  emits('query') //调用父组件执行查询
}

//定义回调函数
let emits = defineEmits(['update:skipCount', 'update:pageSize', 'query'])
</script>

<style scoped>
.main {
  padding: 6px 10px;
  background: #fff;
}
</style>

父组件

以下是一个分页获取用户信息的界面
子组件调用 emits(‘update:skipCount’, skipCount)时,PaginationObj的值会变化
UserList.vue

<template>
  <MkTableQuery v-model:keyword="queryData.keyword" @query="query"> </MkTableQuery>
  <MkTableSample :data="resultData.items" ref="tableRef" @add="addClick" @row-dblclick="rowDoubleClick">
    <MkTableColumn prop="userName" label="用户名" />
    <MkTableColumn prop="name" label="姓名" />
    <MkTableColumnBool
      prop="isActive"
      label="是否启用"
      :options="[
        { value: false, name: '停用' },
        { value: true, name: '启用' },
      ]"
    />
  </MkTableSample>
  <MkPagination v-model:skipCount="PaginationObj.skipCount" v-model:pageSize="PaginationObj.pageSize" v-model:totalCount="PaginationObj.totalCount" @query="query"></MkPagination>
</template>

<script lang="ts" setup>
import { reactive, ref, toRefs } from 'vue'
import { getUserList } from '@/api/bas/basUser'
import PaginationEntity from '@/model/PaginationEntity'
import { clog, isNull } from '@/utils'

const PaginationObj = new PaginationEntity() //分页参数

const queryData = reactive({
  keyword: '',
})

const resultData = reactive({
  items: [],
})

const query = () => {
  getUserList(queryData.keyword, PaginationObj.skipCount, PaginationObj.pageSize).then(res => {
    resultData.items = res.items
    PaginationObj.totalCount = res.totalCount
  })
}
</script>

PaginationEntity .vue

import { getPageSize } from '@/utils'
export default class PaginationEntity {
  skipCount: Number = 0
  pageSize: Number = getPageSize() //读取缓存在本地的页大小
  totalCount: Number = 0
}

utils.ts文章来源地址https://www.toymoban.com/news/detail-562419.html


//获取表格每一页的大小, 全局的
export function getPageSize(): number {
  let tmp = getlocalStorage('PageSize')
  return isNull(tmp) ? 20 : parseInt(tmp)
}

//保存表格每一页的大小
export function setPageSize(val: number): number {
  setlocalStorage('PageSize', val)
}

export function getlocalStorage(name) {
  return localStorage.getItem(name)
}

export function setlocalStorage(name, value) {
  return localStorage.setItem(name, value)
}

到了这里,关于Vue3中子组件向父组件传值的方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Vue子组件向父组件传值(this.$emit()方法)

    首先必须在父组件中引用子组件,然后实现传值 第一步 在父组件中引入子组件 使用import引入组件 声明 使用 第二步 子组件向父组件传值 1.  在子组件中需要向父组件传值处使用this.$emit(\\\"function\\\",param);    //其中function为父组件定义函数,param为需要传递参数 2.  在父组件中子

    2024年02月10日
    浏览(32)
  • vue2和vue3 子组件父组件之间的传值方法

    在组件化开发的过程中难免会遇见 子组件和父组件之间的通讯那么这里讲关于vue2和vue3不同的通讯方式 先看一下vue2 父组件向子组件传递参数 父组件通过 : 语法 其实就是v-bind 来传递参数 子组件通过 props 来获取父组件传递的方法 亿点小知识:子组件接收到数据之后,不能直接

    2024年02月09日
    浏览(47)
  • vue父子组件之间传值的方法

    父传子 方式: props 效果: 把父组件的 fatherName 属性传入子组件,在子组件中使用 父组件代码: 子组件代码: 子传父 方式: $emit 效果: 在子组件触发事件,修改父组件的fatherName属性 父组件代码: 子组件代码: 兄弟传值 方式: eventBus.js 效果: 任意组件之间相互传值 代

    2024年02月09日
    浏览(46)
  • vue组件间传值的六种方法

    父组件代码: 子组件代码: 页面显示: 子组件代码: 父组件代码: 页面显示: 父子组件传值原理:父子组件的关系可以总结为 prop 向下传递,事件向上传递。父组件通过 prop 给子组件下发数据,子组件通过事件给父组件发送消息,如下图所示: ref:如果在普通的 DOM 元素

    2024年02月15日
    浏览(50)
  • vue子传父的一种新方法:this.$emit(‘input‘, value)可实现实时向父组件传值

    今天要说的就是利用v-model和this.$emit(‘input’,value)实现子传父。 众所周知,v-model是给input绑定,方便对表单的双向绑定。 其实,v-model是个语法糖,具体案例如下所示。 我们今天所说的是自定义组件实时子传父,请继续看下面代码:

    2024年02月13日
    浏览(46)
  • vue3 父子组件传值 记录

    最近这个组件之间传值用的较多,我这该死的记性,总给忘记写法,特此记录下 补充:LeftView.vue 是父组件; Video.vue 是子组件 Video.vue 子组件 LeftView.vue 父组件 第一步 创建bus.js文件 第二步 分别在需要相互传参的组件中引入bus.js文件,并相互传参

    2024年02月11日
    浏览(44)
  • Vue3 TS写法 父子组件传值(通讯)

    父组件: 子组件: 通过defineProps来接受数据(无须引入直接使用即可) 子组件可写默认值也可以不写两种情况 子组件通过defineEmits派发一个事件 (一样无须引入直接使用即可)  父组件接受子组件的事件 chilFun

    2024年02月15日
    浏览(40)
  • vue3父组件异步props传值,子组件接收不到值问题

    当我们使用vue3进行开发在创建组件的时候,子组件经常需要调用父组件的数据,那么这是就需要vue3的props进行对父组件与子组件通信来达到传值的效果 在使用props进行父子组件通信时,子组件无法成功渲染数据,导致拿到数据为空问题 提示:这里填写问题的分析: 在使用

    2024年02月11日
    浏览(40)
  • vue3 使用 mitt 插件实现非父子组件传值

    介绍 : mitt 是一个 JavaScript 库,用于实现事件的订阅和发布 1、安装 2、新建 utils/eventBus.ts 文件 3、使用

    2024年02月09日
    浏览(49)
  • vue3-setup语法糖 - 父子组件之间的传值

    近期学习 vue3 的父子组件之间的传值,发现跟vue2的并没有太大的区别,然后发现网络上很少基于setup语法糖的教程,我这边总结一下,希望对大家有所帮助。 父组件向子组件传值的时候,子组件是通过props来接收的,然后以变量的形式将props传递到setup语法糖果中使用(defin

    2024年02月11日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包