Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Vue 自定义指令生成 placeholder

Vue 自定义指令生成 placeholder

原创
作者头像
imba久期
发布于 2023-03-08 09:13:59
发布于 2023-03-08 09:13:59
76410
代码可运行
举报
运行总次数:0
代码可运行

需求产生

在使用表单时,表单的输入框、选择器会设置 placeholder 属性来进行提示

不设置感觉空荡荡的,但如果自己一条条的写又感觉非常麻烦

那我们为何不封装个指令,让它自己加呢

思路

因为我用的是 element-plus,组件都有固定的样式、模板

比如

代码语言:html
AI代码解释
复制
<el-form-item label="姓名">
  <el-input></el-input>
</el-form-item>

最后的代码就是

代码语言:html
AI代码解释
复制
<div class="el-form-item">
  <label for="title" class="el-form-item__label">姓名</label>
  <div class="el-form-item__content">
      <div class="el-input">
      <input type="text" class="el-input__inner">
    </div>
  </div>
</div>

那我们只需要获取到具体的输入框,然后给它设置属性就可以

Vue 指令可以在组件挂载后拿到添加指令的 DOM 元素,再用 DOMquerySelector 获取到所有 el-form-item 子元素,遍历后再根据 label 的内容给 input 设置 placeholder

代码参考

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import _ from 'lodash'
export default { 
  beforeMount(el) {
    if (!(_.isFunction(_.get(el.classList, 'contains')) && el.classList.contains('el-form'))) {
      console.warn('v-auto-placeholder 指令需要放在 el-form 上使用')
      return
    }
    // 取出 form 下所有 el-form-item
    const formItems = el.querySelectorAll('.el-form-item')
    _.forEach(formItems, item => {
      // label element
      const labelEl = _.get(item.children, '0', '')
      // label 文本,如果 label 有子级,则取出子级第一个的 文本
      const label = _.get(labelEl.children, 'length', 0) > 0 ? _.get(labelEl.children, '0.children.0.innerText', '') : _.get(labelEl, 'innerText', '')
      // content element
      const contentEl = _.get(item.children, '1')
      // input 框
      const input = contentEl && contentEl.querySelector ? contentEl.querySelector('input,textarea') : null
      // 原 placeholder
      const placeholder = _.get(input, 'placeholder')
      // 如果有值则不替换
      if (placeholder && placeholder !== '' && placeholder !== '请选择') {
        return
      }
      // 取出内容第一个元素的 classList
      const classList = _.get(contentEl, 'children.0.classList')
      // 根据不同组件显示不同文本
      if (_.some(classList, (className) => ~[
        'el-select',
        'el-cascader'
      ].indexOf(className))) {
        if (input) input.setAttribute('placeholder', `请选择${label}`)
      } else {
        if (input) input.setAttribute('placeholder', `请输入${label}`)
      }
    })
  }
}

最终效果

el-form 加上 v-auto-placeholder

代码语言:html
AI代码解释
复制
<el-form v-auto-placeholder>
  <el-form-item label="姓名">
    <el-input></el-input>
  </el-form-item>
  <!-- ... -->
</el-form>

就可以自动生成 placeholder

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

