博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
从零实现Vue的组件库(五)- Breadcrumb 实现
阅读量:6823 次
发布时间:2019-06-26

本文共 1898 字,大约阅读时间需要 6 分钟。

显示当前页面的路径,快速返回之前的任意页面。

该组件的痛点在于:
  • 采用vnode设定扩展性较好的分隔符;
  • 利用vue-router高亮已选中的路径。

1. 实例

代码

/*const _h = this.$createElement;const separatorComponent = _h("fat-icon", { props: { name: "keyboard_arrow_right" }});*/
复制代码

实例地址:

代码地址:

2. 原理

由于分隔符要采用vnode的形式,所以该组件采用函数式来实现。其基本结构如下

export default {    functional: true,    props: {        paths: {            type: Array,            default: () => []        },        // String分隔符        separator: {            type: String,            default: '/'        },        // Vnode分隔符        separatorComponent: {            type: Object        }    },    render: function (_h, context) {        ...    }}复制代码

定义props中包含路径、分隔符,然后render function的实现为,

render: function (_h, context) {    const {        props: {            paths,            separator,            separatorComponent        }    } = context    // 遍历paths生成对应的child elements    let elements = paths.map(path => {        const {            label,            to        } = path        // 如果路径to存在,则利用router-link component        const element = to ? 'router-link' : 'span'        const props = to ? {            to        } : {}        // return element vnode        return _h(element, {            'class': {                'breadcrumb-item': true            },            props        }, label)    })    return _h('div', {        'class': {            'breadcrumb': true        }    }, elements)}复制代码

利用vue-router的,,来实现,游览过的路径高亮:

  • active-class:链接激活时使用的 CSS 类名;
  • exact-active-class:链接被精确匹配的时候激活的 CSS 类名。

3. 使用

使用时,主要注意点是separatorComponent组件分隔符的构建,提供一种相对合理的方法,在Breadcrumb的父组件data中,完成vnode的创建工作。

data() {    const _h = this.$createElement;    return {        separatorComponent: _h("fat-icon", {            props: {                name: "keyboard_arrow_right"            }        })    }}复制代码

PS:此时data不能为箭头函数。

4. 总结

封装一个Breadcrumb组件,将vnode作为分隔符,方便其拓展。

往期文章:

原创声明: 该文章为原创文章,转载请注明出处。

你可能感兴趣的文章
Eclipse设置:背景与字体大小和xml文件中字体大小调整
查看>>
c++强制类型转换(总结)
查看>>
H3C S5500 配置范例
查看>>
工具05:XShell
查看>>
SQL分割字符串详解
查看>>
Apache+Resin整合搭建JSP环境
查看>>
【C/C++学院】(4)c++开篇/类和对象/命名空间/类型增强/三目运算符/const专题/引用专题/函数增强...
查看>>
【踩坑经历】一次Asp.NET小网站部署踩坑和解决经历
查看>>
通过python切换hosts文件
查看>>
iOS8新特性扩展(Extension)应用之四——自定义键盘控件
查看>>
窥探Swift之函数与闭包的应用实例
查看>>
数据对接—kettle使用之九
查看>>
tableVIew删除时的delete按钮被挡住时重写的方法
查看>>
【AIX 命令学习】mkdev -l 设置逻辑卷
查看>>
[curl-loader]faststart新压力测试工具
查看>>
政策 |《关于组织实施促进大数据发展重大工程》的通知
查看>>
java抽象类与接口的区别
查看>>
自建JS代码库(1)---添加用户的常用验证
查看>>
Module Thinking之路径依赖
查看>>
opensource ERD (entity relation diagram) - pgModeler for PostgreSQL
查看>>