目录
1. 概念
2. 非单文件组件的使用
2.1 组件注意点
2.2 组件嵌套
2.3 VueComponent 函数
2.4 内置关系
3. 单文件组件(重点)
3.1 Student.vue
3.2App.vue
3.3 main.js 文件:
3.4 index. html
3.5 总结
1. 概念
- 组件定义:实现局部功能代码和资源的集合
- 非单文件组件:一个文件中包含n个组件
- 单文件组件:一个文件只有一个组件
- const student=Vue.extend({ date(){}; })
- 使用Vue.extend(options)创建,其中options和new Vue(options)时传入的那个options几乎一样,但也有点区别:
- 1.el不要写,因为最终所有的组件都要经过一个vm的管理,由vm中的el决定服务哪个容器
- 2.data必须写成函数,为避免组件被复用时,数据存在引用关系。
- 备注:使用template可以配置组件结构。
- new Vue({template` `,components:{组件名student} })
- 局部注册:靠new Vue的时候传入components选项
- 全局注册:靠Vue.component('组件名',组件)
- 在html里面写
Document - 锐客网 vue组件化学习
2.1 组件注意点 组件名写法
- 一个单词组成: (首字母小写)school,(首字母大写):School
- 多个单词组成:(kebab-case命名):my-school、(CamelCase命名):MySchool (需要Vue脚手架支持)
- 一般使用首字符大写的写法,到开发者工具相同
- 组件名尽可能回避HTML中已有的元素名称,例如:h2、H2都不行。
- 可以使用name配置项指定组件在开发者工具中呈现的名字。
- 第一种写法:
- 第二种写法:
- 备注:不用使用脚手架时,会导致后续组件不能渲染。
- const school = Vue.extend(options) 可简写为:const school = options
注意在创建(定义)组件时写,关系要从小到大的顺序写,如先有兄弟,再写父级关系
const school = Vue.extend({
template:` `,
components:{
student,
teacher
}
})
2.3 VueComponent 函数
- 1.vue组件本质是个构造函数且不是程序员定义的,是Vue.extend生成的。
- 2. 需要写或,Vue解析时会帮我们创建school组件的实例对象, 即Vue帮我们执行的:new VueComponent(options)。
- 3.特别注意:每次调用Vue.extend,返回的都是一个全新的VueComponent
- 4.关于this指向:
- (1).组件配置中:data函数、methods中的函数、watch中的函数、computed中的函数 它们的this均是【VueComponent实例对象】。
- (2).new Vue(options)配置中:data函数、methods中的函数、watch中的函数、computed中的函数 它们的this均是【Vue实例对象】。
- 5.VueComponent的实例对象,以后简称vc(也可称之为:组件实例对象)。Vue的实例对象,以后简称vm。
- 1.一个重要的内置关系:VueComponent.prototype.__proto__ === Vue.prototype
- 2.为什么要有这个关系:让组件实例对象(vc)可以访问到 Vue原型上的属性、方法。
一个标准的组件应该有html、css、JavaScript三个文件,
- : 组件html结构,里面根元素只有一个
- : 放组件交互相关的代码(data(函数式有return)、methods)
- : 组件css样式,如果没有样式可以不写
【Vue|Vue 组件化】script标签里面首先要暴露组件,有以下三种方式
- 分别暴露:export const Student=vue.extend({})
- 统一暴露:export {Student}
- 默认暴露:default export Student,
- 以上const Student=vue.extend({}) 可简写 default export {name:‘组件名’} 以默认暴露为例
- 一般在组件时使用默认暴露,因为引入方式简单用 import xxx from xxx
学生姓名:{{ name }}
学生年龄:{{ age }}
3.2App.vue 如果安装了vetur插件可以使用快捷键
- :
3.3 main.js 文件: ps :在vscode 勾选Emmet: Trigger Expansion On Tab,按tab键可以快速补全代码
引入app.vue (引入时可以不写.vue后缀)
import App from './App.vue'new Vue({
el: '#root',
template: ``,
// 注册组件
components: { App },
})
3.4 index. html在body最下方按顺序引入vue.js、main.js(入口文件)
- 锐客网
3.5 总结
- index.html: 准备一个容器root,先后引入vue.js, main.js文件(可以不写,后期放入vue脚手架中)
- main.js:引入app.vue 创建new vue({el:‘#root’,template:`组件标签`(放html的结构),(注册组件)components:{组件名})
- App.vue组件:template写组件标签school,script写引入组件school.vue,暴露组件app.vue
- School.vue组件:template 写结构(vue基础语法),script写脚本暴露school组件(包含命名,data,methods),style写样式
推荐阅读
- 前端|JAVA WEB技术
- 数据结构|for in / for of / forEach 循环
- 前端知识|Vue双向数据绑定原理
- 前端框架|前端开发Vue项目实战(电商后台管理系统(一)前后端搭建)
- #yyds干货盘点# javascript学习系列(15):数组中的lastIndexOf方法
- 神奇软件|神奇软件(良心浏览器 纯净无捆绑,还有亿点点好用360极速浏览器X)
- #yyds干货盘点#javascript学习系列(11):数组中的findIndex方法
- 多叉树结合JavaScript树形组件实现无限级树形结构(一种构建多级有序树形结构JSON(或XML)数据源的方法)
- Javascript井字棋-1