关键词搜索

全站搜索
×
密码登录在这里
×
注册会员
×

已有账号? 请点击

忘记密码

已有账号? 请点击

使用其他方式登录

vue通过.sync修饰符修改子组件父组件数据

发布2022-05-13 浏览627次

详情内容

vue中父子组件传值,props方法一般单向数据流,vue中是不是允许直接修改的,但是在实现业务中有时需要在在子组件中修改父组件的值,这里就巧妙用到了vue .sync修饰符来实现。

先看官方文档

image.png

实现一个双向数据绑定,子组件改变的时候,父组件也在改变,第一次父组件通过props传值给子组件。

父组件代码

<template>
  <div class="home">
    <img alt="Vue logo" src="../assets/logo.png">

    <child  :titleSync.sync="title"/>    

    <br>
    <span>{{ '我是父组件:' + title}}</span>
  </div>
</template>

<script>
import Child from '../components/Child'

export default {
  name: 'home',
  components: {
    Child,
  },
  data() {
    return {
      title: 'sync测试用例',
    }
  }
}
</script>

子组件代码

<template>
  <div>
     -----------------Child------------------

     <input type="text" v-model="config">

  </div>
</template>

<script>
export default {
    name: 'Child',
    props: {
      titleSync: String,
    },
    computed: {
      config: {
        get() {
          return this.titleSync
        },
        set(val) {
          this.$emit('update:titleSync', val)
        }
      }
    }
}
</script>

<style>

</style>

效果图:

1834003-20191217153346106-2112573857.gif


2、点击子组件按钮点击事件修改父组件数据

父组件代码:

<template>
  <div class="home">
    <img alt="Vue logo" src="../assets/logo.png">

    <child  :nameSync.sync="name"/>

    <br>
    <span>{{ '我是父组件:' + name}}</span>
  </div>
</template>

<script>
import Child from '../components/Child'

export default {
  name: 'home',
  components: {
    Child
  },
  data() {
    return {
      title: 'sync测试用例',
      name: '我是sync的第二个测试用例'
    }
  }
</script>

子组件代码:

<template>
  <div>
     -----------------Child------------------
     <br>

     <button @click="syncClick">点击更改名字</button>

  </div>
</template>

<script>
export default {
    name: 'Child',
    props: {
      nameSync: String,
    },
    data() {
      return {
          name: '张三'
      }
    },
    methods: {
      syncClick() {
        this.$emit('update:nameSync', this.name)
      }
    },
}
</script>

22.gif总结:就是利于了this.$emit绑定update:nameSync事件,同时在父组件使用了.sync修饰符后,绑定的nameSync值会自动更新修改。

在些扩展一个功能,在传后给子组件后,此父组件中有一个事件修改值了,此是子组件中是识别不了的。需要在子组件中增加一个wacth监听父组件值,再克隆到子组件中。

父组件代码:

<template>
  <div class="home">
    <img alt="Vue logo" src="../assets/logo.png">

    <child  :nameSync.sync="name"/>
    <button @click="update">点击更改</button>
    <br>
    <span>{{ '我是父组件:' + name}}</span>
  </div>
</template>

<script>
import Child from '../components/Child'

export default {
  name: 'home',
  components: {
    Child
  },
  data() {
    return {
      title: 'sync测试用例',
      name: '我是sync的第二个测试用例'
    }
  },
  update(){
      this.name="父中修改了值"
  }
</script>

子组件代码:

<template>
  <div>
     -----------------Child------------------
     <br>
<span>{{ '我是父组件:' + sonName}}</span>
     <button @click="syncClick">点击更改名字</button>

  </div>
</template>

<script>
export default {
    name: 'Child',
    props: {
      nameSync: String,
    },
    data() {
      return {
          sonName: '张三'
      }
    },
    watch: {
        nameSync(val) {
            this.sonName= val;
        },
    },
    methods: {
      syncClick() {
        this.$emit('update:nameSync', "子组件中修改了")
      }
    },
}
</script>


点击QQ咨询
开通会员
返回顶部
×
  • 微信支付
微信扫码支付
微信扫码支付
请使用微信描二维码支付
×

提示信息

×

选择支付方式

  • 微信支付
确定支付下载