唯品秀前端博客
当前位置: 前端开发 > Vue.js专区 > Vue.js中.sync修饰符用法(打破单向数据流规则)

Vue.js中.sync修饰符用法(打破单向数据流规则)

2019-08-07 分类:Vue.js专区 作者:管理员 阅读(1741)

通常我们知道,父子组件数据传递:子组件通过props接收父组件传过来的数据,想改变父组件这个数据,那么子组件通过$emit方法触发父组件身上的自定义事件从而改变这个值,晚上听群里小伙伴说起父子组件通信话题,了解到sync修饰符,可以在子组件中直接去修改父组件对应的值,有点叼,打破单向数据流常规,之前并没去关注这东西,带着好奇心赶紧查看了一番。

vue .sync 修饰符以前存在于vue1.0版本里,但是在在 2.0 中移除了 .sync 。但是在 2.0 发布之后的实际应用中,发现 .sync 还是有其适用之处,从 2.3.0 起vue重新引入了 .sync 修饰符,但是这次它只是作为一个编译时的语法糖存在。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<!DOCTYPE html>
<html lang="zh-cn">

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
    <link rel="stylesheet" type="text/css" href="./fontFace.css">
    <script src="../vue2.6.js"></script>

</head>

<body>
    <div id="app">
            <div class="details">
                <my-component :show.sync='valueChild'
                    style="border:1px solid #ccc;"></my-component>
                <button @click="changeValue">切换状态</button>
                {{valueChild}}
            </div>
    </div>

    <script>
        Vue.component('my-component', {
            template: `<div v-if="show">
                    <p>默认初始值是{{show}},所以是显示的</p>
                    <button @click.stop="closeDiv">关闭</button>
                 </div>`,
            props: ['show'],
            methods: {
                closeDiv() {
                    //触发 input 事件,并传入新值,注意,必须在要改变的值前面带上update
                    this.$emit('update:show', false);
                }
            }
        })
        new Vue( {
            el: "#app",
            data() {
                return {
                    valueChild: true,
                }
            },
            methods: {
                changeValue() {
                    this.valueChild = !this.valueChild
                }
            }
        })
    </script>
</body>

</html>

效果

小结

通过上面案例可以看出,整个流程就是父组件通过.sync修饰符将show变量传给了子组件,show变量对应的状态值是valueChild,然后子组件props接收,子组件上的事件去触发this.$emit('update:show', false);去改变show的值,并且直接同步修改了父元素上的valueChild的状态。

最后vue知识点还是很多的,解决问题的方式也很多,大家还是要多多交流,才能共同进步,三人行必有我师焉,和别人交流才能更好的察觉自己的漏洞。

「三年博客,如果觉得我的文章对您有用,请帮助本站成长」

赞(4) 打赏

谢谢你请我吃鸡腿*^_^*

支付宝
微信
4

谢谢你请我吃鸡腿*^_^*

支付宝
微信
标签:

上一篇:

下一篇:

你可能感兴趣

0 条评论关于"Vue.js中.sync修饰符用法(打破单向数据流规则)"

博客简介

唯品秀博客: weipxiu.com,一个关注Web前端开发技术、关注用户体验、坚持更多原创实战教程的个人网站,愿景:成为宇宙中最具有代表性的前端博客,期待您的参与,主题源码 

精彩评论

  • 江吟辞(2周前 (06-29))

    好难坚持啊,我还没毕业,不知道啥时候才能像您一样厉害

    评:碎言碎语
  • 和我、恋爱吧(2周前 (06-29))

    怎么没见你更新呢,比较忙吗

    评:碎言碎语
  • 游离(2周前 (06-29))

    站主,你好!请教一下,前台的pc 端和移动端,你是怎么实现响应式的呢?媒体查询的同时写两套样...

    评:碎言碎语
  • 권지용(2周前 (06-29))

    最近在学习前端,看了博主很多文章,收益匪浅,感谢大佬

    评:碎言碎语
  • 白君也(2周前 (06-28))

    哇 自己制作的吗 在哪学的技术啊 好厉害

    评:碎言碎语
  • 管理员(4周前 (06-16))

    时间区间问题,因为目前是2020年,你所选不可能超出这个时间吧,当然,代码是根据你的业务来,...

    评:js时间戳完美转换成阴历农历格式

友情链接

他们同样是一群网虫,却不是每天泡在网上游走在淘宝和网游之间、刷着本来就快要透支的信用卡。他们或许没有踏出国门一步,但同学却不局限在一国一校,而是遍及全球!申请交换友链

站点统计

  • 文章总数: 258 篇
  • 草稿数目: 0 篇
  • 分类数目: 16 个
  • 独立页面: 6 个
  • 评论总数: 906 条
  • 链接总数: 17 个
  • 标签总数: 459 个
  • 注册用户: 8220 人
  • 访问总量: 9222404 次
  • 最近更新: 2020年7月3日
服务热线:
 173xxxx7240

 QQ在线交流

 旺旺在线