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......
456 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。原因是十进制小数转二进制时可能出现无限循环,导致舍入误差。本文提供一种精度处理方法,通过将小数转为整数运算后再还原,实现加减乘除的精确计算,解决常见浮点运算误差问题。
613 0
|
存储 缓存 JavaScript
js 【详解】闭包
js 【详解】闭包
197 0
|
移动开发 JavaScript HTML5
el-input限制输入整数等分析
本文介绍了在Vue中限制el-input只能输入整数的几种方式,包括设置type为number,使用inputmode属性,自定义指令,计算属性,使用onafterpaste和onkeyup事件以及使用el-input-number的precision属性。每种方式都有其优缺点,可以根据实际需求选择合适的方式。比较建议用自定义指令的方式来实现。
2707 0
el-input限制输入整数等分析
|
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
1298 4
|
JavaScript API
vue3父子组件相互调用方法详解
vue3父子组件相互调用方法详解
|
数据格式
Element el-cascader 级联选择器详解
本文目录 1. 概述 2. 数据绑定 2.1 默认数据绑定 2.2 指定绑定数据格式 3. 常用功能 3.1 修改触发方式 3.2 增加清空按钮 3.3 可搜索 3.4 选中项只显示最后一级 3.5 可选中任意一级 3.6 面板样式 3.7 自定义节点内容 4. 动态加载下级 5. 小结
4138 0