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键盘事件的keyCode
Jul 29 Javascript
jquery中键盘事件小结
Feb 24 Javascript
JavaScript中的事件委托及好处
Jul 12 Javascript
利用python分析access日志的方法
Oct 26 Javascript
JavaScript中全选、全不选、反选、无刷新删除、批量删除、即点即改入库(在yii框架中操作)的代码分享
Nov 01 Javascript
js实现HashTable(哈希表)的实例分析
Nov 21 Javascript
Validform验证时可以为空否则按照指定格式验证
Oct 20 Javascript
JavaScript数组push方法使用注意事项
Oct 30 Javascript
简单的Vue异步组件实例Demo
Dec 27 Javascript
前端Electron新手入门教程详解
Jun 21 Javascript
一文看懂如何简单实现节流函数和防抖函数
Sep 05 Javascript
详解JavaScript的this指向和绑定
Sep 08 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的array数组和使用实例简明教程(容易理解)
2014/03/20 PHP
ThinkPHP使用smarty模板引擎的方法
2014/07/01 PHP
PHP判断一个gif图片是否为动态图片的方法
2014/11/19 PHP
Apache启动报错No space left on device: AH00023该怎么解决
2015/10/16 PHP
PHP使用GD库制作验证码的方法(点击验证码或看不清会刷新验证码)
2017/08/15 PHP
PHP sdk文档处理常用代码示例解析
2020/12/09 PHP
jquery ready函数源代码研究
2009/12/06 Javascript
JavaScript学习历程和心得小结
2010/08/16 Javascript
jQuery学习笔记 操作jQuery对象 属性处理
2012/09/19 Javascript
js中的数组Array定义与sort方法使用示例
2013/08/29 Javascript
JS获取select-option-text_value的方法
2013/12/26 Javascript
jQuery树形下拉菜单特效代码分享
2015/08/15 Javascript
jquery如何获取元素的滚动条高度等实现代码
2015/10/19 Javascript
在Linux系统中搭建Node.js开发环境的简单步骤讲解
2016/01/26 Javascript
jQuery插件实现可输入和自动匹配的下拉框
2016/10/24 Javascript
AngularJS+Bootstrap实现多文件上传与管理
2016/11/08 Javascript
jquery 实现复选框的全选操作实例代码
2017/01/24 Javascript
jQury Ajax使用Token验证身份实例代码
2017/09/22 Javascript
使用Vue.js和Flask来构建一个单页的App的示例
2018/03/21 Javascript
微信小程序实现蒙版弹出窗功能
2019/09/17 Javascript
JavaScript中的执行环境和作用域链
2020/09/04 Javascript
Python多进程同步简单实现代码
2016/04/27 Python
node.js获取参数的常用方法(总结)
2017/05/29 Python
详解Python 实现元胞自动机中的生命游戏(Game of life)
2018/01/27 Python
python3利用Socket实现通信的方法示例
2019/05/06 Python
pytorch获取vgg16-feature层输出的例子
2019/08/20 Python
tensorflow的ckpt及pb模型持久化方式及转化详解
2020/02/12 Python
使用python对excel表格处理的一些小功能
2021/01/25 Python
CSS3绘制六边形的简单实现
2016/08/25 HTML / CSS
使用canvas压缩图片上传的方法示例
2020/02/07 HTML / CSS
html2canvas生成的图片偏移不完整的解决方法
2020/05/19 HTML / CSS
建设投标担保书
2014/05/13 职场文书
2014最新预备党员思想汇报范文:中国梦,我的梦
2014/10/25 职场文书
刑事附带民事上诉状
2015/05/23 职场文书
python - timeit 时间模块
2021/04/06 Python
Golang并发工具Singleflight
2022/05/06 Golang