Vue 组件的通信

vue不得不了解的就是组件间的数据通信(暂且不谈vuex插件)。

通信方式根据组件之间的关系有不同之处。

组件关系有下面三种:父-->子子-->父非父子

1、父-->子

父向子传递数据用prop

<!--子组件代码-->
<template>
	<div> {{message}} </div>
</template>

<script>
	export default{
		name="child",
		prop: ['message'], //利用prop函数,定义一个"message"变量
		data(){
			
		}
	}
</script>
<!--父组件代码-->
<template>
	<v-child message="msg"> </v-child>   <!--在这里传值-->

</template>
<script> 
  import Child from './child.vue'
  export default{
    name: 'parent',
    components: { 'v-child': Child },
    data(){
      return{ msg:'hello world'
        }
  }
</script>

 2.子组件给父组件传值($emit) 子组件给父组件传值的中心思想是;通过方法传参,具体用法如下:

<!-- 子组件部分 -->

<script>
	data(){
		return{
			msg: '123'
		}
	},
	method: {
		funcName: function(){
			this.$emit("tanslate",this.msg)
			//自定义一个tanslate和一个参数this.msg
		}
	}
</script>


父页面HTML部分: 通过子页面定义tanslate事件调用自定的tanslateText方法
<v-child v-on:tanslate="tanslateText">  </v-child>

 父页面js部分:

method:{
	tanslateText:function(text){ //text是字组件传过来的参数
		console.log(text) //打印出子组件传递过来的参数
	}
}

  

3.兄弟组件之间传值

创建一个store.js文件,注册Vuex
import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

//定义state,并将listName设置成一个空对象
const state = {
	listName:{} 
}

/定义mutations,可以传参数,用于设置state里的listName
const mutations = {
	set_listname : (state, value) => {
		state.listName = value ;
	}
}

//定义getters,用于获取state里的对象
const getters = {
	get_listname: state => {
		return{ state.listName
	}
}

export default new Vuex.store({
	getters,
	state,
	mutations
})

  

在vue实例中注册store.js

//main.js

import Vue from 'vue'
import App from './App'
import store from './style'

new Vue({
el : '#app',
route,
store,
template: '<App/>',
components: {App}
})

  

后续补充完善



 

posted @ 2019-05-29 14:44  清风柠檬  阅读(162)  评论(0编辑  收藏  举报