• vue组件通信


    1.子组件如何快速改变父组件中传过来的值(通过引用传递的方式给子组件,子组件可以直接改变对象中的属性

    // App.vue
    <template>
      <div>
        <News :a-msg="msg" :out-data="outData"></News>
        {{msg}}
        <h3>{{outData.a}}</h3>
      </div>
    </template>
    
    <script>
    import News from './components/News.vue'
    export default {
      data () {
        return {
          msg: '我是app组件中的内容',
          // 如果子组件想直接改变的值,可以传递一个对象到子组件中,因为这样的话,在组件中改变a,父组件也改变了,是因为js对象是引用传递
          outData:{
            a:"我是从组件app中给出的变量"
          }
        }
      },
      components:{
        News
      }
    }
    </script>
    

     在子组件中可以这样直接修改父组件传过来的对象

    // News.vue
    <template>
      <div>
        <h1>{{msg}}</h1>
        <h2>{{aMsg}}</h2>
        <h3 @click="change">{{outData.a}}</h3>
      </div>
    </template> 
    <script>
      export default {
        props:['aMsg','outData'],
        data(){
          return {
            'msg': '我是news组件中的内容'
          }
        },
        methods:{
          change(){
            this.outData.a = '我可以直接这样改变你哦'
          }
        }
    
      }
    </script>
    

      

    2.如果想从父组件中接收过来的值能在子组件中可以被修改,需要一个额外的内部变量来进行接收,这样在可以直接在内部改变自己的值,从而间接达到改变

    // News.vue
    <template>
      <div>
        <h1 @click="change">{{getMsg}}</h1>
      </div>
    </template> 
    <script>
      export default {
        props:['aMsg'],
        data(){
          return {
            // 如果想从父组件中接收过来的值能在子组件中可以被修改,需要一个额外的内部变量来进行接收,这样在可以直接在内部改变自己的值,从而间接达到改变
            'getMsg':this.aMsg
          }
        },
        mounted(){
            //或者将值在这里面改变
        },
        methods:{
          change(){
            this.getMsg = "改变"
          }
        }
      }
    </script>
    

    3.单一事件管理组件通信(所有组件之间快速通信)

    父组件中引入三个组件AA,BB,CC,然后这三个同级组件之间互相通信

    // App.vue
    <template>
      <div>
        <AA :event="event"></AA>
        <BB></BB>
        <CC :event="event"></CC>
      </div>
    </template>
    
    <script>
    import Vue from 'vue'
    var Event = new Vue();
    import AA from './components/A.vue'
    import BB from './components/B.vue'
    import CC from './components/C.vue'
    export default {
      data () {
        return {
          msg: '我是app组件中的内容',
          event:Event
        }
      },
      components:{
        AA,
        BB,
        CC
      }
    }
    </script>
    

     AA组件

    <template>
        <div>
            <span>{{msg}}</span>
            <input type="button" value="将A组件值传给C组件" @click="send">
        </div>
    </template>
    
    <script>
        export default{
            props:['event'],
            data(){
                return {
                    msg:'我是a组件中的值'
                }
            },
            methods:{
                send(){
                    this.event.$emit('a-msg',this.msg);
                }
            }
        }
    </script>
    

    BB组件

    <template>
        <div>
            <span>{{msg}}</span>
            <input type="button" value="将B组件值传给C组件">
        </div>
    </template>
    
    <script>
        export default{
            data(){
                return {
                    msg:'我是b组件中的值'
                }
            }
        }
    </script>
    

    CC组件接受AA,BB组件中的值

    <template>
        <div>
            <h1>{{msg}}</h1>
            <h3>我是接受过来的数据msg:{{getmsg}}</h3>
        </div>
        
    </template>
    
    <script>
        export default{
            props:['event'],
            data(){
                return {
                    msg:'我是c组件中的值',
                    getmsg:'默认值'
                }
            },
            mounted(){
                var _this = this
                this.event.$on('a-msg',function(a){
                        _this.getmsg=a;
                });
            }
        }
    </script>
    

    这样就轻松完成多组件之间的值传递

  • 相关阅读:
    博客园20071027上海聚会
    上海招聘.NET(C#)程序员
    招人
    漂亮的后台WebUi框架(有源码下载)
    js插件库系列导航
    PrestoSQL(trinodb)源码分析 执行(下)
    Extjs4 (二)
    Struts2(1)简介
    css中的字体
    什么是REST架构
  • 原文地址:https://www.cnblogs.com/shiwenhu/p/6852057.html
Copyright © 2020-2023  润新知