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 应用服务中间件 nginx
vue项目中页面遇到404报错
vue项目中页面遇到404报错
632 1
|
分布式计算 JavaScript 前端开发
JS中数组22种常用API总结,slice、splice、map、reduce、shift、filter、indexOf......
JS中数组22种常用API总结,slice、splice、map、reduce、shift、filter、indexOf......
544 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
916 0
element-UI el-table动态显示隐藏列造成固定一侧的列(fixed=“left/right“)错误显示
|
移动开发 JavaScript HTML5
el-input限制输入整数等分析
本文介绍了在Vue中限制el-input只能输入整数的几种方式,包括设置type为number,使用inputmode属性,自定义指令,计算属性,使用onafterpaste和onkeyup事件以及使用el-input-number的precision属性。每种方式都有其优缺点,可以根据实际需求选择合适的方式。比较建议用自定义指令的方式来实现。
3324 0
el-input限制输入整数等分析
|
存储 缓存 JavaScript
js 【详解】闭包
js 【详解】闭包
240 0
|
JSON JavaScript 前端开发
面试官:JS判断对象为空有几种方法?
面试官:JS判断对象为空有几种方法?
|
JSON JavaScript 前端开发
JavaScript JSON
JavaScript JSON
|
存储 开发框架 前端开发
Vue&Element开发框架中增加工作流处理,工作流的各个管理页面的界面处理
Vue&Element开发框架中增加工作流处理,工作流的各个管理页面的界面处理
|
数据格式
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. 小结
4461 0
|
JavaScript 前端开发 小程序
js两个日期比较相差多少天实例
js两个日期比较相差多少天实例
461 0

热门文章

最新文章