VUE组件间常用通讯方式

VUE组件间常用通讯方式

  • 只用于自己复习 谢谢

第一种 父传子

-父

<template>
  <div>
    <!-- 传递值 -->
    <Test
     :obj="obj" 
     info="测试"/>
  </div>
</template>

<script>
// 引入子组件
import Test from "../components/Test.vue";
export default {
  name: "about",
  // 注册子组件
  components: {
    Test,
  },
  data() {
    return {
      obj: { //这个是要传递的数据
        code: ,
        title: "",
      },
    };
  },
};
</script>
<template>
    <div>
        <h1>{{obj.code}}</h1><br>
        <h2>{{obj.title}}</h2>
        <h3>{{info}}</h3>
    </div>
</template>

<script>
    export default {
        name:'test',
        props:{//接收的属性
            obj:Object,
            info: [String,Number]  //info值为其中一种类型即可,其他类型报警告
        }
    }
</script>

子传父

<button @click="modifyValue">修改父组件的值</button>
<script>
    export default {
        name:'test',
        methods:{
            modifyValue(){
                this.$emit('modify','子组件传递过来的值')
            }
        }
    }
</script>
<Test
     :obj="obj" 
     info="测试"
     @modify="modifyFatherValue"/>

<script>
// 引入子组件
import Test from "../components/Test.vue";
export default {
  name: "about",
  // 注册子组件
  components: {
    Test,
  },
  data() {
    return {
      msg:'我是父组件'
    };
  },
  methods:{
    // 接受子组件传递来的值,赋值给data中的属性
    modifyFatherValue(e){
      this.msg = e
    }
  }
};
</script>

使用vuex进行组件间的通讯

  • VUEX
  • 通过dispatch 调用到actions(可以用来调用后端api) 然后commit 然后mutations state
  • 可以在组件中直接调用commit
  • npm i vuex 在vue2中安装 npm i vuex@3
  • vue.use(vuex)
import Vue from 'vue';
import Vuex from 'vuex';
 
Vue.use(Vuex);
 //从action -》 mutations -》 state
export default new Vuex.Store({
  state: { //用来存放内容的地方
    sharedData: 'Global State'
  },
  mutations: {
    updateSharedData(state, newData) {
      state.sharedData = newData;
    }
  },
  actions: {
    updateData({ commit }, newData) {
      commit('updateSharedData', newData);//commit回去调用mutations中方法
    }
  },
  getters: {
    getSharedData(state) {//这个就是可以对数据进行去处理  计算属性
      return state.sharedData;
    }
  }
});
  • this.$store.dispatch()
  • 如果action中没有业务逻辑 就可以直接调用 this.$strore.commit(‘jia’,)
  • 插值语法 直接使用{{store.value}}
  • {{$store.getters.bigSum}}
  • 优化$store 直接使用属性名来进行操作数据 批量生成
<script>
import { mapState, mapActions } from 'vuex';
 
export default {
  computed: {
    ...mapState(['sharedData'])   //这个是数据 从state中读取数据
    ...mapGetters([]) //从getter获取数据
  },
  methods: {
    ...mapActions(['updateData'])//就是从action中直接调用方法
    ...mapMutations([]) //mutations调用方法 this.$store.commit 相当于这个方法
  },
  mounted() {
    this.updateData('Updated Global State');
    console.log(this.sharedData);
  }
};
</script>
  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值