文章目录
- 一、模块与组件
- 1、概念
- 2、分类
- 二、非单文件组件
- 1、创建组件
- 2、注册组件
- 1)局部注册
- 2)全局注册
- 3、注意点
- 1)组件名
- 2)关于组件标签
- 三、VueComponent
- 1、概念
- 2、内置关系
- 三、单文件组件
- 1、格式
- 2、引用
- 1)暴露
- 2)引用
- 3)主文件
一、模块与组件
1、概念
组件实现局部功能代码和资源的集合。
2、分类
非单文件组件:一个文件中包含n个组件
单文件组件:一个文件中只包含一个组件(a.vue)(一般开发都是用这个)
二、非单文件组件
1、创建组件
const school = Vue.extend({
//一定不要写el配置项,因为最终所有的组件都要被一个vm管理,由vm决定服务于哪个容器
//使用template配置组件结构
template:
`
<div></div>
`
//下面一定要写成函数形式,不能写成data(){}(因为这样是指向同一空间,不符合组件化),避免组件被复用时,数据存在引用关系。
data(){
return{
}
}
})
2、注册组件
1)局部注册
<aschool></aschool>
<school></school>
new Vue({
el:"root",
components:{
aschool:school //组件名字在这里定
//直接写成这样也可以
school,
}
})
2)全局注册
//在外面注册
Vue.component('school',school)
new Vue({
el:"root",
})
3、注意点
1)组件名
一个单词组成:
- 第一种写法(首字母小写):school
- 第二种写法(首字母大写):School
多个单词
- 第一种写法(kebab-case命名):my-school
- 第二种写法(Camelcase命名):MySchool(需要Vue脚手架支持)
备注
- 组件名尽可能回避HTML中已有的元素名称,例如:h2、H2都不行。
- 可以使用name配置项指定组件在开发者工具中呈现的名字。
2)关于组件标签
第一种写法:
<
s
c
h
o
o
l
>
<
/
s
c
h
o
o
1
>
<school></schoo1>
<school></schoo1>
第二种写法:
<
s
c
h
o
o
l
/
>
<school/>
<school/>
备注:不用使用脚手架时,
<
s
c
h
o
o
1
/
>
<schoo1/>
<schoo1/>会导致后续组件不能渲染。
const school =Vue.extend(options)可简写为:const school = options
三、VueComponent
1、概念
const school = Vue.extend({
})
school组件本质是一个名为VueComponent的构造函数,且不是程序员定义的,是Vue.extend生成的
我们只需要写 < s c h o o l / > <school/> <school/>或 < s c h o o l > < / s c h o o 1 > <school></schoo1> <school></schoo1>,Vue解析时会帮我们创建school组件的实例对象,即Vue帮我们执行的:new Vuecomponent(options)。
特别注意:每次调用Vue.extend,返回的都是一个全新的VueComponent
this指向:
- 组件配置中
data函数、methods中的函数、watch中的函数、computed中的函数,它们的this均是【Vuecomponent实例对象-vc】 - new Vue(options)配置中:
tata函数、methods中的函数、watch中的函数、computed中的函数 它们的this均是【Vue实例对象-vm】
2、内置关系
黄色的线让组件实例对象可以访问到Vue原型上的属性,方法
三、单文件组件
1、格式
一个组件一个文件,以.vue结尾
<template>
//组件的结构
</yemplate>
<style>
//组件的样式
</style>
<script>
//组件交互相关的代码(数据,方法等 )
</script>
2、引用
1)暴露
- 分别暴露
<style>
export const school = Vue.extend*({})
</style>
- 统一暴露
<style>
const school = Vue.extend*({})
</style>
export {school}
- 默认暴露
<style>
const school = Vue.extend*({})
</style>
export default school
简化后写成
export default {
}
2)引用
import School from "./School.vue" (.vue可以省略)
3)主文件
在index.js/main.js中创建vm
new Vue({})
在index.html/main.html中引入,引入前注意先引入vue.js
<script type="text/javascript" src="../js/vue.js"></script>
<script type="text/javascript" src="./main.js"></script>