Vue.js实战之组件的进阶


Posted in Javascript onApril 04, 2017

一、基本用法

在使用 vue-cli 创建的项目中,组件的创建非常方便,只需要新建一个 .vue 文件,然后在 <template> 中写好 HTML 代码,一个简单的组件就完成了

Vue.js实战之组件的进阶 

一个完整的组件,除了 <template> 以外,还有 <script> 和 <style>

需要注意的是,<script> 中的 data 必须是函数

Vue.js实战之组件的进阶 

然后在其他文件的 js 里面引入并注册,就能直接使用这个组件了

Vue.js实战之组件的进阶

Vue.js实战之组件的进阶

二、使用 slot 分发内容

开发过程中,常常需要在子组件内添加新的内容,这时候可以在子组件内部留一个或者多个插口 <slot>

Vue.js实战之组件的进阶

然后在调用这个子组件的时候加入内容

Vue.js实战之组件的进阶

添加的内容就会分发到对应的 <slot> 中

<slot> 中还可以作为一个作用域,在子组件中定义变量,然后在父组件中自定义渲染的方式

Vue.js实战之组件的进阶 

Vue.js实战之组件的进阶

这个示例中,首先在子组件中添加 <slot>,并在子组件中定义了数组变量 navs

然后在父组件中以作用域 <template> 添加内容,其中 scope 是固有元素,它的值对应一个临时变量 props

而 props 将接收子组件中,所有绑定的属性(如 text)

三、动态组件

Vue 还可以将多个子组件,都挂载在同一个位置,通过变量来切换组件,实现 tab 菜单这样的效果

Vue.js实战之组件的进阶

这样的功能可以通过路由 vue-router 实现,但路由更适合较大的组件,而且 url 会有相应的改变

Vue 自身保留的 <component> 元素,可以将组件动态绑定到 is 特性上,从而很方便的实现动态组件切换

Vue.js实战之组件的进阶

上例中,当 tabView 的值改变,<component> 就会渲染对应的组件,和路由的效果十分类似,但是地址栏并没有发生改变

但这样一来,每次切换组件都会重新渲染,无法保留组件上的数据。这时可以使用 keep-alive 将组件保留在内存中,避免重新渲染

Vue.js实战之组件的进阶

Vue.js实战之组件的进阶 

四、递归组件

当组件拥有 name 属性的时候,就可以在它的模板内递归的调用自己,这在开发树形组件的时候十分有效

Vue.js实战之组件的进阶

上面是一个子组件,定义了 name 为 simple03,然后在模板中调用自身,结合 v-for 实现递归

为了防止出现死循环,在调用自身的时候,加入了 v-if 作为判定条件

父组件中调用的时候,需要通过 props 传入一个 tree:

Vue.js实战之组件的进阶

Vue.js实战之组件的进阶 

最终渲染结果:

Vue.js实战之组件的进阶

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
使用JS操作页面表格,元素的一些技巧
Feb 02 Javascript
jquery在IE、FF浏览器的差别详细探讨
Apr 28 Javascript
javascript数字时钟示例分享
Apr 23 Javascript
简述JavaScript中正则表达式的使用方法
Jun 15 Javascript
CSS javascript 结合实现悬浮固定菜单效果
Aug 23 Javascript
js图片轮播特效代码分享
Sep 07 Javascript
借助node实战JSONP跨域实例
Mar 30 Javascript
JavaScript折半查找(二分查找)算法原理与实现方法示例
Aug 06 Javascript
使用iView Upload 组件实现手动上传图片的示例代码
Oct 01 Javascript
vue2.0 获取从http接口中获取数据,组件开发,路由配置方式
Nov 04 Javascript
Paypal支付不完全指北
Jun 04 Javascript
解决vue安装less报错Failed to compile with 1 errors的问题
Oct 22 Javascript
关于axios返回空对象的问题解决
Apr 04 #Javascript
jQuery自定义图片上传插件实例代码
Apr 04 #jQuery
jQuery使用unlock.js插件实现滑动解锁
Apr 04 #jQuery
利用jquery正则表达式在页面验证url网址输入是否正确
Apr 04 #jQuery
JavaScript实现实时更新系统时间的实例代码
Apr 04 #Javascript
jQuery中animate()的使用方法及解决$(”body“).animate({“scrollTop”:top})不被Firefox支持的问题
Apr 04 #jQuery
webpack独立打包和缓存处理详解
Apr 03 #Javascript
You might like
PHP utf-8编码问题,utf8编码,数据库乱码,页面显示输出乱码
2013/04/08 PHP
php统计时间和内存使用情况示例分享
2014/03/13 PHP
php生成shtml类用法实例
2014/12/09 PHP
PHP中trim()函数简单使用指南
2015/04/16 PHP
php根据年月获取当月天数及日期数组的方法
2016/11/30 PHP
Laravel5.5新特性之友好报错以及展示详解
2017/08/13 PHP
PHP PDOStatement::fetchColumn讲解
2019/01/31 PHP
PHP中localeconv()函数的用法
2019/03/26 PHP
Laravel使用模型实现like模糊查询的例子
2019/10/24 PHP
PJ Blog修改-禁止复制的代码和方法
2006/10/25 Javascript
js获取class的所有元素
2013/03/28 Javascript
cookie的复制与使用记住用户名实现代码
2013/11/04 Javascript
获取当前点击按钮的id用this.id实现
2014/03/17 Javascript
javascript函数式编程实例分析
2015/04/25 Javascript
AngularJS基础 ng-keyup 指令简单示例
2016/08/02 Javascript
AngularJs bootstrap搭载前台框架——基础页面
2016/09/01 Javascript
AngularJs ng-repeat 嵌套如何获取外层$index
2016/09/21 Javascript
简单通过settimeout看javascript的运行机制
2019/05/10 Javascript
[02:57]DOTA2英雄基础教程 风行者
2014/01/16 DOTA
python实现k均值算法示例(k均值聚类算法)
2014/03/16 Python
Python批量按比例缩小图片脚本分享
2015/05/21 Python
基于python 二维数组及画图的实例详解
2018/04/03 Python
python中的decorator的作用详解
2018/07/26 Python
Python使用Shelve保存对象方法总结
2019/01/28 Python
Flask配置Cors跨域的实现
2019/07/12 Python
通过python扫描二维码/条形码并打印数据
2019/11/14 Python
详解python tkinter包获取本地绝对路径(以获取图片并展示)
2020/09/04 Python
Python实现自动装机功能案例分析
2020/10/22 Python
利用Python函数实现一个万历表完整示例
2021/01/23 Python
Sephora丝芙兰印尼官方网站:购买化妆品和护肤品
2018/07/02 全球购物
竞聘书怎么写,如何写?
2014/03/31 职场文书
质量提升方案
2014/06/16 职场文书
个人催款函范文
2015/06/24 职场文书
如何使用Maxwell实时同步mysql数据
2021/04/08 MySQL
Python类方法总结讲解
2021/07/26 Python
浅析Python中的随机采样和概率分布
2021/12/06 Python