评论
登录后参与评论
1 条评论
热度
最新
如果分支数量更高一点呢, 示例只有几个分支, 如果有几十上百甚至上千个分支, 刚好又在只能用py2的环境, 那字典应该会比ifelse性能好且可读性强点吧
如果分支数量更高一点呢, 示例只有几个分支, 如果有几十上百甚至上千个分支, 刚好又在只能用py2的环境, 那字典应该会比ifelse性能好且可读性强点吧
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
Element表单验证
要加验证之前一定要确保已经写了 prop 属性,该属性是跟 rule 绑定在一起的,也可以在行内单独制定 rules。
leader755
2022/03/09
3.6K0
基于Vue的电商后台管理系统(2)
上期已经实现该系统的登陆界面、路由、登录、退出及导航守卫功能,本期将继续完善该系统的以下功能:从后端获取后台列表数据并渲染到前端页面、用户列表的展示、修改、删除和添加。
全栈程序员站长
2022/06/30
1.1K0
基于Vue的电商后台管理系统(2)
手把手教你实现一个Vue无限级联树形表格(增删改)
平时我们可能在做项目时,会遇到一个业务逻辑。实现一个无限级联树形表格,什么叫做无限级联树形表格呢?就是下图所展示的内容,有一个祖元素,然后下面可能有很多子孙元素,你可以实现添加、编辑、删除这样几个功能。
Vam的金豆之路
2021/12/01
5610
手把手教你实现一个Vue无限级联树形表格(增删改)
Vue + Element ui 实现动态表单,包括新增行/删除行/动态表单验证/提交功能
最近通过Vue + Element ui实现了动态表单功能,该功能还包括了动态表单新增行、删除行、动态表单验证、动态表单提交功能,趁热打铁,将开发心得记录下来,方便以后再遇到类似功能时,直接拿来应用。
朱季谦
2023/07/10
5K0
vue实战电商管理后台
这里我们使用了 ElementUI 组件 el-container、el-menu
Remember_Ray
2020/10/09
4.5K1
vue实战电商管理后台
vue2.0+Element-ui实战案例
我们将会选择使用一些 vue 周边的库vue-cli, vue-router,axios,moment,Element-ui搭建一个前端项目案例,后端数据接口,会使用json-server快速搭建一个本地的服务,方便对数据的增删改查,
小周sir
2019/09/23
2.3K0
vue2.0+Element-ui实战案例
Vue JSX、自定义 v-model
最初用到 JSX,就是做这个博客的时候。iview 表格组件,不支持像 element 那样直接写 html 代码渲染,只能通过 render 函数渲染,也就是 JSX 语法
Krry
2020/07/16
4.7K1
vue自定义指令
1.注册自定义指令(全局和局部) 1> 全局注册 <div id="app"> <input type="text" placeholder="我是全局自定义指令" v-focus /> </div> <script> Vue.directive("focus", { inserted: function (el) { el.focus(); }, }); new Vue({ el: "#app", }); </script> ### 2> 局部注册
leader755
2022/03/09
4130
Vue + Element ui 实现动态表单,包括新增行/删除行/动态表单验证/提交功能
最近通过Vue + Element ui实现了动态表单功能,该功能还包括了动态表单新增行、删除行、动态表单验证、动态表单提交功能,趁热打铁,将开发心得记录下来,方便以后再遇到类似功能时,直接拿来应用。
朱季谦
2023/07/21
6.1K0
Vue + Element ui 实现动态表单,包括新增行/删除行/动态表单验证/提交功能
【Vue.js——功能实现】心愿便利贴(蓝桥杯真题-2423)【合集】
综上所述,这段 CSS 代码主要用于设置心愿便利贴应用的页面布局和样式,包括背景、卡片、表单等元素的样式。
Rossy Yan
2025/02/11
920
【Vue.js——功能实现】心愿便利贴(蓝桥杯真题-2423)【合集】
Vue电商实践项目(二)
1.实现后台首页的基本布局 2.实现左侧菜单栏 3.实现用户列表展示 4.实现添加用户
用户6808043
2022/02/24
5.1K0
学生管理系统Element UI版
链接:https://pan.baidu.com/s/1FAb2WUSUwpRuwIB9Spy3oQ  提取码:1234
陶然同学
2023/02/24
1.5K0
学生管理系统Element UI版
ElementUI Dialog 对话框,组件之间传值
Dialog 组件的内容可以是任意的,甚至可以是表格或表单,下面是应用了 Element Table 和 Form 组件的两个样例。
py3study
2021/01/29
4.8K0
写了个自定义指令,支持elementUI2.0下拉框组件虚拟列表显示
由于业务对页面性能要求很高,如果下拉框数据很大,一个页面有多个下拉框,那么就导致页面很卡顿。由于elementPlus已经支持了下拉组件虚拟列表,但所在项目仍然使用elementUI2.0,所以需要自己扩展支持下拉组件虚拟列表,以下是笔者总结的一篇关于elementUI2.0支持下拉框虚拟列表的实践方案,希望看完在项目中有所帮助。
Maic
2022/12/21
2.2K0
写了个自定义指令,支持elementUI2.0下拉框组件虚拟列表显示
ElementUI——vue2+element-ui 2.x的动态表格和表单
一个基于vue2.x + element-ui 2.x版本的项目,里面都是CURD的东西,但是前人并未封装组件,而是直接CV,现在要新增一个大模块的功能,就想着封装个组件,后面再基于这个组件对老项目进行改造;
思索
2024/08/15
1870
ElementUI——vue2+element-ui 2.x的动态表格和表单
手把手教你搭建Spring Boot+Vue前后端分离
前后端分离是目前互联网开发中比较广泛使用的开发模式,主要是将前端和后端的项目业务进行分离,可以做到更好的解耦合,前后端之间的交互通过xml或json的方式,前端主要做用户界面的渲染,后端主要负责业务逻辑和数据的处理。
闫同学
2022/10/31
5.9K0
手把手教你搭建Spring Boot+Vue前后端分离
vue的select下拉框多选项-multiple属性
最近在使用vue-element-admin这个后台管理框架开源模板在做一个管理后台,使用起来其实还挺方便的,大部分的组件源码里面都已经写好了,用的时候只需要把源码拿出来修改修改,也就成了。
王小婷
2020/09/03
10.1K0
6. Element Plus前端组件库
Element-UI 是基于 Vue 开发的一套UI组件库,提供丰富网页开发的组件,可快速开发网站,降低前端开发成本。
alexhuiwang
2023/04/24
5.5K0
6. Element Plus前端组件库
前端-朝花夕拾-vue-Element小技巧
A:官网有配置主题的页面可以配置后下载使用element.eleme.cn/#/zh-CN/the…
吴文周
2020/01/17
5770
前端成神之路-vue前端项目05
1.完成参数管理 2.推送代码到码云 3.制作商品列表页面 4.制作商品添加页面
海仔
2021/05/06
1.5K0
相关推荐
Element表单验证
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验