美文网首页
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