美文网首页
vue通信方法总结(未)

vue通信方法总结(未)

作者: 一包 | 来源:发表于2019-04-07 11:53 被阅读0次

    1. 父给子通信

    //父组件
    <child :fathertochild="msg"></child>
    
    <script>
        import child from ''
        export default{
            components:{
                child
            },
            data(){
                return {
                    msg:"父向子传的值"
                }
            }
        }
    </script>
    
    //子组件
    <script>
        
        export default{
            
            data(){
               
            },
            props:{
                fathertochild:String
            }
        }
    </script>
    

    2. 子向父传值

    //子组件
    //定义一个子组件传值的方法
    <input type="button" @click="childclick">
    <script>
      export default {
        data () {
          return {
            childValue: '我是子组件的数据'
          }
        },
        method:{
            childclick(){
               //fatherMethod是在父组件on监听的方法
              //第二个参数是需要传给父亲的数据
              this.$emit("fatherMethod",this.childValue)
            }
        }
        }
    </script>
    
    <!-- 引入子组件 定义一个on的方法监听子组件的状态-->
    <child v-on:fatherMethod="myMethod"></child>
    <script>
      import child from './child'
      export default {
        components: {
          child
        },
        data(){
           name:"" 
        },
        method:{
           myMethod:function(childvalue){
           // childValue就是子组件传过来的值
           this.name=childvalue
           }
        }
    </script>
    

    3. 兄弟组件传值 eventbus

    • 专门用一个空的 Vue 实例(Bus)来做中央事件总线更加清晰也易于管理。
    • eventBus.js
    import Vue from 'vue'
    let connect = new Vue()    // 实例
    export default connect
    
    //组件a
    <div @click="onclcik"></div>//点击触发传值事件
    <script>
        import connect from './eventBus'
        export default{
            data(){
                return{
                    msg:"组件a要传数据给b"
                }
            },
            methods:{
                onclick(){
                    connect.$emit("activebus",this.msg)
                }
            }
        }
    </script>
    
    //组件b
     <script>
        import connect from './eventBus'
        export default{
            data(){
                return{
                  msg:""  
                }
            },
            //组件未加载时执行事件
            mounted:{
                connect.$on("activebus",val=>{
                    //箭头函数才会绑定this
                    this.msg=val;
                })
            }
        }
    

    3. vue路由传参

    4. 利用本地缓存存储

    5. vuex

    • vuex主要做数据交互,维护公共状态或数据

      - image
    • 可以通过 store.state 来获取状态对象,以及通过 store.commit 方法触发状态变更:store.commit('increment'),我们通过提交 mutation 的方式,而非直接改变 store.state.totalPrice,是因为我们想要更明确地追踪到状态的变化,简单的约定能够让你的意图更加明显,这样你在阅读代码的时候能更容易地解读应用内部的状态改变。
    • Vuex 的状态存储是响应式的。当 Vue 组件从 store 中读取状态的时候,若 store 中的状态发生变化,那么相应的组件也会相应地得到高效更新。
    • Action可以进行一些异步的操作,然后再去触发mutation,所以与后端的一些接口都必须放在action里面
    • mutation必须是同步操作数据方式
    • Vuex 允许我们在 store 中定义“getter”(可以认为是 store 的计算属性)。就像计算属性一样,getter 的返回值会根据它的依赖被缓存起来,且只有当它的依赖值发生了改变才会被重新计算
    • 在用到state直接获取的地方,用getters的方式获取,而不是直接从state拿数据
    • Vuex 允许我们将 store 分割成模块(module)。每个模块拥有自己的 state、mutation、action、getter、甚至是嵌套子模块——从上至下进行同样方式的分割,每个状态集最后合成到一个总的store中
    • 有的组件中获取到 store 中的state, 需要对进行加工才能使用,computed 属性中就需要写操作函数,如果有多个组件中都需要进行这个操作,那么在各个组件中都写相同的函数,那就非常麻烦,这时可以把这个相同的操作写到store 中的getters, 每个组件只要引用getter 就可以了,非常方便。Getter 就是把组件中共有的对state 的操作进行了提取,它就相当于 对state 的computed. 所以它会获得state 作为第一个参数

    相关文章

      网友评论

          本文标题:vue通信方法总结(未)

          本文链接:https://www.haomeiwen.com/subject/ddzjiqtx.html