账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    Vue .sync修饰符与$emit(update:xxx)写法问题
    39
    0

    问题描述

    最近在学习Vue,在学习自定义事件的.sync修饰符实现改变数值时发现一个问题如下
    由于props的大小写命名:fatherNum,对应不同的$emit()会有不同的效果,具体如下
    使用.sync修饰符,即

        // this.$emit('update:father-num',100);  //无效
        this.$emit('update:fatherNum',100); //有效
        //......
        <father v-bind:father-num.sync="test"></father>


    不使用.sync,即

          this.$emit('update:father-num',100);  //有效
          //this.$emit('update:fatherNum',100); // 无效
          
          //......
        <father v-bind:father-num="test" v-on:update:father-num="test=$event" ></father>
    

    我贴下具体代码吧,有点难说清楚,问题出现在$emit('update:xxx')xxx写法问题

    相关代码

        Vue.component('father',{
            props:{
                'fatherNum':Number
            },
            template:`
            <div >
                <h1>fatherNum:{{fatherNum}}</h1>
                <button v-on:click="testFunction">father</button>
            </div>`,
            methods:{
                testFunction:function () {
                    // this.$emit('update:father-num',100);  //.sync写法无效,无sync写法有效
                    this.$emit('update:fatherNum',100); //.sync写法有效,无sync写法无效
            }
        }});
    </script>
    <div id="container">
        <p>.sync写法</p>
        <father v-bind:father-num.sync="test"></father>
        <p>无sync写法</p>
        <father v-bind:father-num="test" v-on:update:father-num="test=$event" ></father>
    </div>
    <script>
        var container = new Vue({
            el:"#container",
            data:{
                test:1
            }
        })
    </script>

    请大佬赐教

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 剑鬼非人哉 普通会员 1楼

      Vue.js 的 sync 钩子是用于同步数据、事件和视图的。而 $emit() 是 Vue.js 用于触发事件的函数。

      当你使用 sync 钩子时,Vue.js 将执行一系列操作以确保数据的同步,包括更新视图和计算属性。

      例如,假设你有一个数据结构 user,你可以使用 sync 钩子来确保每个用户都具有唯一的 ID。你可以这样写:

      javascript export default { data() { return { user: { id: 0, name: '' } }; }, methods: { updateUser(user) { this.user = user; } } };

      在上述代码中,updateUser 方法用于更新 user 对象。当这个方法被调用时,Vue.js 将同步 user 对象,并将新的用户对象传递给方法。

      如果你使用 $emit() 函数来触发事件,Vue.js 将执行一系列操作以确保事件的发送和接收。例如,假设你有一个事件监听器 click,你可以这样写:

      javascript export default { data() { return { user: { id: 0, name: '' } }; }, methods: { updateUser(user) { this.user = user; this.$emit('click', user.id); } } };

      在上述代码中,updateUser 方法用于更新 user 对象,并使用 $emit('click', user.id) 触发一个名为 click 的事件。当用户点击这个事件时,Vue.js 将同步 user 对象,并将用户的 ID 传递给事件的接收者。

      总的来说,sync 钩子和 $emit() 函数都是用于同步数据、事件和视图的,它们都有自己的优点和适用场景。你应该根据你的具体需求选择使用哪种方法。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部