Vue中,子组件修改父组件传递过来的值(父传子)-props接收数据的四种写法

Vue中,子组件修改父组件传递过来的值(父传子)-props接收数据的四种写法

1、props的几种写法
<template>
<!-- 写法二 -->
  <el-pagination
    class="fr page-style"
    @size-change="handleSizeChange"
    @current-change="handleCurrentChange"
    :current-page="currentPage"
    :page-sizes="pageSizes"
    :page-size="pageSize"
    layout="total, sizes, prev, pager, next, jumper"
    :total="totalPage"
    background
  >
  </el-pagination>
<!-- 写法三 和 写法四 -->
<div>{{fastTitle}}</div>
</template>
</template>

<script>
export default {
   props: {
      enabled: { // 写法一
        type: Boolean,
        default: false
      },
    },
    
   props: {  // 写法二
    'pageSizes': {
      type: Array,
      default () {
        return [10, 20, 50];
      }
    },
    'pageSize': {
      type: Number,
      default: 10
    },
    'totalPage': Number,
    'currentPage': Number
   },

  // props: ['fastTitle'],  // 写法四(推荐)
  props: { // 写法三
    fastTitle: {
      type: String,
      require: true
    },
    rowData: {
	  type: Object
	},
    name: {
      type: String,
      default: ''
    }
  },
    
    data(){
        return{
            name: data => this.enabled ? '小明' : '小红'  // 写法一
        }
    },
    methods:{
        getList(type){
            let params = {type, rowData: this.rowData, name: this.name};
        }
    }
}
</script>
2、常用方法

一般通过子组件修改父组件传递过来的值,我们就会采用props和$emit进行单向数据绑定。

父组件:

<template>
    <div>
   		<test :value="value" @change="change"></test>
    </div>
</template>

<script>
import test from '@/components/test.vue'
export default {
	components: {
        test
    },
    data() {
        return {
        	name: '父组件的值'
        };
    },
    methods: {
        change (value) {
            this.name = value
        }
    }
}
</script>

子组件:

<template>
    <div>
    	<div>{{ value }}</div>
    	<button @click="change">改变父组件的值</van-button>
    </div>
</template>

<script>
export default {
    props: {
        value: { // 接收的参数
            type: String
        }
    },
    methods: {
        change () {
            this.$emit('change', '子组件调用父组件的change方法修改的')
        }
    },
};
</script>
3、通过.sync修饰符在子组件中修改

父组件:

<template>
    <div>
   		<test :value.sync="value"></test>
    </div>
</template>

<script>
import test from '@/components/test.vue'
export default {
	components: {
        test
    },
    data() {
        return {
        	value: '父组件的值'
        };
    }
}
</script>

子组件:

<template>
    <div>
    	<div>{{ value }}</div>
    	<button @click="change">改变父组件的值</van-button>
    </div>
</template>

<script>
export default {
    props: {
        value: {
            type: String
        }
    },
    methods: {
        change () {
            this.$emit('update:value', '在子组件中修改父组件的值')
        }
    },
};
</script>
4、使用v-model双向数据绑定

父组件:

<template>
    <div>
   		<test v-model="value"></test>
    </div>
</template>

<script>
import test from '@/components/test.vue'
export default {
	components: {
        test
    },
    data() {
        return {
        	value: '父组件的值'
        };
    }
}
</script>

子组件:

<template>
    <div>
    	<div>{{ value }}</div>
    	<button @click="change">改变父组件的值</van-button>
    </div>
</template>

<script>
export default {
    props: {
        value: {
            type: String
        },
    },
    model: {
    	prop: 'value',
    	event: 'changes'
    }
    methods: {
        change () {
            this.$emit('changes', '在子组件中修改父组件的值')
        }
    },
};
</script>
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值