1、父組件傳值給子組件,首先在父組件聲明值。
2、引用子組件的時候將值用屬性的方式傳遞給子組件。
3、子組件用props接收來自父組件的值 。
4、子組件可以直接使用接收到的值。
5、如果子組件要修改來自父組件的值,不能直接修改,要通過事件進行修改
首先子組件中點擊事件綁定方法,
方法調用$emit()事件,通過這個方法發送請求給父組件,
同時這個方法有兩個參數,第一個是方法名(此方法名在父組件中用到)。第二個是父組件中方法的參數。
父組件綁定方法接收這個請求。(綁定的方法要和子組件傳來的方法一樣,即父組件中@后面的方法要個子組件中$emit()中的第一個參數一樣)
同時在methods中定義這個方法,方法體中做數據處理。
6、因為vue是雙向數據綁定,因此數據更新的時候頁面上也會即時進行更新
7、本文中給出案例是每點擊一次按鈕數字+1,按鈕在子組件中,數字初始化在父組件中,數字在父子組件中都有展示
代碼如下
父組件代碼
<template> <div style="border: 1px solid black;padding: 5px"> <h1>this is component1</h1> <h2>我是父組件的data:我現在在父組件里面{{data}}</h2> <!--通過屬性傳遞給子組件--> <!--通過方法改變改變值--> <component2 :data="data" @changeComponent1Data="component1DataChange" > </component2> </div> </template> <script> import component2 from './component2' export default { name: "component1", components: { component2 }, data() { return { data: 0 } }, methods: { /** * 父組件處理子組件發送的數據更改 * @param params */ component1DataChange(params) { this.data += params; } } } </script> <style scoped> </style>
子組件代碼
<template> <div style="border: 1px dashed red"> <h1>this is component2</h1> <!--直接使用接受到的值--> <h2>我是子組件接收到的父組件的data:我現在在子組件里面{{data}}</h2> <!--綁定要求改變父組件值的事件--> <el-button type="primary" @click="changeData" > 點我改變父組件的值 </el-button> </div> </template> <script> export default { name: "component2", components: {}, props: { //接收父組件傳來的值 data: Number }, data() { return {} }, methods: { /** * 通過方法請求給父組件改變值 */ changeData() { this.$emit("changeComponent1Data", 1) } } } </script> <style scoped> </style>
效果圖如下