vue 学习组件传值

56 阅读1分钟
父传子
  • 父组件
<PubTitle title="虚空鼓动 劫火高扬" subTitle="震惊部标题"></PubTitle>
  • 子组件
<template>
	<view>
		<view>{{title}}</view>
		<view>{{subTitle}}</view>
		<view>{{date}}</view>
		<view>文章内容</view>
		<view>作者: {{author.title}}</view>
	</view>
</template>

<script>
	export default {
		name:"PubTitle",
		props:{
			title:{
				type:String,
				default:""
			},
			subTitle:{
				type:String,
				default:""
			},
			date:{
				type:Number,
				default:Date.now()
			},
			author:{
				type:Object,
				default:{name:"Roy",title:"旅行者"}
			}
		},
		data() {
			return {
				
			};
		}
	}
</script>

<style>

</style>
子传父
  • 子组件
<template>
	<view>
		<input type="text" placeholder="请输入" @input="inputAction" />
	</view>
</template>

<script>
	export default {
		name:"PubTitle",
		data() {
			return {
				
			};
		},
		methods:{
			inputAction(e) {
				this.$emit('updateInputValue',e.detail.value)
			}
		}
	}
</script>
  • 父组件
<PubTitle title="虚空鼓动 劫火高扬" subTitle="震惊部标题" @updateInputValue="getInputValue"></PubTitle>

methods: {
    getInputValue(e) {
	console.log("获取子组件内容:")
	console.log(e)
    }
}
优化 sync
  • 子组件
<template>
	<view>
		<text>标题: {{title}}</text>
		<input type="text" placeholder="请输入" @input="inputAction" />
	</view>
</template>

<script>
	export default {
		name:"PubTitle",
		props:{
			title:{
				type:String,
				default:""
			}
		},
		data() {
			return {
				
			};
		},
		methods:{
			inputAction(e) {
				this.$emit('update:title',e.detail.value)
			}
		}
	}
</script>
  • 父组件
<PubTitle :title.sync="title" subTitle="震惊部标题"></PubTitle>

这样就能父子组件通信