iview 升级指南 —— MenuItem 篇

本文主要探讨了iView 3.0 MenuItem组件的升级,新特性是支持链接模式。文章指出MenuItem存在的代码重复、不符合HTML标准和父子组件通信问题,并对这些问题进行了深入分析。作者建议使用computed属性和Vue的provide/inject特性来优化设计,减少耦合性。
摘要由CSDN通过智能技术生成

iview 在今年 7 月 28 号发布了 3.0.0 版本,大版本升级往往意味着功能、接口的大变更。 虽然官网已经有长长的更新日志,但看起来还是有些抽象了, 所以我决定做个新旧版本的比较,盘点新版本到底为我们带来了什么新特性。

本篇是系列文章的第三篇,重点并不在介绍 MenuItem 的功能特性,而在于对其代码的讨论; 对其设计的思考。 班门弄斧,见谅。

唯一新增的特性 —— 支持链接模式

循例是该先聊聊新特性的。Menu 有四个关联的组件,分别为:Menu、MenuItem、SubMenu、MenuGroup, 这些组件的新旧版本之间并没有太大差异,向后兼容的很好,理论上可以平滑升级。 新版本只有 MenuItem 增加了一个特性:支持链接模式,可以通过向组件传入 to 属性启用,效果与 链接模式的 Button 完全一样,这里就不赘述了。

问题

MenuItem 是一个非常非常简单的组件,一开始觉得并没有太多好写的,细细看了代码...个人感觉问题不少,还是有必要单独写一篇文章聊聊的。

问题一: 代码重复

首先,依然是代码重复的问题,在 Button 篇中 我们已经见识了一些无意义的重复,在 MenuItem 组件中也是不遑多让啊:

<template>
    <a
        v-if="to"
        :href="linkUrl"
        :target="target"
        :class="classes"
        @click.exact="handleClickItem($event, false)"
        @click.ctrl="handleClickItem($event, true)"
        @click.meta="handleClickItem($event, true)"
        :style="itemStyle"><slot></slot></a>
    <li v-else :class="classes" @click.stop="handleClickItem" :style="itemStyle"><slot></slot></li>
</template>
复制代码

这段模板有两处重复,一是标签,二是事件绑定。

1. 重复的标签定义

模板中,通过判断 to 属性,确定需要渲染的标签类型,用于兼容新增的链接模式,这种写法很符合直觉,但有另一种更优雅的方案:is特性,同样的功能,用 is 实现:

/* 模拟MenuItem组件 */
Vue.component("MenuItem", {
  name: "MenuIte
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值