zoukankan      html  css  js  c++  java
  • vue关于组件传值

    首先先了解组件的嵌套(全局嵌套、局部嵌套)因此传值有3种方式,分别是父-子,子-父

    我们先来探讨一下父-子之间的传值:

    抛出问题:子组件要获取父组件当中的数据;

    我们先倒推:一个普通的组件要获取定义的数据我们看图说话

     子组件获取自己本身的数据(name)直接是拿过来{{name}}用;

    所以:现在的问题是怎么从不是本身数据拿,

    1、在子组件标签自定义一个属性名name1取值为父组件传的值,即:name1='title',

    2、在vue实例子组件内部有一个props取属性名然后在直接用{{name1}}就可以拿到父组件的值了

    props:上图

     2、子-父之间的传值:子组件数据传到父组件里

    首先从两个组件的dom结构与vue中内部组件观察,得知,只有dom里边有父与子的关系,因此利用事件机制的原理,

    // events EventEmitter    - emit('事件',数据)  on('事件',()=>)
    // Vue.prototype.$emit=EventEmitter.emit

    在子组件标签内定义一个点击事件来发送给父组件数据,同时在父组件标签内的子组件也自定义一个接受数据的事件。

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <script src="https://cdn.staticfile.org/vue/2.4.2/vue.min.js"></script>
        <title>Document</title>
    </head>
    <body>
    <div id="app">
        <h2>传值</h2>
        <v-parent></v-parent>
    </div>
    <template id="parent">
        <div>
            <h3>父组件</h3>
            <p>接受子组件---{{str}}</p>
            <v-child @click='get'></v-child>
        </div>
    </template>
    
    <template id="child">
        <div>
            <hr>
            <h2>子组件</h2>
            <p>{{title}}</p>
            <button @click='send()'>发送父组件数据</button>
        </div>
    </template>
    <!-- 利用事件机制原理,dom里边有父与子的关系,因此应该在dom里边操作,达到传值的目的
    1、// events EventEmitter    - emit('事件',数据)  on('事件',()=>)
    // Vue.prototype.$emit=EventEmitter.emit
    
    -->
    <script>
        var app =new  Vue({
            el:'#app',
            components:{
              'v-parent':{
                template:'#parent',
                data(){
                    return{
                        str:''
                    }
                },
                methods:{
                    get(msg){//传过来的实参
                        console.log(msg);
                        this.str=msg;
                    }
                },
                components:{
                    'v-child':{
                        template:'#child',
                        data(){
                            return{
                                title:'我是被发送子组件'
                            }
                        },
                        methods:{
                            send(){
                                this.$emit('send',this.title)
                            }
                        }
                    }
                }
               } 
            }
        })
    </script>
    </body>
    </html>

     平行传值:重点代码

    兄弟组件之间就需要一个中间值,我在这里称为bus。在vue文件main.js中,我们利用 Vue.prototype.bus=new Vue() 来定义,此时我们就有了一个中间量。
    利用$emit发送,$on接收
    <button @click="send">点我给兄弟传值</button>
    methods: {
        send() {
          this.bus.$emit("toBrother", this.to);
        }
      }
    
    <div>我得到的兄弟组件信息是:{{get}}</div>
    export default {
      data() {
        return {
          get: ""
        };
      }
      beforeCreate() {
        this.bus.$on("toBrother", msg => {
          this.get = msg;
        });
      }
    };

    vuex传值:

    store.js:
    
    import Vue from 'vue'
    import Vuex from 'vuex'
    
    Vue.use(Vuex)
    
    const store = new Vuex.Store({
      // 定义状态
      state: {
        headImg: JSON.parse(sessionStorage.getItem('headImg')) || ""
      },
      mutations: {
        newImg(state, msg){
          sessionStorage.setItem('headImg', JSON.stringify(msg))
          state.headImg = msg;
        }
      }
    })
    
    export default store
    
    //////////////////////////////////////////////////////////////////////////
    
    main.js中引入vuex
    
    import Vue from 'vue';
    import Vuex from 'vuex';
    import store from './vuex/store';
    Vue.use(Vuex);
    var v = new Vue({
      el: '#app',
      router,
      store,
      components: {index},
      template: '<index/>',
      created: function () {
    
      }
    })
    
    传值:this.$store.commit("newImg", value);
    取值:this.$store.state.headImg
    

      

  • 相关阅读:
    ENVI【遥感图像预处理之图像的几何校正】
    ENVI数据显示操作【Tools菜单操作1】
    ENVI软件操作【数据显示操作——Overlay菜单操作】
    ENVI软件操作之【数据的显示操作】
    ADO.NET操作数据库(一)
    ASP.Net之数据绑定
    动态网页的建立
    VS2010安装异常中断后无法安装的解决方法(安装时发生严重错误)
    linux vi 删除多行的方法
    简单实现异步编程promise模式
  • 原文地址:https://www.cnblogs.com/shiraly/p/11726604.html
Copyright © 2011-2022 走看看