Vue学习:使用组件改造ToDoList与组件间的传值
一、原本的ToDoList
每一个li可以当作页面的一个部分,便可以拆开来编写,原本这里是利用v-for循环li标签来显示的,可以将li标签组件化
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Hello World</title>
<script src="./vue.js"></script>
</head>
<body>
<div id="app">
<input type="text" v-model="inputValue"/>
<button v-on:click="handleBtnClick">提交</button>
<ul>
<li v-for="item in list">{
{item}}</li>
</ul>
</div>
</body>
<script>
var app = new Vue({
el:'#app',
data:{
list:[],
inputValue:''
},
methods:{
handleBtnClick:function(){
this.list.push(this.inputValue),
this.inputValue=''
}
}
})
</script>
</html>
二、组件化改造ToDoList
2.1 定义全局组件
vue.component定义的是全局组件,组件名称是TodoItem,内容是li标签
//Vue定义全局组件
Vue.component("TodoItem",{
template:"<li>todo item</li>"
})
2.2 代替li标签
每点一次提交,都会多一次< li >todo item< /li >显示在页面,因为我们定义的组件名称是TodoItem,所以将大写的T和I用t和i代替,但是后面的驼峰都需要接一个-符号
<ul>
<!--<li v-for="item in list">{
{item}}</li>-->
<todo-item v-for="item in list"></todo-item>
</ul>
2.3 v-bind传值
我们上面2.2中li标签内容只是显示todo item,在相对于我们外层容器div="app"来说,我们定义的组件是子组件,所以需要传递内容给子组件
这里便需要用到v-bind,这里将list每一项内容赋值给item,再把item利用v-bind的形式传递给todo-item组件,利用content来传值,所以需要在组件中去接收,接收父组件传值的需要定义props
<!DOCTYPE html>
<html lang="en">