目录
this.$el是真实DOM

常用的生命周期钩子:
关于销毁Vue实例:
模块:
组件:
模块化:
组件化:




Vue中使用组件的三大步骤:
1.如何定义一个组件?
使用Vue.extend(options)创建,其中options和new Vue(options)时传入的那个options几乎一样,但也有点区别。区别如下:
备注:使用template可以配置组件结构
2.如何注册组件?
3.编写组件标签:
非单文件组件和单文件组件的区别:
非单文件组件:一个文件中包含有n个组件

单文件组件:一个文件只包含有1个组件

为什么data要用对象式?
- // 当data用对象式式
- let data={
- a:1,
- b:2
- }
- const x1=data
- const x2=data

- function data(){
- return{
- a:1,
- b:2
- }
- }
- const x1=data()
- const x2=data()

- html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>Documenttitle>
- <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js">script>
-
- head>
- <body>
- <div id="root">
- <hello>hello>
- <hr>
-
- <school>school>
- <hr>
- <student>student>
- div>
- <div id="root2">
- <hello>hello>
- div>
- body>
- <script>
- Vue.config.productionTip=false//阻止vue在启动时生成生产提示
- // 第一步,创建school组件
- const school=Vue.extend({
- template:`
- <div>
- <h2>学校名称:{{schoolName}}h2>
- <h2>学校地址:{{address}}h2>
- <button @click="showName">点我提示学校名button>
- div>
- `,
- data(){
- return{
- schoolName:'尚硅谷',
- address:'北京',
- }
- },
- methods:{
- showName(){
- alert(this.schoolName)
- }
- }
- })
- const student=Vue.extend({
- template:`
- <div>
- <h2>学生姓名:{{studentName}}h2>
- <h2>学生年龄:{{age}}h2>
- div>
- `,
- data(){
- return{
- studentName:'a',
- age:18
- }
- }
- })
-
- const hello=Vue.extend({
- template:`
- <div>
- <h2>你好呀!{{name}}h2>
- div>
- `,
- data(){
- return{
- name:'田园犬'
- }
- }
- })
-
- // 第二步,全局注册组件
- Vue.component('hello',hello)
- // 创建vm
- new Vue({
- el:'#root',
- // 第二步,注册组件(局部注册)
- components:{
- school,
- student
- }
-
- })
- new Vue({
- el:'#root2'
- })
- script>
- html>
1.关于组件名:
一个单词组成:
多个单词组成:
备注:
2.关于组件标签
备注:不用使用脚手架时,会导致后续组件不能渲染
3.一个简写方式:
- const school=Vue.extend(options)可简写为
- const school=options
- html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>Documenttitle>
- <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js">script>
-
- head>
- <body>
- <div id="root">
- <h1>{{msg}}h1>
- <my-school>my-school>
- div>
- body>
- <script>
- Vue.config.productionTip=false//阻止vue在启动时生成生产提示
- // 简写
- const s={
- template:`
-
-
学校名称:{{name}}
-
学校地址:{{address}}
-
- `,
- data(){
- return{
- name:'atguigu',
- address:'北京'
- }
- }
-
- }
- new Vue({
- el:'#root',
- data:{
- msg:'你好呀'
- },
- components:{
- 'my-school':s
- }
-
- })
-
- script>
- html>
- html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>Documenttitle>
- <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js">script>
-
- head>
- <body>
- <div id="root">
- <app>app>
- div>
- body>
- <script>
- Vue.config.productionTip=false//阻止vue在启动时生成生产提示
- // 定义student组件
- const student=Vue.extend({
- template:`
- <div>
- <h2>学生姓名:{{name}}h2>
- <h2>学生年龄:{{age}}h2>
- div>
- `,
- data(){
- return{
- name:'a',
- age:18
- }
- }
- })
- // 定义school组件
- const school={
- template:`
- <div>
- <h2>学校名称:{{name}}h2>
- <h2>学校地址:{{address}}h2>
- <student>student>
- div>
- `,
- data(){
- return{
- name:'atguigu',
- address:'北京'
- }
- },
- components:{
- student
- }
- }
- // 定义hello组件
- const hello=Vue.extend({
- template:`<h1>{{msg}}h1>`,
- data(){
- return{
- msg:'欢迎来到尚硅谷学习!'
- }
- }
- })
- // 定义app组件
- const app=Vue.extend({
- template:`
- <div>
- <hello>hello>
- <school>school>
- div>
- `,
- components:{
- school,
- hello
- }
- })
-
- new Vue({
- template:`<app>app>`,
- el:'#root',
- // 注册组件
- components:{
- app,
- }
- })
- script>
- html>
1.school组件本质是一个名为VueComponent的构造函数,且不是程序员定义的,是Vue.extend生成的
2.我们只需要写
3.特别注意:每次调用Vue.extend,返回的都是一个个新的VueComponent
4.关于this的指向:
5.VueComponent的实例对象,以后简称vc(也可称之为:组件实例对象),Vue的实例对象,简称vm

index.html
- html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>测试一下单文件组件的语法title>
- head>
- <body>
-
- <div id="root">div>
- <script src="./vue.js">script>
- <script src="./153.main.js">script>
-
- body>
- html>
main.js
- import App from './152.App.vue'
-
- new Vue({
- el:'#root',
- template:`
`, - components:{App},
- })
App.vue
- <div>
- <School>School>
- <Student>Student>
- div>
-
- <script>
- // 引入组件
- import School from './150.School.vue'
- import Student from './151.Student.vue'
- export default {
- name:'App',
- components:{
- School,
- Student
- }
- }
- script>
School.vue
- <div>
- <School>School>
- <Student>Student>
- div>
-
- <script>
- // 引入组件
- import School from './150.School.vue'
- import Student from './151.Student.vue'
- export default {
- name:'App',
- components:{
- School,
- Student
- }
- }
- script>
Student.vue
- <div class="demo">
- <h2>学生姓名:{{name}}h2>
- <h2>学生年龄:{{age}}h2>
- div>
-
- <script>
- // 组件交互相关的代码(数据、方法等)
- // 分别暴露、统一暴露 在school前加export
- export default{
- name:'Student',
- data(){
- return{
- name:'张三',
- age:18
- }
- }
- }
- script>