sync修饰符-子组件修改父组件属性

简介: sync修饰符-子组件修改父组件属性

🏆 文章目标:记录前端开发中遇见的问题。

🍀 sync修饰符-子组件修改父组件属性

✅ 创作者:Jay…

🎉 个人主页:Jay的个人主页

🍁 展望:若本篇讲解内容帮助到您,请帮忙点个赞吧,您的支持是我继续写作的最大动力,谢谢。🙏

.sync修饰符

.sync是一个语法糖。是父组件监听子组件更新某个props的请求的缩写语法。

  • Vue规则:组件不能修改props外部数据
  • Vue规则:$emit可以触发事件并传参
  • Vue规则:$event可以获取$emit的参数

以上三条规则,都是Vue作者-尤雨溪定的

场景

Vue规则:组件不能修改props外部数据

Vue中的 props 是单向向下绑定的。

即:每次父组件更新时,子组件中的所有 props 都会刷新为最新的值。但是如果在子组件中修改 props ,Vue会向你发出一个警告。(无法通过修改子组件的props来更改父组件。)

使用$emit触发父组件的属性更新。

由于无法通过修改子组件的props来更改父组件,所以我们在父组件使用子组件的标签上声明一个监听事件。在子组件想要修改时使用$emit触发事件并传入新的值,让父组件进行修改。

案例

案例1

介绍

使用.sync修饰符来修改父组件的属性。

即按钮提交前,父组件的提交信息为“Jay正在处理中”,提交后,子组件修改提交信息为“提交成功”

主要代码

父组件引用子组件

<child :button-name="name" :commit-message.sync="message"></child>

子组件修改父组件的参数

this.$emit('update:commitMessage', 'Jay提交成功');

效果

源码

<!DOCTYPE html>
<html lang="en" xmlns:v-on="http://www.w3.org/1999/xhtml" xmlns:v-bind="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>sync修饰符-子组件修改父组件</title>
    <script src="../vue.js"></script>
</head>
<body>
    <div id="parent">
        <p>{{message}}</p>
        <child :button-name="name" :commit-message.sync="message"></child>
    </div>
    <script>
        /**
         * 子组件
         */
        Vue.component('child', {
            props: ['buttonName', "commitMessage"],
            template: '<button @click="commit">{{buttonName}}</button>',
            methods: {
                /**
                 * 提交
                 */
                commit: function () {
                    this.$emit('update:commitMessage', 'Jay提交成功');
                }
            }
        })
        /**
         * 父组件
         */
        new Vue({
            el: '#parent',
            data: {
                name: '提交',
                age: '',
                message: 'Jay正在处理中'
            }
        })
    </script>
</body>
</html>

案例2

介绍

sync在2.3版本引入,在该版本之前,主要方案时,父组件需要传一个绑定值(myMessage)同时需要设置一个更新触发函数(updateMessage)给子组件修改绑定值的时候调用。

源码

相对比较简单,需要参考源码进行理解。

<!DOCTYPE html>
<html lang="en" xmlns:v-on="http://www.w3.org/1999/xhtml" xmlns:v-bind="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>sync修饰符-子组件修改父组件</title>
    <script src="../vue.js"></script>
</head>
<body>
    <div id="parent">
        <p>{{message}}</p>
        <child :button-name="name" @update:commit-message="updateMessage"></child>
    </div>
    <script>
        /**
         * 子组件
         */
        Vue.component('child', {
            props: ['buttonName', "commitMessage"],
            template: '<button @click="commit">{{buttonName}}</button>',
            methods: {
                /**
                 * 提交
                 */
                commit: function () {
                    this.$emit('update:commit-message', 'Jay提交成功');
                }
            }
        })
        /**
         * 父组件
         */
        new Vue({
            el: '#parent',
            data: {
                name: '提交',
                age: '',
                message: 'Jay正在处理中'
            },
            methods: {
                updateMessage: function (val) {
                    this.message = val
                }
            }
        })
    </script>
</body>
</html>

关注公众号:熊猫Jay字节之旅,了解更多 AI 技巧 ~


相关文章
|
分布式计算 JavaScript 前端开发
JS中数组22种常用API总结,slice、splice、map、reduce、shift、filter、indexOf......
JS中数组22种常用API总结,slice、splice、map、reduce、shift、filter、indexOf......
458 0
|
JavaScript
element-UI el-table动态显示隐藏列造成固定一侧的列(fixed=“left/right“)错误显示
问题原因:多个tabs共用一个实体,动态显示隐藏列 出现了固定在右侧的列(fixed="right")错位 【解决方案】 表格的重新布局,只要table数据发生变化的时候就重新渲染表格 ```js this.$nextTick(() => { this.$refs.formname.doLayout() }) ``` 参考element官方文档 ![请在此添加图片描述](https://developer-private-1258344699.cos.ap-guangzhou.myqcloud.com/column/article/5877188/20231030-e40
749 0
element-UI el-table动态显示隐藏列造成固定一侧的列(fixed=“left/right“)错误显示
|
3月前
|
JavaScript 前端开发
js小数运算出现的问题(精度丢失)及解决办法-亲测有效
JavaScript浮点数运算存在精度丢失问题,如0.1+0.2不等于0.3。原因是十进制小数转二进制时可能出现无限循环,导致舍入误差。本文提供一种精度处理方法,通过将小数转为整数运算后再还原,实现加减乘除的精确计算,解决常见浮点运算误差问题。
615 0
|
10月前
|
JSON 前端开发 数据可视化
前端开发者狂喜!30K star开源组件库,界面美观度/开发速度双碾压!
嗨,大家好,我是小华同学。Layui 是一款开源前端 UI 组件库,具有极简设计、强大功能和卓越性能,支持布局、表单、表格、弹层等六大模块,组件高度可定制。它无需复杂构建工具,直接面向浏览器开发,极大提升开发效率与界面美观度。适合新手和老手,快来试试吧!
480 0
|
存储 缓存 JavaScript
js 【详解】闭包
js 【详解】闭包
198 0
|
移动开发 JavaScript HTML5
el-input限制输入整数等分析
本文介绍了在Vue中限制el-input只能输入整数的几种方式,包括设置type为number,使用inputmode属性,自定义指令,计算属性,使用onafterpaste和onkeyup事件以及使用el-input-number的precision属性。每种方式都有其优缺点,可以根据实际需求选择合适的方式。比较建议用自定义指令的方式来实现。
2713 0
el-input限制输入整数等分析
|
开发工具 Android开发 git
鸿蒙Flutter实战:01-搭建开发环境
本文介绍了如何搭建鸿蒙 Flutter 开发环境,包括安装 DevEco Studio 等工具,并详细说明了 Mac 和 Windows 系统下的环境变量配置。此外,还介绍了如何使用 FVM 管理多个 Flutter 版本,并提供了一些常见问题的解决方案和交流群信息。
510 0
鸿蒙Flutter实战:01-搭建开发环境
|
JSON JavaScript 前端开发
面试官:JS判断对象为空有几种方法?
面试官:JS判断对象为空有几种方法?
|
Java Go C#
编程语言C#、C++、Java、Python、go 选择哪个好?
我想说的是,不论选择哪种编程语言,决定选择的都是你最终的目的,做选择之前,先充分调研每一个选择项,再做选择思路就会非常清晰了。
472 3
|
JSON JavaScript 前端开发
vue前端运行时出现RangeError: Maximum call stack size exceeded
vue前端运行时出现RangeError: Maximum call stack size exceeded
1302 4