8.1 管道符| 使用技巧
1. vue中管道操作符(|)的使用

//自定义过滤器,通过管道操作符|改变列表单元格的值 <el-table-column prop="status" label="状态" align="center" width="80"> <template slot-scope="scope"> {{scope.row.status | getStatus}} </template> </el-table-column> <script> export default { data() { return {......} }, filters: { getStatus: function(num){ let str = '' if (num == 1){ str = '启用' } else { str = '禁用' } return str; } }, methods: { list(){......}, }, } </script>
参考:自定义过滤器
2. $refs获取指定元素
('#id')获取指定的元素
使用方法:

<section class="login_message"> <input type="text" maxlength="11" placeholder="验证码" v-model="captcha"> <img class="get_verification" src="http://localhost:27017/captcha" alt="captcha" @click="getCaptcha" ref="captcha"> // 先使用ref绑定元素 </section> // 获取一个新的图片验证码 getCaptcha () { // 每次指定的src要不一样,才会重先发请求 this.$refs.captcha.src = 'http://localhost:27017/captcha?time='+Date.now() }
3. $emit分发事件
vm.$emit( eventName, […args] ) 用于触发当前实例上的事件。附加参数都会传给监听器回调。
使用方法:
单独定义了一个用于弹框的组件AlertTip.vue:
该组件接收一个参数alertText,同时向外暴露一个事件closeTip.

<template> <div class="alert_container"> <section class="tip_text_container"> <div class="tip_icon"> <span></span> <span></span> </div> <p class="tip_text">{{alertText}}</p> <div class="confrim" @click="closeTip">确认</div> </section> </div> </template> <script> export default { props: { alertText: String }, methods: { closeTip() { // 分发自定义事件(事件名: closeTip): 向外分发事件以后,在调用AlertTip组件时,可以调用closeTip事件关闭该弹框 this.$emit('closeTip') } } } </script>
使用该组件:如果表单验证没有通过,则弹框进行提示

<template> ... 省略表单部分 <AlertTip :alertText="alertText" v-show="alertShow" @closeTip="closeTip"></AlertTip> </template> <script> import AlertTip from '../../components/AlertTip/AlertTip' export default { // 模板里面写的变量主要有三个来源:props、data、computed,写在哪的得看它的特点, // rightPhone数据,根据phone就能确定,说明它是个计算属性 data () { return { phone: '', // 手机号 alertText: '', // 提示文本 alertShow: false, // 是否显示警告框 } }, computed: { rightPhone () { return /^1\d{10}$/.test(this.phone) } }, methods: { // 显示弹框 showAlert(alertText){ this.alertShow = true this.alertText = alertText }, async login () { let result // 前台表单验证 if (this.loginWay) { // 短信登录 const {phone} = this if (!rightPhone) { // 手机号不正确 this.showAlert('手机号不正确') return } // 发送ajax请求短信登录 result = await reqSmsLogin(phone, code) } // 根据结果数据处理 if (result.code === 0) { const user = result.data // 将user保存到vuex的state this.$store.dispatch('recordUser', user) // 跳转路由去个人中心界面 this.$router.replace('/profile') } else { // 显示新的图片验证码 this.getCaptcha() // 显示警告提示 const msg = result.msg this.showAlert(msg) } }, // 关闭警告框 closeTip () { this.alertShow = false this.alertText = '' }, }, components: { AlertTip } } </script>
4. 表单校验
动态增减表单项 + 自定义校验规则
form表单中对于单独的input使用自定义规则与系统提供的规则

<el-form-item label="购买数量" prop="point" :rules="[ {required: true, message:'请输入购买数量'}, {type: 'number', message: '数量必须为数字值'}, {validator: this.validatePoint, trigger: 'blur'}]"> <el-input v-model.number="formData.point"></el-input> </el-form-item> <script> export default { data() { let validatePoint = (rule, value, callback) => { if( Math.abs(value) < 500 || value%100 != 0){ callback(new Error('数量要大于500并且是500的整数倍')); } else { callback(); } }; return { formData: { point: '' }, // 方法二:自定义校验规则(改规则也可以直接写在data数据项里面) validatePoint: validatePoint } }, methods: { // 方法一:自定义验证规则(该规则可以写在方法里面) validatePoint(rule, value, callback){ if( Math.abs(value) < 500 || value%100 != 0){ callback(new Error('数量要大于500并且是500的整数倍')); } else { callback(); } }, }, } </script>
动态修改表单的必要性
<el-form-item label="医药机构名称:" prop="psnFixedEvtDetl.fixmedinsName" :rules="[{required:fixmedinsNameFlag, message:'请选择医药机构',trigger:'blur'}]"> <el-input placeholder="请选择医药机构" v-model="formAdd.psnFixedEvtDetl.fixmedinsName"/> </el-form-item>
data里面定义变量fixmedinsNameFlag,然后在方法或者watch中动态的改变fixmedinsNameFlag值。
5. 三目表达式的简化
三目表达式可以简化成以下写法,这样代码量更少,更加的直观:
<p class="user-info-top">{{userInfo.name || '登录/注册'}}</p>
6. 插槽slot-scope的使用
推荐 2.6.0 新增的 v-slot。
<el-table-column prop="sex" label="性别" width="150"> <template slot-scope="scope">{{scope.sex? '男':'女'}}</template> </el-table-column>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
2018-08-12 6-1 建立客户端与zk服务端的连接
2018-08-12 ubuntu16系统磁盘空间/dev/vda1占用满的问题