组件的定义:实现应用中局部功能的代码和资源的集合
组件的优点:文件好维护,依赖关系不混乱,复用率高
模块化:当应用中的js都以模块来编写,那这个应用就是一个模块化的应用
组件化:当应用中的功能都是多组件的方式来编写,你这个应用就是组件化的应用
非单文件组件:一个组件中包含n个组件
单文件组件:一个文件中包含1个组件
创建组件==>注册组件==>使用组件
创建组件
注册组件
使用组件
直接在HTML页面中引入标签
组件名
组件标签
简写方式
const school=Vue.extend(options) <==> const school=options
标准化开发中通常使用一个app组件管理其他的子组件,Vue只要管理一个组件就行了
组件的本质是一个名为VueComponent的构造函数,且不是被程序员定义的,是Vue.extend生成的。
我们只需要写或,Vue解析时会帮我们创建school组件的实例对象,即Vue帮我们执行
new VueComponent(options)
每次调用Vue.extend返回的都是一个全新的VueComponent
this的指向
VueComponent的实例对象可以简称为vc(也可以称为组件实例对象)
Vue的实例对象可以简称为vm
vc和vm都有同名的方法,但是具体怎么实现的不是完全相同,组件是可以复用的vue实例
一个重要的内置关系
回顾原型链
//定义一个构造函数
function Demo()
{
this.a=1
this.b=2
}
//创建一个实例对象
const d= new Demo()
console.log(Demo.protptype) //显示原型属性【指向原型对象】
console.log(d.__proto__) //隐式原型属性【指向原型对象】
Demo.prototype.x=99 //通过显示原型属性操作原型对象,追加一个x属性
VueComponent.prototype.__ proto __==Vue.prototype
Vue没有将VueComponent的原型对象的__ proto __指向Object的原型对象,而是指向Vue的原型对象

为什么要有这个关系?
让组件实例对象可以访问Vue原型上的属性,方法
标签
注意:Vue后缀的文件不可以直接使用,浏览器不能直接解析,所以这里需要工具进行解析,这里要用到WebPack搭建环境或者使用Vue的脚手架(Vue团队搭建好的WebPack环境)
Vue项目结构

School组件
学校名称:{{name}}
学校地址:{{address}}
App组件
main.js
//引入App组件
import App from './App.vue'
new Vue({
template:` `,
el:"#root",
components:{App}
})
html代码
<body>
<div id="root">div>
<script src="../../js/vue.js">script>
<script src="./main.js">script>
body>