虽然本人更多从事的是java后端开发,但作为一名精神小伙,本就有着架构的梦想,所以一直希望自己前后端都要有所涉猎,于是开始学习Vue框架作为拓展前端道路的试水区。
¶一、简介
¶1. 概念
-
Vue.js
是一套构建用户界面的渐进式框架。Vue
只关注视图层, 采用自底向上增量开发的设计。Vue
的目标是通过尽可能简单的API
实现响应的数据绑定和组合的视图组件。简单的理解:Vue
就是和jQuery
类似但更强的一个前端框架,它的中心思想就是数据驱动。而jQuery
是结构驱动的,具体来说jQuery
不算框架,而是js
库。 -
Vue.js
是目前最火的一个前端框架,React是最流行的一个前端框架(React除了开发网站,还可以开发手机App
,Vue
语法也是可以用于进行手机App
开发的,需要借助于Weex
) -
Vue.js
是前端的主流框架之一,和Angular.js
、React.js
一起,并成为前端三大主流框架! -
Vue.js
是一套构建用户界面的框架,只关注视图层,它不仅易于上手,还便于与第三方库或既有项目整合。(Vue
有配套的第三方类库,可以整合起来做大型项目的开发)
¶2. 框架和库的区别
-
框架:是一套完整的解决方案;对项目的侵入性较大,项目如果需要更换框架,则需要重新架构整个项目,虽然有这个缺点,但是功能完善。
-
库(插件):提供某一个小功能,对项目的侵入性较小,如果某个库无法完成某些需求,可以很容易切换到其它库实现需求。比如从
Jquery
切换到Zepto
,又比如从EJS
切换到art-template
。
¶3. 为什么要学习前端框架
-
提高开发效率。提高开发效率的发展历程:原生JS ->
Jquery
之类的类库 -> 前端模板引擎 ->Angular.js
/Vue.js
/React.js
(能够帮助我们减少不必要的DOM
操作;提高渲染效率;双向数据绑定的概念【通过框架提供的指令,我们前端程序员只需要关心数据的业务逻辑,不再关心DOM是如何渲染的了】) -
减少少DOM操作。在
Vue
中,一个核心的概念,就是让用户不再操作DOM
元素,解放了用户的双手,让程序员可以更多的时间去关注业务逻辑。
¶4. 前端的MVVM
为了维护和管理前端开发,前端开发一般还要MVVM
的分层开发模式。不要理解成MVC
,MVC
是后端的分层开发概念。而MVVM
是前端视图层的概念,主要关注于视图层分离,也就是说:MVVM
把前端的视图层,分为了 三部分 Model, View , VM (即ViewModel
)。
¶二、安装
¶1. <script>
标签引入vue.js文件
1 | <script src="https://cdn.jsdelivr.net/npm/vue"></script> |
例如:
1 |
|
¶2. 使用NPM工具构建
1 | 最新稳定版 |
¶三、 hello world
app.js
1 | new Vue({ //引入vue包后,浏览器的内存中就多了一个Vue的构造函数,只需要new Vue,就能实例化出Vue对象,该对象就是ViewModel,每当我们创建了一个Vue实例,就创建了一个新的ViewModel。 |
index.html
1 |
|
¶四、数据显示
¶1. 显示文本内容
¶1.1 插值表达式
1 |
|
解决使用插值表达式显示data数据出现闪烁的问题。步骤是,在有插值表达式内容的标签里添加v-cloak
属性,然后添加如下css
样式表即可解决。
1 | <style> |
¶1.2 v-text
与插值表达式功能是一样的。
1 |
|
与插值表达式不同的是不会出现插值表达式的闪烁的问题。原因是v-text会覆盖元素中原本的内容,但是 插值表达式 只会替换自己的这个占位符,不会把 整个元素的内容清空。
如何选择插值表达式和v-text?
如果内容含有data没有的一些字符,那么建议使用插值表达式结合v-cloak
属性使用。
如果内容只有data里的数据,那么建议使用v-cloak
。
¶2. 显示html元素
¶2.1 v-html
作用:用于输出data中的html数据。
1 |
|
使用v-text或者插值表达式只能显示纯文本内容
¶五、属性数据绑定
¶1. 单向数据绑定 v-bind
- 作用:用于给
html
元素的属性绑定数据 - 缩写:
:
- 实现步骤:在原来属性的值里写
vue
中data
的key
,并在原属性前添加"v-bind:
",以此来给属性绑定vue
的数据。 - 数据绑定方式:单向数据绑定,即从
model
自动绑定到view
,view
上绑定的属性数据(值)会随着model
值的改变而改变,但是view
中绑定的属性数据(值)的改变不会改变model中属性的数据(值)。 - 绑定方向:
model
---->view
。 - 作用范围:所有标签元素。
vue
会将元素中属性绑定的key当作是js
表达式返回,所以可以进行合法的运算操作。
1 |
|
¶2. 双向数据绑定 v-model
- 作用:用于给
html
元素的属性绑定数据 - 缩写:
:model
- 实现步骤:在需要表单元素里添加
v-model="data找那个的key"
即可实现双向数据绑定。 - 数据绑定方式:双向数据绑定,即从
model
和view
数据互相绑定,view
上绑定的属性数据(值)会随着model
值的改变而改变,并且view
中绑定的属性数据(值)的改变也会改变model中属性的数据(值)。 - 绑定方向:
model
<---->view
。 - 双向数据绑定不可以进行表达式运算操作。
- 作用范围:
v-model
只能使用在表单元素中,如input(radio, text, address, email....)
、select
checkbox
、textarea
等。
测试单向数据绑定和双向数据绑定的区别
1 |
|
model—>view方向数据变化情况(通过浏览器的控制台操作内存中的vue对象即可改变model中的数据)
model数据未改变时:
model数据改变时:
view—>model方向数据变化情况
input(view)不改变值时的情况:
input(view)改变值时的情况:
从以上两个方向数据的改变即可看出单向数据绑定和双向数据绑定的差异。
¶六、事件绑定
¶1. v-on
作用:事件绑定。
缩写: @
步骤:在原来的事件属性前添加“v-on:
”,并给事件属性赋vue
的data key
。,最后在vue
对象的methods
属性里添加key
对应的方法。
1 |
|
¶2. 事件修饰符
-
.stop
阻止冒泡 冒泡:在多个绑定有事件的元素嵌套中。当触发一个元素时,伴随着嵌套的元素也会触发事件。
-
.prevent
阻止默认事件 -
.capture
添加事件侦听器时使用事件捕获模式 -
.self
只当事件在该元素本身触发时触发回 -
.once
事件只触发一次
¶2.1 阻止冒泡.stop
(冒泡的情况)
1 |
|
(阻止冒泡的情况)
在需要阻止冒泡的的元素vue事件属性后添加.stop
。
1 |
|
¶2.2 阻止默认事件.prevent
1 |
|
¶2.3 添加事件捕获 .capture
1 |
|
¶2.4 只触发当前元素事件 .self
不触发其他嵌套的元素
1 |
|
¶2.5 事件只触发一次.once
作用:事件只触发一次
1 |
|
¶3. 按键修饰符
Vue
默认提供了几个常用的按键码的别名(键盘修饰符):
1 | .enter |
使用方式:
1 | v-on:keyup.键盘修饰符="事件方法()" |
如下:
1 | <!-- 只有在 `key` 是 `Enter` 时调用 `vm.submit()` --> |
如果以上提供的键盘修饰符任然不够用,可以通过以下js代码进行扩展。
1 | // 自定义全局按键修饰符 |
字母和数字键的键码值(keyCode) | |||||||
---|---|---|---|---|---|---|---|
按键 | 键码 | 按键 | 键码 | 按键 | 键码 | 按键 | 键码 |
A | 65 | J | 74 | S | 83 | 1 | 49 |
B | 66 | K | 75 | T | 84 | 2 | 50 |
C | 67 | L | 76 | U | 85 | 3 | 51 |
D | 68 | M | 77 | V | 86 | 4 | 52 |
E | 69 | N | 78 | W | 87 | 5 | 53 |
F | 70 | O | 79 | X | 88 | 6 | 54 |
G | 71 | P | 80 | Y | 89 | 7 | 55 |
H | 72 | Q | 81 | Z | 90 | 8 | 56 |
I | 73 | R | 82 | 0 | 48 | 9 | 57 |
数字键盘上的键的键码值(keyCode) | 功能键键码值(keyCode) | ||||||
---|---|---|---|---|---|---|---|
按键 | 键码 | 按键 | 键码 | 按键 | 键码 | 按键 | 键码 |
0 | 96 | 8 | 104 | F1 | 112 | F7 | 118 |
1 | 97 | 9 | 105 | F2 | 113 | F8 | 119 |
2 | 98 | * | 106 | F3 | 114 | F9 | 120 |
3 | 99 | + | 107 | F4 | 115 | F10 | 121 |
4 | 100 | Enter | 108 | F5 | 116 | F11 | 122 |
5 | 101 | - | 109 | F6 | 117 | F12 | 123 |
6 | 102 | . | 110 | ||||
7 | 103 | / | 111 |
控制键键码值(keyCode) | |||||||
---|---|---|---|---|---|---|---|
按键 | 键码 | 按键 | 键码 | 按键 | 键码 | 按键 | 键码 |
BackSpace | 8 | Esc | 27 | Right Arrow | 39 | -_ | 189 |
Tab | 9 | Spacebar | 32 | Dw Arrow | 40 | .> | 190 |
Clear | 12 | Page Up | 33 | Insert | 45 | /? | 191 |
Enter | 13 | Page Down | 34 | Delete | 46 | `~ | 192 |
Shift | 16 | End | 35 | Num Lock | 144 | [{ | 219 |
Control | 17 | Home | 36 | ;: | 186 | | | 220 |
Alt | 18 | Left Arrow | 37 | =+ | 187 | ]} | 221 |
Cape Lock | 20 | Up Arrow | 38 | ,< | 188 | '" | 222 |
多媒体键码值(keyCode) | |||||||
---|---|---|---|---|---|---|---|
按键 | 键码 | 按键 | 键码 | 按键 | 键码 | 按键 | 键码 |
音量加 | 175 | ||||||
音量减 | 174 | ||||||
停止 | 179 | ||||||
静音 | 173 | ||||||
浏览器 | 172 | ||||||
邮件 | 180 | ||||||
搜索 | 170 | ||||||
收藏 | 171 |
1 |
|
¶七、样式绑定
¶1. class 属性绑定
¶1.1 数组形式
样式名称数组(此时的样式名称是boolean类型)
1 | <div v-bind:class="['active', 'danger']"></div> |
或者
数组中使用三元表达式对样式名称计算
1 | <div v-bind:class="[isActive?'active':'',!'danger']"></div> |
或者
数组中使用对象
1 | <div v-bind:class="[!'danger',{active:isActive}]"></div> |
1 |
|
¶1.2 对象形式
1 | <div v-bind:class="{ key: isActive,danger: false }"></div> |
或者
1 | <div v-bind:class="classObj"></div> |
案例
1 |
|
¶2. style(内联样式)属性绑定
- 在:style中通过key引用data中的样式对象
1 | <h1 :style="styleObj1">这是一个h1</h1> |
- 在:style中通过数组,引用多个data上的样式对象
1 | <h1 :style="[ styleObj1, styleObj2 ]">这是一个h1</h1> |
案例:
1 |
|
¶八、遍历v-for
1 |
|
¶九、条件判断
¶1. v-if
v-if 指令将根据表达式的值(true 或 false )来决定是否插入绑定的元素。
1 |
|
¶2. v-if、v-else和v-else-if
1 |
|
¶3. v-show
根据条件展示或者隐藏元素(而不是像v-if那样插入或者删除元素)
1 |
|
¶4. v-if和v-show的区别
1 |
|
¶十、基础语法要点总结
1 | 1. MVC 和 MVVM 的区别 |
¶十一、过滤器
概念:Vue.js 允许自定义过滤器,可被用作一些常见的文本格式化。过滤器可以用在两个地方:插值表达式和 v-bind 表达式。过滤器应该被添加在 JavaScript 表达式的尾部,由**“管道”**符指示。
过滤器调用的格式:
1 | {{ name | 过滤器的名称(实参列表) }} |
过滤器的定义语法:
- 全局过滤器
1 | Vue.filter('过滤器的名称', function(过滤器的参数列表){ |
- 私有(局部)过滤器
1 | filters: { |
第一个参数是管道前的内容,第二个之后的参数是过滤器调用方法的实参列表。
¶1. 全局过滤器
对所有VM
对象所控制的 View
区域都起作用。
1 |
|
¶2. 私有过滤器
私有(局部)过滤器。只能在当前 VM 对象所控制的 View 区域起作用
1 |
|
¶十二、自定义指令
除了核心功能默认内置的指令 (v-model
和 v-show
),Vue
也允许注册自定义指令。
实现自定义指令可以是全局的,也可以是局部的。全局指的是所有vue
对象的控制区域,局部指的是当前定义指令所在vue
对象的控制区域。
案例:用指令来实现开页面后还没点击过任何内容,输入框就处于聚焦状态,并且要求用指令实现输入的内容颜色为可变实参。
1 |
|
¶十三、vue实例的生命周期
¶1. 概念
- 什么是生命周期:从Vue实例创建、运行、到销毁期间,总是伴随着各种各样的事件,这些事件,统称为生命周期!
- 生命周期钩子:就是生命周期事件的别名;
- 生命周期钩子 = 生命周期函数 = 生命周期事件
¶2. 生命周期函数分类
-
创建期间的生命周期函数
1
2
3
4(1)beforeCreate //实例刚在内存中被创建出来,此时,还没有初始化好 data 和 methods 属性
(2)created //实例已经在内存中创建OK,此时 data 和 methods 已经创建OK,此时还没有开始 编译模板
(3)beforeMount //此时已经完成了模板的编译,但是还没有挂载到页面中
(4)mounted //此时,已经将编译好的模板,挂载到了页面指定的容器中显示
-
运行期间的生命周期函数
1
2(1)beforeUpdate //状态更新之前执行此函数, 此时 data 中的状态值是最新的,但是界面上显示的 数据还是旧的,因为此时还没有开始重新渲染DOM节点
(2)updated //实例更新完毕之后调用此函数,此时 data 中的状态值 和 界面上显示的数据,都已经完成了更新,界面已经被重新渲染好了!
-
销毁期间的生命周期函数
1
2(1)beforeDestroy //实例销毁之前调用。在这一步,实例仍然完全可用。
(2)destroyed //Vue 实例销毁后调用。调用后,Vue 实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁。
¶十四、http数据请求
vue实现http数据请求有很多种第三方包可以实现。主要有两种插件包可以使用。
¶1. vue-resource
下载地址:https://github.com/pagekit/vue-resource
以get请求举例:
1 | { |
按照作用域可分为:
1 | // global Vue object |
其他请求方式:
1 | get(url, [config]) |
更多教程参考官方文档https://github.com/pagekit/vue-resource/blob/develop/docs/http.md
¶2. axios
这是重点,在后面的脚手架工程中另作介绍…
¶十五、基于脚手架的vue工程
工程搭建步骤
¶1. 安装node.js
官网下载最新版本后默认next傻瓜式安装完成。
¶2. 安装cnpm
为了npm下载包更快更流畅,可以改用国内淘宝镜像工具cnpm
1 | npm install -g cnpm --registry=https://registry.npm.taobao.org |
¶3. 安装webpack
1 | cnpm install webpack -g |
¶4. 安装vue脚手架(命令行工具)
使用node自带的npm包管理器安装vue-cli
1 | npm install vue-cli -g |
更多npm命令详解:
1 | #安装包 |
¶5. 建立工程
¶5.1 方式1 使用webpack创建工程
1 | vue init webpack demo1 #demo1是工程名字,工程名字不能用中文 |
等待工程初始化并下载依赖包,构建完成后,执行以下命令
1 | cd demo1 #进入工程项目 |
¶5.2 方式2 使用vue脚手架创建工程
5.2.1 根据模板创建项目
1 | vue init webpack-simple demo2 #demo2是工程目录的名字,工程名字不能用中文,如果不加工程名,则默认以当前目录作为工程目录 |
相比于方式1步骤更简单,省略了很多提示步骤
等待工程初始化并下载依赖包,构建完成后,执行以下命令
1 | cd demo2 |
¶6. 工程目录和文件介绍
以上面第二种方式创建的工程做介绍
¶6.1 工程目录
1 | . |
¶6.2 重要工程文件详解
inde.html
1 | <!-- 首页入口文件 --> |
main.js
1 | /** |
App.vue
1 | <!-- |
¶7. 单文件组件
.vue
文件,称为单文件组件,是Vue.js
自定义的一种文件格式,一个.vue
文件就是一个单独的组件,在文件内封装了组件相关的代码:html
、css
、js
。
.vue组件文件由三部分组成:
-
模版
<template>
-
js脚本
<script>
-
样式
<style>
1 | /** |
App.css
1 | *{ |
App.js
1 | alert("执行app.js"); |
App.vue
1 | <template> |
Home.vue
1 | <template> |
¶8. 组件的数据交互
¶8.1.组件间传值
¶8.1.1 父组件传子组件
(1).在父组件设置prop绑定动态属性或者静态属性。
设父组件的数据为:
1 | <v-content home2content="静态传的prop数据" v-bind:user="user" v-bind:homefuc="homefuc" v-bind:home="homeobj"/> |
其中home2content是静态字符串属性,user是动态对象属性,homefuc是动态方法属性,home是动态对象属性
(2) 在子组件通过props数组或者对象属性接收父组件传过来的数据。
- props数组:
1 | props: ["user", "home2content","homefuc","home"] |
-
props对象:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15props: { //在子组件通过props对象属性接收父组件可以验证传来的数据
"user":Object,
"home2content":{
type:String, //验证数据类型
required: true, //必填的字符串
default: 'xxxxx' 带有默认值
},
// 自定义验证函数
propF: {
validator: function (value) {
// 这个值必须匹配下列字符串中的一个
return ['success', 'warning', 'danger'].indexOf(value) !== -1
}
}
}
(3) 在子组件的<template>
或者<script>
直接引用
1 | <template> |
¶8.1.2 子组件传父组件
(1).在父组件中:
- (1.1)在父组件中定义有参函数
1 | 函数名: function(value) { |
-
(1.2)设置prop绑定动态方法属性。
1
<v-content v-bind:函数名="函数名"/>
(2).在子组件中:
- (2.1)通过props数组或者对象属性接收父组件传过来的数据
1 | props: ["函数名"] |
- (2.2)子组件调用父组件方法的同时传入子组件的数据到方法的实参
1 | 函数名(子组件的数据) |
¶8.1.3 非父子组件传值(通过事件广播的方式实现)
(1)首先新建一个js文件,在文件中实例一个Vue对象,并暴露出来,内容为:
1 | import Vue from 'vue' |
(2) 在发送数据的组件中引用以上js文件,并发起事件广播
- (2.1)引用js文件:
1 | import vueEvent from 'js文件路径' |
- (2.2)发起事件广播
1 | vueEvent.$emit('广播名称',数据); //发送广播 |
(3) 在接收方组件的生命周期函数(如mounted)中监听广播事件
1 | vueEvent.$on('广播名称',function(data){ //监听广播事件,function(data)中的data就是监听到的数据 |
¶8.2 主动获取数据
就是不需要在传入方通过绑定属性的方式传值
¶8.2.1父组件主动获取子组件数据方式:
(1)在调用子组件的时候定义ref属性
1 | <v-content ref="任意变量名"/> |
(2)在父组件通过以下方式获取子组件的值
1 | this.$refs.content.子组件属性 |
¶8.2.2子组件主动获取父组件数据方式:
在子组件中通过以下方式获取父组件的数据(不需要定义ref属性)
1 | this.$parent.父组件属性 |
¶8.3 vuex
如果多个组件依赖于同一状态。传参的方法对于多层嵌套的组件和兄弟组件会非常繁琐。这时有必要学习vuex,来解决这个问题。
Vuex
是一个专为Vue.js
应用程序开发的状态管理模式。
主要作用是:
- 解决不同组件间同一状态(数据)共享问题。
- 组件的数据持久化
¶8.3.1 安装vuex
1 | npm install vuex --save |
¶8.3.2 引入和注册vuex
在main.js
中引入 vuex
1 | import Vue from 'vue' |
¶8.3.3 创建和使用数据仓库
该文件的主要功能就是提供给各个组件一个数据交互中心(数据仓库),数据仓库里主要包含数据项和操作数据的方法。原理是注册store
到Vue
中,各个组件通过引入数据仓库文件后,就可通过 this.$store
访问到store
中的数据和方法了。
例如:
- (1)state和mutations的使用
数据仓库文件store.js
1 | /*1.导入并注册Vuex到Vue中*/ |
组件1:About.vue
1 | <template> |
组件2: Home.vue
1 | <template> |
效果:
- (2)getters和actions的使用
数据仓库文件store.js
1 | /*1.导入并注册Vuex到Vue中*/ |
组件1 Home.vue:
1 | <template> |
组件2 About.vue:
1 | <template> |
效果:
¶9. 路由
官网教程https://router.vuejs.org/zh/
控制组件之间的跳转,不会请求页面、不用页面刷新,直接跳转-切换组件
安装:
1 | cnpm install vue-router --save |
¶9.1 普通路由
Home.vue
1 | <template> |
About.vue
1 | <template> |
main.js
1 | import Vue from 'vue' |
App.vue
1 | <template> |
¶9.2 带有嵌套关系的路由
Home.vue
1 | <template> |
About.vue
1 | <template> |
Login.vue
1 | <template> |
Register.vue
1 | <template> |
routes.js
1 | import VueRouter from 'vue-router' // 1. 导入 vue-router 包,安装方法:cnpm install vue-router --save |
main.js
1 | import Vue from 'vue' |
App.vue
1 | <template> |
Account.vue
1 | <template> |
¶10. axios
¶10.1 简介
Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。
- 从浏览器中创建 XMLHttpRequests
- 从 node.js 创建 http 请求
- 支持 Promise API
- 拦截请求和响应
- 转换请求数据和响应数据
- 取消请求
- 自动转换 JSON 数据
- 客户端支持防御 XSRF
¶10.2 安装
1 | npm install --save axios |
¶10.3 使用
导入包
1 | import Axios from "axios"; |
请求:
1 | Axios.get("api_url") |
简单案例
AxiosDemo.vue
1 | <template> |
¶10.4 vue-axios
vue-axios是用于将axios集成到Vuejs的小包装器,作用是扩展Vue对象的功能,即让Vue对象具有axios功能,相对原生使用vue-axios会带来更多的便利。
安装:
1 | npm install --save vue-axios |
使用:
导入vue、axios、vue-axios三个包
1 | import Axios from "axios"; |
安装VueAxios和Axios到Vue中
1 | Vue.use(VueAxios, Axios); |
请求使用
1 | Vue.axios.get(api).then((response) => { |
案例:
VueAxiosDemo.vue
1 | <template> |
¶11. element-ui
官网:https://element.eleme.io/#/zh-CN
¶11.1 安装element-ui
1 | npm i element-ui -S |
¶11.2 引入element-ui和element的css
1 | import ElementUI from 'element-ui' //完整引入所有的element-ui |
¶11.3 Vue安装element-ui
1 | Vue.use(ElementUI) |
¶11.4 配置webpack的loader规则
element-ui
的css
文件中会使用到ttf
文件,所以需要到webpack.config.js
中配置以下loader
规则
1 | { |
¶11.5 使用
例如使用element-ui的标签,可以在App.vue的template中加入
1 | <el-tag>element-ui标签</el-tag> |
以上关系到的文件大概如下:
main.js
1 | import Vue from 'vue' |
webpack.config.js
1 | var path = require('path') |
App.vue
1 | <template> |
效果如下图:
¶11.6 按需引入
(1)安装element-ui
1 | npm i element-ui -S |
(2)除了安装element-ui还需要安装 babel-plugin-component
1 | npm install babel-plugin-component -D |
(3) 配置webpack的loader规则
element-ui
的css
文件中会使用到ttf
文件,所以需要到webpack.config.js
中配置以下loader
规则
1 | { |
(4)修改.babelrc
配置文件
将原来的
1 | { |
改为以下:
1 | { |
(5)简单使用
如果只需要用到按钮和标签,那么可以通过以下实现按需引入
1 | import Vue from 'vue' |
注:按需引入element-ui时,element-ui的样式文件可以不用引入
完整文件如下:
App.vue
1 | <template> |
效果如下:
¶13. 插槽slot
作用:父组件将不同的内容分发给多个同名的子组件,即填充内容到子组件的插槽中。
Vue的插槽slot,分为3种
1.匿名插槽
2.具名插槽
3.作用域插槽
一般都会开发好插槽子组件后提供给其他人使用,其他人只要在自己的父组件中引入这个带有插槽的子组件标签后,在子组件标签里自定义自己的内容,如此就能实现相应的功能。
1.默认插槽
Child1.vue
1 | <template> |
2.具名插槽
Child2.vue
1 | <template> |
3.作用域插槽
Child3.vue
1 | <template> |
Father.vue
1 | <template> |