组件的拆分
1. 定义并使用一个全局组件(任意地方都可以使用)
<!DOCTYPE html>
<html>
<head>
<title>todolist</title>
<meta charset="utf-8">
<script src="./vue.js"></script>
</head>
<body>
<div id="root">
<div>
<input v-model="inputValue" />
<button @click="handleclick">提交</button>
</div>
<ul>
<!-- 使用全局组件 -->
<todo-list></todo-list>
</ul>
</div>
<script >
// 全局组件
Vue.component('todo-list',{
template: '<li>item</li>'
})
new Vue({
el: "#root",
data: {
inputValue: "",
list: []
},
methods: {
handleclick: function(){
this.list.push(this.inputValue);
this.inputValue = '';
}
}
})
</script>
</body>
</html>
2. 定义并使用一个局部组件
<!DOCTYPE html>
<html>
<head>
<title>todolist</title>
<meta charset="utf-8">
<script src="./vue.js"></script>
</head>
<body>
<div id="root">
<div>
<input v-model="inputValue" />
<button @click="handleclick">提交</button>
</div>
<ul>
<!-- 使用全局组件 -->
<todo-list></todo-list>
</ul>
</div>
<script >
// 全局组件
// Vue.component('todo-list',{
// template: '<li>item</li>'
// })
// 局部组件
var TodoItem = {
template: '<li>item</li>'
}
new Vue({
el: "#root",
// 局部组件
components: {
'todo-list': TodoItem
},
data: {
inputValue: "",
list: []
},
methods: {
handleclick: function(){
this.list.push(this.inputValue);
this.inputValue = '';
}
}
})
</script>
</body>
</html>
3. 往组件中传值
通过属性来进行值的传递。
Vue 中,父组件到子组件的传值,是通过属性进行传递的。
<!DOCTYPE html>
<html>
<head>
<title>todolist</title>
<meta charset="utf-8">
<script src="./vue.js"></script>
</head>
<body>
<div id="root">
<div>
<input v-model="inputValue" />
<button @click="handleclick">提交</button>
</div>
<ul>
<!-- 使用全局组件 -->
<todo-list
v-for="(item,index) of list"
:key="index"
:content="item">
</todo-list>
</ul>
</div>
<script >
// 全局组件
Vue.component('todo-list',{
props: ['content'],
template: '<li>{{content}}</li>'
})
new Vue({
el: "#root",
data: {
inputValue: "",
list: []
},
methods: {
handleclick: function(){
this.list.push(this.inputValue);
this.inputValue = '';
}
}
})
</script>
</body>
</html>
Vue 组件与实例的关系
如上代码: new Vue(...) 是vue的一个实例,Vue.component(...)是vue的一个组件。
每一个Vue 的组件,也是Vue 的一个实例。每一个Vue 实例,也是一个Vue 组件。
Vue 是由许许多多实例构成的.
每个组件内,可以有methods 属性。
每个vue 组件,可以有props,template,methods等构成。
<!DOCTYPE html>
<html>
<head>
<title>todolist</title>
<meta charset="utf-8">
<script src="./vue.js"></script>
</head>
<body>
<div id="root">
<div>
<input v-model="inputValue" />
<button @click="handleclick">提交</button>
</div>
<ul>
<!-- 使用全局组件 -->
<todo-list
v-for="(item,index) of list"
:key="index"
:content="item">
</todo-list>
</ul>
</div>
<script >
// 全局组件
Vue.component('todo-list',{
props: ['content'],
template: '<li @click="handleclick">{{content}}</li>',
methods: {
handleclick: function(){
alert('clicked');
}
}
})
new Vue({
el: "#root",
data: {
inputValue: "",
list: []
},
methods: {
handleclick: function(){
this.list.push(this.inputValue);
this.inputValue = '';
}
}
})
</script>
</body>
</html>