Vue3 Radio单选切换展示不同内容

Vue3 Radio单选框切换展示不同内容

环境:vue3+ts+vite+element plus

技巧:v-if,v-show的使用

实现功能:点击单选框展示不同的输入框

效果实现前的代码:

javascript 复制代码
<template>
    <div class="home">
        <el-row :gutter="20" style="padding: 0 100px">
            <el-form>
                <el-col :span="24">
                    <el-form-item label="选项:">
                        <el-radio-group v-model="state.radio" class="ml-4">
                            <el-radio label="1" size="large">型号</el-radio>
                            <el-radio label="2" size="large">颜色</el-radio>
                        </el-radio-group>
                    </el-form-item>
                </el-col>
                <el-col :span="24">
                    <el-form-item label="型号:">
                        <el-input v-model="state.input" placeholder="请输入型号"/>
                    </el-form-item>
                    <el-form-item label="颜色:">
                        <el-input v-model="state.input2" placeholder="请输入颜色"/>
                    </el-form-item>
                </el-col>
            </el-form>
        </el-row>
    </div>
</template>
<script setup lang="ts">
import {reactive, ref} from "vue";

const isShow = ref(true)
const state = reactive({
    radio: '1',
    input: '',
    input2: '',
})

</script>
<style lang="scss" scoped>
.home {
  background: antiquewhite;
  height: 200px;
}
</style>

1.默认选项型号是选中的,型号输入框也是展示的,那么颜色输入框是需要隐藏,

定义isShow,

javascript 复制代码
<el-col :span="24">
    <el-form-item label="型号:" v-show="isShow">
        <el-input v-model="state.input" placeholder="请输入型号"/>
    </el-form-item>
    <el-form-item label="颜色:" v-show="!isShow">
        <el-input v-model="state.input2" placeholder="请输入颜色"/>
    </el-form-item>
</el-col>

//js
const isShow = ref(true)

此时,isShow是true,! isShow就是false了,显示如下

2.获取单选框选择的radio值。切换的时候下面输入框也要随之切换。

定义@change事件,如果val=1,isShow的值是true,!isShow就是false,如果不是1,那肯定是2了,因为这里只有2个选项,val=2时,型号的 isShow是fasle,颜色的! isShow就是true

javascript 复制代码
<el-radio-group v-model="state.radio" class="ml-4" @change="handleChange">
    <el-radio label="1" size="large" >型号</el-radio>
    <el-radio label="2" size="large" >颜色</el-radio>
</el-radio-group>

//js
const handleChange = (val: any) => {
    if (val == 1) {
        isShow.value = true
    } else {
        isShow.value = false
    }
}

完整代码如下

javascript 复制代码
<template>
    <div class="home">
        <el-row :gutter="20" style="padding: 0 100px">
            <el-form>
                <el-col :span="24">
                    <el-form-item label="选项:">
                        <el-radio-group v-model="state.radio" class="ml-4" @change="handleChange">
                            <el-radio label="1" size="large" >型号</el-radio>
                            <el-radio label="2" size="large" >颜色</el-radio>
                        </el-radio-group>
                    </el-form-item>
                </el-col>
                <el-col :span="24">
                    <el-form-item label="型号:" v-show="isShow">
                        <el-input v-model="state.input" placeholder="请输入型号"/>
                    </el-form-item>
                    <el-form-item label="颜色:" v-show="!isShow">
                        <el-input v-model="state.input2" placeholder="请输入颜色"/>
                    </el-form-item>
                </el-col>
            </el-form>
        </el-row>
    </div>
</template>
<script setup lang="ts">
import {reactive, ref} from "vue";
const isShow = ref(true)
const state = reactive({
    radio: '1',
    input: '',
    input2: '',
})
const handleChange = (val: any) => {
    if (val == 1) {
        isShow.value = true
    } else {
        isShow.value = false
    }
}
</script>
<style lang="scss" scoped>
.home {
  background: antiquewhite;
  height: 200px;
}
</style>

至此,有没有发现 v-if 还没出现

改造

效果:进入页面是单选框默认没有选择,输入框是隐藏的,点击单选框才展示输入框

思路:单选radio的值为0时,也就是刚进入页面radio单选框并没有选择,当radio有值时,对应的输入框显示。

此时 v-if 出场了,只要radio的值不为0,也就是radio必须有选择才出现输入框这块,但是radio的默认值是要改为0

javascript 复制代码
<el-col :span="24" v-if="state.radio!=0">
    <el-form-item label="型号:" v-show="isShow">
        <el-input v-model="state.input" placeholder="请输入型号"/>
    </el-form-item>
    <el-form-item label="颜色:" v-show="!isShow">
        <el-input v-model="state.input2" placeholder="请输入颜色"/>
    </el-form-item>
</el-col>
//js
const state = reactive({
    radio: '0',
    input: '',
    input2: '',
})

进入页面时效果:

选择时:

相关推荐
布兰妮甜1 天前
从 0 搭建企业级 Vue3/Vite 脚手架(规范、eslint、husky、打包、环境变量全流程)
typescript·vue3·vite·脚手架·前端工程化
gis开发之家2 天前
《Vue3 从入门到大神35篇》Vue3 源码详解(五):effect 依赖收集原理——track 与 trigger 是如何工作的?
javascript·typescript·前端框架·vue3·vue3源码
华玥作者3 天前
uniapp 万条数据不卡顿:我写了个虚拟列表组件 hy-list,原生支持瀑布流
数据结构·uni-app·list·vue3
sugar__salt4 天前
Vue3 基础知识点整理 —— 从入门到响应式核心完全指南
vue.js·笔记·vue·vue3
万亿少女的梦1685 天前
基于微信小程序、Spring Boot与Vue3的智慧养老管理系统设计与实现
spring boot·redis·微信小程序·mybatis·vue3
gis开发之家6 天前
《Vue3 从入门到大神33篇》Vue3 源码详解(三):响应式核心思想——从 Object.defineProperty 到 Proxy
前端·javascript·vue.js·vue3·vue3源码
gis开发之家7 天前
《Vue3 从入门到大神32篇》Vue3 源码详解(二):从 GitHub Clone 到断点调试,手把手搭建源码阅读环境
vue.js·前端框架·github·vue3·vue3源码
gis开发之家8 天前
vue3直击架构痛点 依赖倒置与接口隔离——打造坚如磐石的插件与高阶组件(HOC)模式
javascript·架构·typescript·前端框架·vue3
gis开发之家10 天前
《Vue3 从入门到大神29篇》单元测试与 E2E 测试 —— 保障 Vue3 项目的质量
前端·javascript·vue.js·单元测试·前端框架·vue3
雨季mo浅忆10 天前
上传文件夹
前端·vue3