目录
什么是组件: 组件的出现,就是为了拆分Vue实例的代码量的,能够让我们以不同的组件,来划分不同的功能模块,将来我们需要什么样的功能,就可以去调用对应的组件即可。
模块化:是从代码逻辑的角度进行划分的;方便代码分层开发,保证每个功能模块的职能单一
组件化:是从UI界面的角度进行划分的;前端的组件化,方便UI组件的重用
1.使用 Vue.extend 配合 Vue.component 方法:
1. 父级的填充内容如果指定到子组件的没有对应名字插槽,那么该内容不会被填充到默认插槽中。
2. 如果子组件没有默认插槽,而父级的填充内容指定到默认插槽中,那么该内容就“不会”填充到子组件的任何一个插槽中。
3. 如果子组件有多个默认插槽,而父组件所有指定到默认插槽的填充内容,将“会” “全都”填充到子组件的每个默认插槽中。
今日任务:
掌握组件的创建方式
掌握插槽的使用方法
一、知识点
vue组件
什么是组件: 组件的出现,就是为了拆分Vue实例的代码量的,能够让我们以不同的组件,来划分不同的功能模块,将来我们需要什么样的功能,就可以去调用对应的组件即可。
组件化和模块化的不同:
-
模块化:是从代码逻辑的角度进行划分的;方便代码分层开发,保证每个功能模块的职能单一
-
组件化:是从UI界面的角度进行划分的;前端的组件化,方便UI组件的重用
1.1 全局组件定义的四种方式
1.使用 Vue.extend 配合 Vue.component 方法:
var login = Vue.extend({
template: '<h1>登录</h1>'
});
Vue.component('login', login);
2.直接使用 Vue.component 方法:
Vue.component('register', {
template: '<h1>注册</h1>'
});
3.将模板字符串,定义到script标签中:
<script id="tmpl" type="x-template">
<div><a href="#">登录</a> | <a href="#">注册</a></div>
</script>
同时,需要使用 Vue.component 来定义组件:
Vue.component('account', {
template: '#tmpl'
});
4.将模板字符串,定义到template标签中:
< template id="tmpl">
<div><a href="#">登录</a> | <a href="#">注册</a></div>
</ template >
同时,需要使用 Vue.component 来定义组件:
Vue.component('account', {
template: '#tmpl'
});
注意:组件中的DOM结构,有且只能有唯一的根元素(Root Element)来进行包裹!
1.2 组件中展示数据和响应事件
例如:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title></title>
<script src="./vue-2.4.0.js"></script>
</head>
<body>
<div id='app'>
<!-- 组件的使用 当作标签使用 -->
<son4></son4>
<son4></son4>
<son4></son4>
<son5></son5>
<son6></son6>
{
{msg2}}
</div>
<!--
<div id='app2'>
<son4></son4>
<son4></son4>
<son4></son4>
</div> -->
<!-- 4 -->
<template id="son4">
<div>
son4{
{msg}}
<input type="text" v-model="msg" name="" id="">
<button @click="addList">点我数据添加</button>
<div v-for="(item,index) in list" :key="index">{
{item}}</div>
</div>
</template>
<template id="son5">
<div>
son5{
{msg2}}
</div>
</template>
<template id="son6">
<div>
son6{
{msg2}}
</div>
</template>
<script>
// let obj = {age:10}
// let obj2 = {age:10}
// console.log(obj == obj2);
// 4
Vue.component("son4", {
template: "#son4",
// 目的:数据隔离,互不影响
data() {
return {
msg: 'hello',
list: [4, 5, 6, 7, 8]
}
},
methods: {
addList() {
this.list.push(9)
}
}
})
let son5 = {
template: "#son5",
data(){
return {
msg2:"hello2"
}
}
}
let son6 = {
template: "#son6",
data(){
return {
msg2:"hello2"
}
}
}
const vm = new Vue({
el: '#app',
data: {
msg2:"这是app里面的"
},
methods: {
},
components: {
// 'son5': {
// template: "#son5"
// }
son5,son6
}
})
// const vm2 = new Vue({
// el: '#app2',
// data: {},
// methods: {
// },
// })
</script>
</body>
</html>