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 相关文章推荐
JavaScript之appendChild、insertBefore和insertAfter使用说明
Dec 30 Javascript
ExtJS4 Grid改变单元格背景颜色及Column render学习
Feb 06 Javascript
assert()函数用法总结(推荐)
Jan 25 Javascript
纯js三维数组实现三级联动效果
Feb 07 Javascript
你真的了解BOM中的history对象吗
Feb 13 Javascript
jQuery实现表格冻结顶栏效果
Aug 20 jQuery
Webpack优化配置缩小文件搜索范围
Dec 25 Javascript
解决Vue不能检测数组或对象变动的问题
Feb 24 Javascript
React Native悬浮按钮组件的示例代码
Apr 05 Javascript
浅谈微信页面入口文件被缓存解决方案
Sep 29 Javascript
JavaScript语句错误throw、try及catch实例解析
Aug 18 Javascript
JavaScript 中for/of,for/in 的详细介绍
Nov 17 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 goto语句简介和使用实例
2014/03/11 PHP
ThinkPHP实现将SESSION存入MYSQL的方法
2014/07/22 PHP
Laravel框架使用Redis的方法详解
2018/05/30 PHP
通过PHP实现用户注册后邮箱验证激活
2020/11/10 PHP
JavaScript replace(rgExp,fn)正则替换的用法
2010/03/04 Javascript
jquery 关键字“拖曳搜索”之“拖曳”以及 图片“提示自适应放大”效果 的实现
2010/04/18 Javascript
js将json格式内容转换成对象的方法
2013/11/01 Javascript
jquery中animate的stop()方法作用实例分析
2015/01/30 Javascript
Bootstrap学习笔记之js组件(4)
2016/06/12 Javascript
JS原型链怎么理解
2016/06/27 Javascript
浅谈JQ中mouseover和mouseenter的区别
2016/09/13 Javascript
Vue数据驱动模拟实现3
2017/01/11 Javascript
详解vue-cli + webpack 多页面实例应用
2017/04/25 Javascript
Javascript Dom元素获取和添加详解
2019/09/24 Javascript
15分钟学会vue项目改造成SSR(小白教程)
2019/12/17 Javascript
2分钟实现一个Vue实时直播系统的示例代码
2020/06/05 Javascript
vue 通过 Prop 向子组件传递数据的实现方法
2020/10/30 Javascript
[02:57]2014DOTA2国际邀请赛-观众采访
2014/07/19 DOTA
kNN算法python实现和简单数字识别的方法
2014/11/18 Python
TF-IDF算法解析与Python实现方法详解
2017/11/16 Python
python多线程下信号处理程序示例
2019/05/31 Python
python五子棋游戏的设计与实现
2019/06/18 Python
python递归法解决棋盘分割问题
2019/07/17 Python
Python 3.8 新功能全解
2019/07/25 Python
Python 爬虫实现增加播客访问量的方法实现
2019/10/31 Python
韩国爱茉莉太平洋化妆品美国站:Amore Pacific US
2016/10/28 全球购物
西班牙最好的在线购买葡萄酒的商店:Vinoseleccion
2019/10/30 全球购物
购房意向书
2014/04/01 职场文书
遵纪守法演讲稿
2014/05/23 职场文书
中国合伙人观后感
2015/06/02 职场文书
聘任通知书
2015/09/21 职场文书
高中团支书竞选稿
2015/11/21 职场文书
致毕业季:你如何做好自己的职业生涯规划书?
2019/07/01 职场文书
七年级作文之雪景
2019/11/18 职场文书
JavaScript中isPrototypeOf函数
2021/11/07 Javascript
MySQL中IO问题的深入分析与优化
2022/04/02 MySQL