• vue中通过.sync修饰符实现子组件修改父组件数据


    vue父子通讯是单向数据流,也就是子组件不能修改父组件的值,但是在一些情况下是需要这样做的。

    先看官方文档:


    接下来举例实现

    1、实现一个双向数据绑定,子组件改变的时候,父组件也在改变

    父组件

    <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>
    

    结果图:

    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>
    
    <style>
    
    </style>
    

    结果图:

    今天你学习了吗!!!
  • 相关阅读:
    CSS3属性transform详解之(旋转:rotate,缩放:scale,倾斜:skew,移动:translate)
    MySQL<添加、更新与删除数据>
    MySQL<数据库和表的基本操作>
    MySQL<数据库入门>
    MySql阶段案例
    Mysql综合案例
    Mysql课后思考题
    Java课后思考题
    Java课后简答题
    超全面的JavaWeb笔记day23<AJAX>
  • 原文地址:https://www.cnblogs.com/nayek/p/12054664.html
Copyright © 2020-2023  润新知