zoukankan      html  css  js  c++  java
  • vuejs学习总计——数据传值篇

    1.父组件向子组件传值

     

    //父组件通过props向子组件传值
     <template>     <div id="parent">
           <header :msg="{dady}"></header>
        </div>
     </template>
    import Header from './header.vue' 
    export default{
      data(){
        return{
          dady: '这是来自爸爸的数据'
        }
      },
      components{
        header: Header
      }
    }
    //子组件通过props拿到父组件传过来的值
    <template>
       <div id="son">
         {{msg}} 
       </div>
    </template>
    export default{
      props: ['msg']; //拿到父组件传过来的数据
      data(){
        return {

        }
      }
    }

    2.子组件向父组件传值

    
    
    //子组件事件向父组件传值
    <template>
       <div id="son">
         <button @click="send">点击向父组件传值</button>
       </div>
    </template>
    export default{
      data(){
        return {
           msg: '我是来自儿子的数据'
        }
      },
      methods:{
        send(){
          this.$emit('toparent',this.msg);
        }
      } }

    //
    父组件通过props向子组件传值  <template>     <div id="parent">        <header @toparent="fromSon"></header>     </div>  </template> import Header from './header.vue'  export default{   data(){     return{            }   },   components{     header: Header   },
      methds:{
        fromsSon(data){
          alert(data); //我是来自儿子的数据
        }
      } }

    3.平行组件之间的传值

    1)非父子组件之间通过bus来传值

      假设a组件有一个按钮,点击按钮把数据传递给b组件

      

    //根组件main.js
    new
    Vue({ el: '#app', router, store: store, template: '<App/>', components: { App },
    //将空的实例放到根组件下,所有子组件都可以用 data:{ Bus:
    new Vue() } })

    //a组件,点击a组件的按钮传值

    <template>
      <div id="a">
        <p>我是底部,我想和头部进行通讯</p>
        <button @click="submit">点击向顶部传递数据</button>
      </div>
    </template>

    
    

    <script type="text/javascript">
      export default{
      methods:{
        submit(){
           this.$root.Bus.$emit('eventName','123');
        }
      }
    }
    </script>

    //b组件创建完成时就监听该事件

    <template>
      <div id="b">
        {{msg}}
      </div>
    </template>

    
    

    <script type="text/javascript">
      export default{
      methods:{

        data(){

          return{

            msg: ''

          }

        },
        created(){

           let that = this;
           this.$root.Bus.$on('eventName',function(val){

              that.msg = val;

           });
        },

        beforeDestroy(){

          this.$root.Bus.$off('eventName'); //在组件销毁时解除 事件绑定

        }
      }
    }
    </script>



    2)Vuex是一个专为vuejs应用程序开发的状态管理模式

    //安装
    store.js
      npm install vuex --save
    
      import Vue from 'vue'
    
      import Vuex from 'vuex'
    
      Vue.use(Vuex)

    expoort const store = new Vuex.Store({
      state:{ //1.用来存储数据
        count: 1
      },
      getters:{ //2.可以认为是store的计算属性
        decreae(state){
          state = state + ‘我在getters中被改变了’
          return state;
        }
      },
      mutations:{
        INCREMENT(state,payload){ // 3.vuex建议mutations用大写表示,
    更改Vuex的store中的状态的唯一方法就是提交mutation

          state.count+=payload.amount;
        }
      },
      actions:{
        increment(context,payload)}{ //4.异步mutations
          setTimeout(function(){
            
     context.commit('increment',payload);
        
    },1000)
         
        }
      }

    })

    app.vue
    <template>
      <div id="app">
        {{count}}
        {{decrease}}
        <button @click="change">点击改变mutations</button>
      </div>
    </template>
    export default{
      data(){
        return{

        }
      },
      computed:{
        count(){
          return this.$store.state.count //获取store中state中的值
        },
        decrease(){
          return this.$store.getters.decrease; //获取getters中被改变后的state值
        }  
      },
      methods:{
        change(){
          this.$store.commit('increment',{amount:10}); //更改Vuex的store中的状态的唯一方法就是提交mutation,每个mutaion都有一个字符串的时间类型和一个回调函数,mutation都是同步事物
        },
        actionChange(){
          this.$store.dispatch('increment',{amount:10});//action类似于mutation,不同在于action提交的是mutation,action可以包含任意异步操作
        }
      }
    }

      

  • 相关阅读:
    UNIX:处理SIGCHLD信号
    多维数组,指针数组使用,指向指针的指针
    bit field
    链表操作,获得泛型效果
    简明 Vim 练级攻略
    指针3,指向链表对象指针的指针
    大端模式,指针数组
    C宏设置掩码
    springboot 启动报错: Multiple Dockets with the same group name are not supported. The following duplicat
    HTML5学习笔记三
  • 原文地址:https://www.cnblogs.com/wangpeiyuan/p/8178299.html
Copyright © 2011-2022 走看看