vue 双向绑定子组件改变父组件中的显示值

第一种方法  通过调用父组件的方法改变值

子组件

MyDemo.vue

复制代码
<template>
    <div>
        <span @click="test">{{title}}</span>
    </div> 
</template>
<script>
export default {
    name: 'mydemo',
    props:{
        title:String
    },
    components:{

    },
    data(){
        return {

        }
    },
    methods:{
        test(){
      //this.$emit("ceshi")
      this.$emit('myclick', "方法一")
        }
    }
    
}
</script>
复制代码

 

父组件调用

复制代码
<template>
<el-container>
  <el-header>Header</el-header>
  <el-main> <my-demo :title="abc" @myclick="fangfayi" ></my-demo> </el-main>

  <!-- <div>
      <my-demo :title.sync="abc" ></my-demo>
  </div> -->

  <br/>
  {{abc}}
  <el-footer>Footer</el-footer>
</el-container>
</template>

<script>
import MyDemo from '../components/MyDemo.vue';
export default {
     components: {
      MyDemo
     },
    data(){
        return{
            msg:'test7777',
            abc:'55555'        
        }
    },
    methods:{
        fangfayi(vale){

           this.abc=vale
         }
    }
}
</script>
复制代码

运行效果:

 

 

点击第一个55555:显示

 

 

第二种方法: 通过

sync 修饰符

修改子组件,注释方法一

复制代码
<template>
    <div>
        <span @click="test2">{{title}}</span>
    </div> 
</template>
<script>
export default {
    name: 'mydemo',
    props:{
        title:String
    },
    components:{

    },
    data(){
        return {

        }
    },
    methods:{
        test(){
      //this.$emit("ceshi")
         this.$emit('myclick', "方法一")
        },

        test2(){
      //this.$emit("ceshi")
         this.$emit('update:title', "方法二")
        }
    }
    
}
</script>
复制代码

父组件调用

复制代码
<template>
<el-container>
  <el-header>Header</el-header>
  <!-- <el-main> <my-demo :title="abc" @myclick="fangfayi" ></my-demo> </el-main> -->

  <div>
      第二种方法
      <my-demo :title.sync="abc" ></my-demo>
  </div>

  <br/>
  {{abc}}
  <el-footer>Footer</el-footer>
</el-container>
</template>

<script>
import MyDemo from '../components/MyDemo.vue';
export default {
     components: {
      MyDemo
     },
    data(){
        return{
            msg:'test7777',
            abc:'55555'        
        }
    },
    methods:{
        // fangfayi(vale){
        //    this.abc=vale
        //  }
    }
}
</script>
复制代码

运行

 

 点击第一个55555 显示

 

 

参考: https://cn.vuejs.org/v2/guide/components-custom-events.html

 

插槽

加上   <slot></slot> 

 

 

在父组件中调用

 

 这样在页面上才会显示值。

 

 

 没有插槽就不会显示

注意 v-slot 只能添加在 <template> 上 (只有一种例外情况),这一点和已经废弃的 slotattribute不同。

参考:https://cn.vuejs.org/v2/guide/components-slots.html

https://www.cnblogs.com/axl234/p/7797247.html

https://blog.csdn.net/wxl1555/article/details/84107969

posted @   剧里局外  阅读(968)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
历史上的今天:
2016-03-05 三层架构中bll层把datatable转换为实体model的理解
点击右上角即可分享
微信分享提示