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} })
后续补充完善