zoukankan      html  css  js  c++  java
  • 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>
    

    结果图:

    今天你学习了吗!!!
  • 相关阅读:
    docker 5种网络管理
    HYPER-V平台 批处理批量创建并配置ADSL帐号到CENTOS模板机中
    hyper-v透传trunk到虚拟机中
    CENTOS APACHE HTTPD 开启HTTPS
    chroot系统中,启动sshd -d 后,不能正常登录报错Ssh, error: openpty: No such file or directory
    CENTOS7配多IP出口socks5和http代理
    ROS配合CENTOS将pptp转成socks5使用
    中国省份信息与编码和世界所有国家信息与编码
    8.scrapy配置文件
    7.scrapy中间件
  • 原文地址:https://www.cnblogs.com/nayek/p/12054664.html
Copyright © 2011-2022 走看看