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

  • 相关阅读:
    『转载』优秀ASP.NET程序员的修炼之路
    [转]给年轻工程师的十大忠告
    [转]谈谈技术原则,技术学习方法,代码阅读及其它
    【转贴】你必须知道的20个故事
    谈谈建站心得(转载)[精华]
    HTTP和SOAP完全就是两个不同的协议
    数据集的理解IDataset
    学习在 ArcEngine 中使用 Geoprocessing
    程序执行过程
    How to Run a Geoprocessing Tool
  • 原文地址:https://www.cnblogs.com/xiaohuasan/p/12423753.html
Copyright © 2011-2022 走看看