Vue 学习笔记:sync 实现 props 双向通信

文章目录

      • 背景
      • 分页插件
      • 封装代码
      • 组件引用
      • Vue sync 基础知识

背景

vue-admin-element 是一个比较流行的开源项目,里面有对 el-pagination 组件的二次封装,pagination,本文将整理这个组件封装时 sync 的应用。

分页插件

Element-UI 提供的分页组件是 el-pagination ,它的功能还算强大,跟分页有关的主要属性整理如下:
Vue 学习笔记:sync 实现 props 双向通信_第1张图片

封装代码

封装 el-pagination 的两个事件为统一的函数,触发父组件接收最新的 pageSizecurrentPage 参数,并更新父组件的列表。开源项目中的封装过程如下:






核心代码是 currentPage 和 pageSize 这两个计算属性:

this.$emit('update:limit', val)

封装后的组件参数包括 el-pagination 自身的参数,加上一个 pagination 事件。
Vue 学习笔记:sync 实现 props 双向通信_第2张图片

组件引用


父组件需要提供一个监听事件 @pagination ,它的函数定义接收一个 JSON 对象,由 pagination 组件触发,对父组件列表数据的刷新。

原理:父组件传递的 pagelimitsync 修饰,在子组件通过
this.$emit('update:page', val) 完成双向绑定数据的更新。

Vue sync 基础知识

父组件向子组件传递数据的方式有多种,props 是其中的一种,但是它的局限在于数据只能单向传递,子组件不能直接修改 prop 属性,但是碰到子组件需要修改父组件的情况怎么办呢?

Vue 提供了一种语法糖,就是 sync ,它是一种优雅的触发父组件传递的 prop 的方式。
Vue 学习笔记:sync 实现 props 双向通信_第3张图片
父组件中并没有定义过 update 事件,但是却可以完成 prop 属性 page 的修改,这就是 sync 语法糖的作用。

你可能感兴趣的:(前端开发经验汇总)