1.组件,什么是组件,可以这样理解,一个页面有可能包含很多逻辑,很混乱,当我们将这一大坨东西分为很多个小东西,每一个小东西只完成自己的功能,和其他的小东西互不干涉,页面想要使用,只需要引入就行了。
2.组件的使用可分为三步:一创建组件构造器,二注册组件,三使用组件
3.其实每一个组件就相当于一个vue实例,它也有自己的template,method,data,components这些东西,data必须是一个函数,为什么是一个函数呢?组件式可以多复用的,也就是说,可以在很多地方通过引入标签名的方式来使用组件,如果不是函数,那么调用了这些组件的那些界面的数据随时时刻都要一起发生变化,不符合实际,应该是每一个组件实例都拥有自己一份的数据。
4.组件的基本使用例子
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div id="content">
<!--3.使用组件标签,注意:要想组件生效,当前元素,必须与vue实例挂钩-->
<com/>
</div>
<script src="./vue.js"></script>
<script>
//1.创建组件构造器
const myCom = Vue.extend({
template: `
<div>
<h2>我是组件的内容</h2>
</div>
`
})
//2.注册组件,注意:通过Vue.component()这种方式注册组件为全局注册,每一个vue实例都可以使用
//如果是在一个vue实例里注册的组件,那么该组件称为局部组件只能在当前vue实例里使用
//前面参数为组件标签名,后面参数为组件
Vue.component("com",myCom)
const app = new Vue({
el: '#content'
})
</script>
</body>
</html>
结果
5.创建并且注册组件常常用这种语法糖写法
//创建和注册组件的语法糖
Vue.component("com",{
template: `
<div>
<h2>我是组件的内容</h2>
</div>
`
})
6.父组件和子组件,其实当我们在使用父组件的标签的使用,vue底层首先会去看这个组件有没有子组件,有的话,会先去编译好子组件再编译父组件。
例子:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div id="content">
<!--3.使用父组件标签,于此同时,如下父组件也使用了子组件的标签ccom-->
<pcom/>
</div>
<script src="./vue.js"></script>
<script>
//注册一个父组件
Vue.component("pcom",{
template: `
<div>
<h2>我是父组件</h2>
<ccom/>
</div>
`,
components: {
//注册一个子组件
ccom: {
template: `
<div>
<h2>我是子组件</h2>
</div>
`
}
}
})
const app = new Vue({
el: '#content'
})
</script>
</body>
</html>
结果
7.模板分离,其实当template的东西过多时,我们会觉得很乱,其实可以抽取出来
1)方法一,用template标签
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div id="content">
<!--组件标签-->
<com/>
</div>
<template id="temp">
<div>
<h2>我是组件</h2>
</div>
</template>
<script src="./vue.js"></script>
<script>
//注册一个组件
Vue.component("com",{
template: "#temp"
})
const app = new Vue({
el: '#content'
})
</script>
</body>
</html>
2)方法二,使用script标签
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div id="content">
<!--组件标签-->
<com/>
</div>
<script type="text/x-template" id="temp">
<div>
<h2>我是组件</h2>
</div>
</script>
<script src="./vue.js"></script>
<script>
//注册一个组件
Vue.component("com",{
template: "#temp"
})
const app = new Vue({
el: '#content'
})
</script>
</body>
</html>