uniapp中父子组件的传值

1. uniapp中父子组件的传值

1.1. 父子组件的传值

  通过props来实现, 子组件通过props来接收父组件传过来的值

1.1.1. 父组件

<!-- 父组件 -->
<template>
	<view>
		<my-son :title="title"  @sendData="getSonData"></my-son>
		<p>子组件向父组件传递数据:{{sonMsg}}</p>
	</view>
</template>
<script>
	import mySon from '../../../customComponents/son'
	export default {
		components: {
			mySon
		},
		data() {
			return {
				title:"我是父组件",
				sonMsg:''
			}
		},

		methods:{
			/**
			 * 获取子组件向父组件发送的数据
			 */
			getSonData(res){
				this.sonMsg=res
			}
		}

	}
</script>

在这里插入图片描述

1.1.2. 子组件

  通过props接收父组件中传过来的值
props:[‘list’],

<template>
    <div>
        <p>父传过来的值:{{title}}</p>
        <button @click="sendSonData">子组件向父组件传递数据</button>
    </div>
</template>

<script>
    export default {
        props:{
            title:{
                type:String,
                default:''
            },
        },
        methods:{
            sendSonData(){
                var that=this
                //子组件向父组件传递数据
                that.$emit("sendData", "我是子组件")
            }
        }
    }
</script>

在这里插入图片描述

1.2. 逻辑梳理

1.2.1. 父组件

(1)第一步:引入子组件

	import mySon from '../../../customComponents/son'

(2)第二步:在components中对子组件进行注册;

	components: {
			mySon
		},

(3)第三步:以标签的形式载入;通过数据绑定的形式进行传值~

		<my-son :title="title"  @sendData="getSonData"></my-son>

1.2.2. 子组件

  通过props接收父组件中传过来的值;

        props:{
            title:{
                type:String,
                default:''
            },
        },

1.3. 实现在当前页面改变props中定义的值

  官方文档:https://uniapp.dcloud.io/vue-components?id=props
  在父组件中赋值时加上 .sync,在子组件中使用 this.$emit(‘update:title’,“uni-app”)改变值
  .sync 修饰符
  当一个子组件改变了一个 prop 的值时,这个变化也会同步到父组件中所绑定。 .sync 它会被扩展为一个自动更新父组件属性的 v-on 监听器。

 <!-- 父组件 -->
    <template>
        <view>
            <syncA :title.sync="title"></syncA>
        </view>
    </template>
    <script>
        export default {
            data() {
                return {
                    title:"hello vue.js"
                }
            }
        }
    </script>
<!-- 子组件 -->
    <template>
        <view>
            <view @click="changeTitle">{{title}}</view>
        </view>
    </template>
    <script>
        export default {
            props: {
                title: {
                    default: "hello"
                },
            },
            methods:{
                changeTitle(){
                    //触发一个更新事件
                    this.$emit('update:title',"uni-app")
                }
            }
        }
    </script>

1.4. 子组件修改prop的值

1.4.1. 通过sync修饰符配合$emit,update实现

父组件:

<template>
 	<child-view :num.sync="num"></child-view>
</template>
<script>
 import childView from './assembly/child'
 export default {
    components: {childView},
    data() {
      return {
        num: 2
		}
	}
 }
 </script>

子组件:

<template>
  <div>
    <p>父传过来的值:{{num}}</p>
    <button @click="changeNum">加一</button>
  </div>
</template>
 
<script>
  export default {
    name: 'child',
    props:{
      num: {
        type:Number,
        default: 0
      }
    },
    methods:{
      changeNum(){
        this.$emit("update:num",this.num + 1)
      }
    }
  }
</script>

1.4.2. 通过v-model绑定数据源

父组件:

<template>
 	<child-view v-modal="num"></child-view>
</template>
<script>
 import childView from './assembly/child'
 export default {
    components: {childView},
    data() {
      return {
        num: 2
		}
	}
 }
 </script>

子组件:

<template>
  <div>
    <p>父传过来的值:{{num}}</p>
    <input type="text" :value="value" @input="$emit('input',$event.target.value)">
  </div>
</template>
 
<script>
  export default {
    name: 'child',
    props:["value"]
  }
</script>

1.4.3. 通过父传子,子调用父方法传参数实现

父组件:

<template>
 	<child-view :num="num" @updateNum="updateNum"></child-view>
</template>
<script>
 import childView from './assembly/child'
 export default {
    components: {childView},
    data() {
      return {
        num: 2
		}
	},
	methods: {
      updateNum(num){
        this.num = num
      }
 }
 </script>

子组件

<template>
  <div>
    <p>父传过来的值:{{num}}</p>
    <button @click="changeNum">加一</button>
  </div>
</template>
 
<script>
  export default {
    name: 'child',
    props:{
      num: {
        type:Number,
        default: 0
      }
    },
    methods:{
      changeNum(){
        this.$emit("updateNum",this.num + 1)
      }
    }
  }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值