继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

通过todo-list案例对父子组件的传递(总结)

__Simple__
关注TA
已关注
手记 17
粉丝 11
获赞 116

代码如下:
局部组件模式:

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Todo List</title>
	<script src="https://cdn.jsdelivr.net/npm/vue@2.6.0"></script>
</head>
<body>
	<div id="root">
		<div>
			<input type="text" v-model="todoValue">
			<button @click="handleBtnClick">submit</button>
		</div>
		<ul>
			<todo-item :content="item" 
					   :index="index"
					   v-for="(item, index) in list" 
					   @delete="handleItemDelete">
			</todo-item>
		</ul>
	</div>
	<script>
		// 局部组件
		var TodoItem = {
			props: ['content', 'index'],
			template: "<li @click='handleItemClick'>{{ content }}</li>",
			methods: {
				handleItemClick: function(){
					this.$emit('delete', this.index)
				}
			}
		}
		var app = new Vue({
			el: '#root',
			components: {
				TodoItem: TodoItem
			},
			data: {
				todoValue: '',
				list: []
			},
			methods: {
				handleBtnClick: function(){
					this.list.push(this.todoValue)
					this.todoValue = ''
				},
				handleItemDelete: function(index){
					this.list.splice(index, 1)
				}
			}
		})
	</script>
</body>
</html>

全局组件模式:

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<script src="https://cdn.jsdelivr.net/npm/vue@2.6.0"></script>
</head>
<body>
	<div id="root">
		<div>
			<input type="text" v-model="value">
			<button @click="handleBtnClick">submit</button>
		</div>
		<ul>
			<todo-item :content="item" :index="index" v-for="(item, index) in list" @delete="handleItemDelete"></todo-item>
		</ul>
	</div>
	<script>
		// 全局组件
		Vue.component('TodoItem', {
			props: ['content', 'index'],
			template: "<li @click='handleItemClick'>{{ content }}</li>",
			methods: {
				handleItemClick: function(){
					this.$emit('delete', this.index)
				}
			}
		})
		var app = new Vue({
			el: "#root",
			data: {
				value: '',
				list: []
			},
			methods: {
				handleBtnClick: function(){
					this.list.push(this.value)
					this.value = ''
				},
				handleItemDelete: function(index) {
					this.list.splice(index, 1)
				}
			}
		})
	</script>
</body>
</html>

父组件通过v-bind的绑定方式进行数据的传递,子组件通过props属性接收父组件穿过来数据也就是content与index。
$emit(事件名称, […属性值])。
子组件通过$emit的方式向上一层触发事件,父组件监听子组件穿过来的事件,如果传了属性值子组件就会把数据带出来给到父组件。

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP