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 相关文章推荐
innerHTML,outerHTML,innerTEXT三者之间的区别
Jan 28 Javascript
JS 强制设为首页的代码
Jan 31 Javascript
js 数值项目的格式化函数代码
May 14 Javascript
举例详解Python中smtplib模块处理电子邮件的使用
Jun 24 Javascript
jQuery实现向下滑出的二级菜单效果实例
Aug 22 Javascript
微信企业号开发之微信考勤Cookies的使用
Sep 11 Javascript
用js读写cookie的简单方法(推荐)
Aug 08 Javascript
vue-cli+webpack记事本项目创建
Apr 01 Javascript
用React实现一个完整的TodoList的示例代码
Oct 30 Javascript
ES6解构赋值实例详解
Oct 31 Javascript
深入理解vue中slot与slot-scope的具体使用
Jan 26 Javascript
详解Vue结合后台的列表增删改案例
Aug 21 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中的 == 运算符进行字符串比较
2006/11/26 PHP
php面向对象全攻略 (九)访问类型
2009/09/30 PHP
php生成静态页面的简单示例
2014/04/17 PHP
浅谈ThinkPHP中initialize和construct的区别
2017/04/01 PHP
如何通过View::first使用Laravel Blade的动态模板详解
2017/09/21 PHP
PHP排序算法之冒泡排序(Bubble Sort)实现方法详解
2018/04/20 PHP
JQuery插件开发示例代码
2013/11/06 Javascript
多选列表框动态添加,移动,删除,全选等操作的简单实例
2014/01/13 Javascript
js点击按钮实现带遮罩层的弹出视频效果
2015/12/19 Javascript
Vue.js每天必学之方法与事件处理器
2016/09/06 Javascript
JS实现的走迷宫小游戏完整实例
2017/07/19 Javascript
js与jQuery实现的用户注册协议倒计时功能实例【三种方法】
2017/11/09 jQuery
Vue自定义指令实现checkbox全选功能的方法
2018/02/28 Javascript
详解React项目的服务端渲染改造(koa2+webpack3.11)
2018/03/19 Javascript
基于node.js实现爬虫的讲解
2019/02/18 Javascript
layui异步加载table表中某一列数据的例子
2019/09/16 Javascript
vue swipeCell滑动单元格(仿微信)的实现示例
2020/09/14 Javascript
Python检测一个对象是否为字符串类的方法
2015/05/21 Python
详解Python使用simplejson模块解析JSON的方法
2016/03/24 Python
Collatz 序列、逗号代码、字符图网格实例
2017/06/22 Python
Python 基础教程之闭包的使用方法
2017/09/29 Python
Python sorted函数详解(高级篇)
2018/09/18 Python
解决python3 Pycharm上连接数据库时报错的问题
2018/12/03 Python
关于PyTorch 自动求导机制详解
2019/08/18 Python
python中time库的实例使用方法
2019/10/31 Python
python读取excel数据绘制简单曲线图的完整步骤记录
2020/10/30 Python
找到不普通的东西:Bonanza
2016/10/20 全球购物
欧洲领先的火车票和大巴票预订平台:Trainline
2018/12/26 全球购物
澳大利亚音乐商店:Bava’s Music City
2019/05/05 全球购物
Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型
2013/10/30 面试题
电工工作职责范本
2014/02/22 职场文书
政府会议通知范文
2015/04/15 职场文书
公共场所卫生管理制度
2015/08/05 职场文书
八年级物理教学反思
2016/02/19 职场文书
利用Selenium添加cookie实现自动登录的示例代码(fofa)
2021/05/08 Python
golang连接MySQl使用sqlx库
2022/04/14 Golang