VUE

Vue父子组件通信(props,$emit)

通过props实现父组件向子组件传递数据:

App组件中包含list数据,要把App中的list数据传递给List子组件,并由子组件展示到页面中。

父组件APP:

<template>
    <div>
        <MyList :list="list"/>    //Mylist组件绑定data中的list
    </div>
</template>

<script>
import MyList from './components/List.vue'   

export default {
    components: { MyList},
    data() {
	return {
	    list: [
	        {
		    id: 1,
		    title: 'a1'
		},
               {
		    id: 2,
		    title: 'a2'
		}
	    ]
	}
    },		
}
</script>

子组件MyList:

<template>
  <div>
    <ul>
      //遍历list并展示
      <li v-for="item in list" :key="item.id">
        {{ item.title }}
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  //通过props接收App中的list数据,指定类型为数组
  props:{
    list: Array
  }
}
</script>

通过$emit实现子组件向父组件传递数据:

在MyInput子组件中,通过在输入框输入数据并点击添加按钮把输入的数据保存到App的list中。

子组件MyInput:

<template>
  <div class="input">
    <input type="text" v-model="title">    //绑定input框中的title数据
    <button @click="add">添加</button>    //添加按钮点击事件回调add
  </div>
</template>

<script>
export default {
  data() {
    return {
      title: ''
    }
  },
  methods: {
    //通过add方法中的$emit把title发送出去
    add() {
      this.$emit('add', this.title)
    }
  }
}
</script>

App:

<template>
    <div>
        <MyInput @add="add"/>    //监听MyInput的add
    </div>
</template>

<script>
import MyInput from './components/Input.vue'  

export default {
    components: { MyInput},
    data() {
	return {
	    list: [
	        {
		    id: 1,
		    title: 'a1'
		},
               {
		    id: 2,
		    title: 'a2'
		}
	    ]
	}
    },	
    methods: {
        //接收到add中的title后把title添加到list中
	add(title) {
	    this.list.push({
	        id: Math.random(),    //使用随机数作为id
		title
	    })
        }
    },	
}
</script>

MyInput组件把输入框的内容传递给App之后,App中list数据增加,自然也会传递给MyList组件并展示到页面上。

完整App:

<template>
    <div>
        <MyInput @add="add"/>    //监听MyInput的add
        <MyList :list="list"/>
    </div>
</template>

<script>
import MyInput from './components/Input.vue'  
import MyList from './components/List.vue'

export default {
    components: { MyInput, MyList},
    data() {
	return {
	    list: [
	        {
		    id: 1,
		    title: 'a1'
		},
               {
		    id: 2,
		    title: 'a2'
		}
	    ]
	}
    },	
    methods: {
        //接收到add中的title后把title添加到list中
	add(title) {
	    this.list.push({
	        id: Math.random(),    //使用随机数作为id
		title
	    })
        }
    },	
}
</script>