父组件向子组件传值
- 父组件使用 子组件时通过v-bind:变量的形式将对应的值传给todo-item子组件
- 子组件通过props接收从父组件传来的content参数
子组件向父组件传值
- 数据在父组件中 父组件的数据决定子组件显示多少内容
- 删除子组件:点击子组件时将点击内容传给父组件 让父组件改变list对应数据
- 父组件的数据改变 子组件跟着变化
- 子组件向父组件传值:通过$emit的方式向外触发事件 同时父组件监听该事件获取子组件传递过来的参数实现子组件向父组件传值
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>TodoList</title>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
<div id="app">
<input type="text" v-model="inputValue">
<button v-on:click="handleBtnClick">提交</button>
<ul>
<!-- 在父组件中创建子组件的同时通过v-on监听delete事件 delete事件被触发的时候就会执行父组件中的handleItemDelete方法【这个方法会拿到子组件传递过来的index的值】 -->
<todo-item v-bind:content="item" v-bind:index="index" v-for="(item,index) in list" @delete="handleItemDelete"></todo-item>
</ul>
</div>
<script>
// 局部组件
var TodoItem={
// 子组件要使用index参数 在props中接收
props:['content','index'],
// 需求:点击某一内容时 将该内容删除【VUE不操作DOM 通过数据改变让视图发生变化】
template:"<li @click='handleItemClick'>{
{content}}</li>",
methods:{
//
handleItemClick(){
// 点击子组件的时候 子组件向外触发delete事件同时将this.index作为参数传给父组件
this.$emit("delete",this.index)
// alert("click")
}
}
}
var app=new Vue({
el:'#app',
components:{
TodoItem:TodoItem
},
data:{
list:["第一课的内容","第二课的内容","第三课的内容"],
inputValue:"",
},
methods:{
handleBtnClick(){
console.log(this.inputValue)
this.list.push(this.inputValue)
this.inputValue=""
},
handleItemDelete(index){
// this.list=[]// 数据变化视图跟着变化:列表被清空
// alert("delete")
this.list.splice(index,1)
alert(index)
}
}
})
</script>
</body>
</html>
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/qdvuejs/11185.html