前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >如何动态更改Element-UI组件尺寸以及源码分析

如何动态更改Element-UI组件尺寸以及源码分析

作者头像
前端黑板报
发布于 2020-06-16 07:11:03
发布于 2020-06-16 07:11:03
4.5K00
代码可运行
举报
文章被收录于专栏:前端黑板报前端黑板报
运行总次数:0
代码可运行

这篇文章源于一个问题:

如何更改尺寸?

我看了只有一个回答,貌似答的也不对,下面说一下我的答案,其实是 vue-element-admin 的实现方案:

在 Vue 项目入口文件中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Vue.use(Element, {
  size: Cookies.get('size') || 'medium', // 设置默认和刷新浏览器设置为你指定的大小
  locale: enLang, // 如果使用中文,无需设置,请删除
})

更改组件尺寸的事件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
methods:{
    handleSetSize(size) {
      this.$ELEMENT.size = size  // 这一步很关键,这是 Element-UI 向 Vue 暴露的实例属性,下面会源码分析
      this.$store.dispatch('app/setSize', size) // 这里就是把尺寸写入 cookie :Cookies.set('size', size),供页面刷新时使用
      this.refreshView() // 主要为了及时当前页面生效,这个刷新单页应用的方案值得学习,下面也会分析源码
      this.$message({
        message: 'Switch Size Success',
        type: 'success',
      })
    },
    refreshView() {
      // In order to make the cached page re-rendered
      this.$store.dispatch('tagsView/delAllCachedViews', this.$route)

      const { fullPath } = this.$route
      // 这里使用 nextTick 是为了确保上面的 dispatch 里 promise 异步清除的任务完成
      this.$nextTick(() => {
        this.$router.replace({
          path: '/redirect' + fullPath,
        })
      })
    },
}

redirect 路由定义以及对应的组件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
    path: '/redirect',
    component: Layout,
    hidden: true,
    children: [
      {
        path: '/redirect/:path(.*)', // 这里是重点,见下图路由前后对比
        component: () => import('@/views/backup/redirect/index'),
      },
    ],
  },
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script>
export default {
  created() {
    const { params, query } = this.$route
    const { path } = params // 使用上图解析出的路径数据
    this.$router.replace({ path: '/' + path, query }) // 替换为原来的路径,达到及时更新当前页面
  },
  render: function(h) {
    return h() // avoid warning message
  },
}
</script>

ELement-UI 里组件是如何使用 $ELEMENT.size 的?

以 Button 组件为例(只展示关键代码):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<template>
  <button
    class="el-button"
    @click="handleClick"
    :disabled="buttonDisabled || loading"
    :autofocus="autofocus"
    :type="nativeType"
    :class="[
      type ? 'el-button--' + type : '',
      buttonSize ? 'el-button--' + buttonSize : '', // 使用的地方
      {
        'is-disabled': buttonDisabled,
        'is-loading': loading,
        'is-plain': plain,
        'is-round': round,
        'is-circle': circle
      }
    ]"
  >
    <i class="el-icon-loading" v-if="loading"></i>
    <i :class="icon" v-if="icon && !loading"></i>
    <span v-if="$slots.default"><slot></slot></span>
  </button>
</template>
<script>
  export default {
    name: 'ElButton',
    props: {
      size: String,
    },
    computed: {
      _elFormItemSize() {
        return (this.elFormItem || {}).elFormItemSize;
      },
      // 计算的地方
      buttonSize() {
        return this.size || this._elFormItemSize || (this.$ELEMENT || {}).size; // 就是这里依赖使用了 this.$ELEMENT.size 使用
      },
    },
  };
</script>

总结知识点:

单页应用刷新页面

路径的处理

全局组件属性的控制

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-06-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前端黑板报 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
基于el-button的RibbonControl
  最近需要对一个包含各种操作的系统进行样式重构。鉴于操作按钮较多,且几年前在上家公司时候有做财务类型软件,当时是参照office使用了ribbon风格,只不过是C/S的,效果相当不错。这次面对同样类型的任务,自然想到也使用ribbon风格来重构系统的各个功能布局。但查了下,目前市面上基本没开源的前端ribbon组件,所以决定自己基于element-ui的el-button魔改制作ribboncontrol,这里把探索的过程做下简单记录。
