IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> vue表单控件的联动实现 -> 正文阅读

[JavaScript知识库]vue表单控件的联动实现

临近过年,假期前两天,用 Vue Element 写后台管理页面,记录下来,方便查看。
需求:实现联动效果,重跑类型 选择 按任务ID -> TaskId 文本框显示;选择 按任务类型 -> 任务类型。
1)弹框布局

<template>
    <div>
        <el-dialog title="手动重跑任务" :visible.sync="dialogHandleTask" width="60%">
            <el-form ref="queryForm" :rules="handleJobRulesForm" :model="queryForm" size="medium" label-width="20%">
                <el-form-item label="重跑类型:" prop="handleType">
                    <el-select v-model="queryForm.handleType" placeholder="请选择重跑类型" style="width: 40%;">
                        <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" >
                        </el-option>
                    </el-select>
                </el-form-item>
                <el-form-item label="TaskId:" prop="taskId" > 
                    <el-input v-model="queryForm.taskId" placeholder="请输入TaskId" style="width: 40%;" clearable></el-input>
                </el-form-item>
                <el-form-item label="任务类型:" prop="taskPeriod" >
                    <el-select v-model="queryForm.taskPeriod"  placeholder="请选择任务类型" style="width: 40%;">
                <el-option v-for="item in allTaskPerod" :key="item.value" :label="item.label" :value="item.value"></el-option>
                </el-select>
                </el-form-item>
            </el-form>
            <span slot="footer" class="dialog-footer">
                <el-button @click="editDialogVisible = false">取 消</el-button>
                <el-button type="primary" @click="eidtUserInfo">确 定</el-button>
            </span>
        </el-dialog>
    </div>
</template>

2)数据定义

return {
	options: [
	    {
	      value: "1",
	      label: "按任务ID"
	    },
	    {
	      value: "2",
	      label: "按任务类型"
	    }
	  ],
	  // 定时任务类型
	  allTaskPerod:[
	    {
	      value: "Y",
	      label: "按年统计"
	    },
	    {
	      value: "M",
	      label: "按月统计"
	    },
	    {
	      value: "D",
	      label: "按日统计"
	    },
	    {
	      value: "H",
	      label: "按小时统计"
	    }
	  ],
	handleJobForm:{
          handleType:'按任务ID',
          taskPeriod:"",
        },
    queryForm: {
        taskId: '',
        taskPeriod: ''
      },
 }

页面布局效果如下图所示。
在这里插入图片描述

方法一、根据 选中的queryForm.handleType 值 v-if 判断

直接在 TaskId 控件任务类型 控件 添加 v-if 判断 根据选中的类型来显示控件。可以实现关联展示,但输入结果后,切换回来,数据仍然存在。

// 数据绑定
<el-form-item label="TaskId:" prop="taskId" v-if="queryForm.handleType == '1'"> 
	<el-input v-model="queryForm2.taskId" placeholder="请输入TaskId" style="width: 40%;" clearable></el-input>
</el-form-item>
<el-form-item label="任务类型:" prop="taskPeriod" v-if="queryForm.handleType == '2'">
	<el-select v-model="queryForm2.taskPeriod"  placeholder="请选择任务类型" style="width: 40%;">
		<el-option v-for="item in allTaskPerod" :key="item.value" :label="item.label" :value="item.value"></el-option>
	</el-select>
</el-form-item>

实现效果如下图所示。
在这里插入图片描述

方法二、v-if + 深度监听

添加事件监听,当控件切换时进行 v-if 赋值,并清空控件中已经选择的值。

// 添加监听
watch:{
        'queryForm':{
        // deep,默认值是 false,代表是否深度监听
          deep:true,
            handler:function(newValue,oldValue){
                if(newValue.handleType == 2 ){
                  this.handleTrue1 = false;
                  this.handleTrue2 = true;
                  this.queryForm2.taskId = "";
                }else{
                  this.handleTrue2 = false;
                  this.handleTrue1 = true;
                  this.queryForm2.taskPeriod = "";
                }
            },
            // immediate:true 代表在wacth里声明后,立即去执行handler方法
            immediate: true
        }
    },

修改 v-if 的配置

// 数据绑定  v-if
<el-form-item label="TaskId:" prop="taskId" v-if="this.handleTrue1"> 
	<el-input v-model="queryForm2.taskId" placeholder="请输入TaskId" style="width: 40%;" clearable></el-input>
</el-form-item>
<el-form-item label="任务类型:" prop="taskPeriod" v-if="this.handleTrue2">
	<el-select v-model="queryForm2.taskPeriod"  placeholder="请选择任务类型" style="width: 40%;">
		<el-option v-for="item in allTaskPerod" :key="item.value" :label="item.label" :value="item.value"></el-option>
	</el-select>
</el-form-item>

切换 按任务ID,显示 TaskId 输入框,可以输入。
在这里插入图片描述

切换到 按任务类型 时,清空上次选择的值。
在这里插入图片描述

vue 中 v-if 和 v-show 的区别
1)实现方式
v-if是动态的向DOM树内添加或者删除DOM元素;
v-show是通过设置DOM元素的display样式属性控制显隐;
2)消耗
v-if有更高的切换消耗;
v-show有更高的初始渲染消耗;
3)编译
v-if是懒加载,在条件第一次变为真时才开始局部编译(编译被缓存后,然后再切换的时候进行局部卸载);
v-show是在任何条件下都被编译,然后被缓存,而且DOM元素保留;

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-01-30 18:50:47  更:2022-01-30 18:53:23 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 14:08:01-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码