guokun
2021/11/24
5970
基于el-button的RibbonControl
Button按钮--inject与provide
inject 和 provider 是vue中的组合选项,需要一起使用。目的是允许一个祖先组件向其所有子孙后代注入依赖(简单地说就是祖先组件向子孙后代传值的一种方法,祖先组件通过provider提供变量,子孙后代通过inject注入接收变量)
用户1148399
2018/10/11
1.2K0
Vue3组件库工程化实战 --Element3
随着对前端功能和性能的不断提高,前端早就不是一段内嵌于页面的一段JS代码了。已经进化为一个系统复杂的工程了。 下面我就结合element3组件库的搭建经验。带大家搭建一个mini版组件库。
@超人
2021/03/18
1.3K0
Vue3组件库工程化实战 --Element3
实用的VUE系列——手把手教你写个vue 插件
声明:本文为稀土掘金技术社区首发签约文章,30天内禁止转载,30天后未获授权禁止转载,侵权必究!
用户7413032
2024/06/25
1980
实用的VUE系列——手把手教你写个vue 插件
[day-ui]DButton 组件和 DIcon 组件实现
上一篇中我们已经把组件的基础架构和文档的雏形搭建好了。下面我们从最简单的 button 和 icon 组件入手,熟悉下 vue3 的语法结构和组件的单元测试。看这篇文章前最好了解下 vue3 的语法和 compositionAPI,基本就能了解代码为何如此书写,和 vue2 有哪些不同。
测不准
2021/04/08
5820
从零到部署:用 Vue 和 Express 实现迷你全栈电商应用(七)
在之前的六篇教程中我们已经基本实现了迷你全栈电商应用,相信大家对于一个全栈应用的开发已经有了一个全面的认知。但是一个追求完美的工程师是不会吝啬他的艺术创造,仅仅实现应用的功能还不能满足用户的高需求,应用的界面效果也是提高用户体验的关键因素。因此本篇教程将基于 element-ui 组件库重构项目的前端代码,改善迷你电商应用的界面效果,提高用户的体验感。虽然我们可以轻松地引入现成的组件库,但是与之对应的数据处理也值得我们注意,那我会在引入组件库的同时带大家一起踩一踩 element-ui 给我们挖的坑,毕竟踩坑才能成长嘛。
一只图雀
2020/04/07
1.5K0
Element-UI快速入门
https://element.eleme.cn/#/zh-CN/component/installation
陶然同学
2023/02/24
4.3K0
Element-UI快速入门
vue老项目sass和element-ui开发踩坑
公司的一个各种依赖比较老的项目,习惯了之前的iview和stylus开发,刚接手还是有很多不习惯的地方。
人人都是码农
2023/11/16
8920
Vue权限路由思考
登录成功后同时要做很多事情,具体业务具体对待。后台管理系统 登录成功后会请求当前用户的菜单权限接口,来获取用户的可访问的路由(动态路由),获取成功后,Vue Router 是不能直接使用的,必须得解析成符合Vue Router 可识别的格式 . ❞
山月
2021/04/07
3820
Vue权限路由思考
封装element-ui表格,我是这样做的
使用过element-ui的表格的同学应该都有这样的体会,做一个简单的表格还比较容易,但如果这个表格包含了顶部的按钮,还有分页,甚至再包含了行编辑,那开发工作量就成倍的增加,特别是在开发管理系统的时候,表格一个接一个的去开发, 即浪费时间,还对个人没有什么提升。今天小编带来了自己封装的一个表格,让你用JSON就可以简单的生成表格。
前端进击者
2021/07/27
1.4K0
6 种 Vue 权限路由实现方式总结(最全)
已经登录 (已经取得后台返回的用户的权限信息(角色之类的)),则判断当前要跳转的路由,用户是否有权限访问 (根据路由名称到全部路由里找到对应的路由,判断用户是否具备路由上标注的权限信息 (比如上面的roles : [ 'admin', 'editor' ]))。
夜尽天明
2019/06/20
5.7K0
Vue3+Element-plus前端学习笔记-巨长版
「写好的代码」:Lvan826199/mwj-vue3-project: vue3-vite构建的一个前端模版 (github.com)
梦无矶小仔
2024/03/25
7590
Vue3+Element-plus前端学习笔记-巨长版
vue项目中遇到的那些事。
  有好几天没更新文章了。这段实际忙着做了一个vue的项目,从 19 天前开始,到今天刚好 20 天,独立完成。
Dawnzhang
2019/03/04
1.3K0
vue项目中遇到的那些事。
动态加载用户菜单
流程是用户登录后进入模块页面,点击不同的模块,进入菜单页面(模块不同,菜单内容也不同)
tianyawhl
2020/02/18
2.2K0
动态加载用户菜单
前端购物车&订单结算模块详解
首先, 我们需要在vant中找到对应的组件, 这里是ActionSheet组件。 通过对ActionSheet组件的修改, 从而得到我们需要的内容。
用户11097514
2024/05/31
5760
前端购物车&订单结算模块详解
4. 许愿墙后台管理系统(前端页面)
许愿墙的后台管理系统主要有4个模块:登录模块、首页模块、许愿管理模块和管理员管理模块。使用前后端分离方式,后端接口使用Express框架,前端使用Vue框架,页面使用Element组件。这节实现前端页面。
爱学习的程序媛
2022/04/07
9550
4. 许愿墙后台管理系统(前端页面)
浅学前端:Vue篇(三)
而我们今天学习的这个所谓的路由,就是根据浏览器路径不同,用不同的视图组件替换这个页面内容展示。
传说之下的花儿
2023/11/13
3590
抛弃node和vscode,如何用记事本开发出一个完整的vue前端项目
写这篇文章的初衷并不是要大家真的不用node和vscode,说实话前端发展成今天这样,在实际开发中确实离不开node和vscode这类工具了,但往往工具用多了我们自己也成了一个工具人!
人人都是码农
2025/01/20
1400
抛弃node和vscode,如何用记事本开发出一个完整的vue前端项目
【编程鹿】害 学element-ui 看这篇就够了
目前可以通过 unpkg.com/element-ui 获取到最新版本的资源,在页面上引入 js 和 css 文件即可开始使用。
鹿老师的Java笔记
2020/12/02
1.3K0
【编程鹿】害  学element-ui 看这篇就够了
vue全家桶之vuex
状态管理可以简单理解为vue中的某些全局的data属性。 当组件状态增多时,整个应用和状态分散在每个组件和实例中。部分还会出现状态共享。这时最好的方案就是vuex。
一粒小麦
2019/07/18
1.5K0
vue全家桶之vuex
相关推荐
基于el-button的RibbonControl
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文