返回顶部
首页 > 资讯 > 前端开发 > JavaScript >Vue动态表单的应用详解
  • 360
分享到

Vue动态表单的应用详解

2024-04-02 19:04:59 360人浏览 薄情痞子
摘要

概述 后台管理系统里面有非常多的表单需求,我们希望能够通过写一个json格式的数据,通过Vue的循环动态地去渲染动态表单。并且能够在外部得到渲染出来的表单数据,从而做一个入库操作。

概述

后台管理系统里面有非常多的表单需求,我们希望能够通过写一个json格式的数据,通过Vue的循环动态地去渲染动态表单。并且能够在外部得到渲染出来的表单数据,从而做一个入库操作。

v-model的理解

vue-model相当于给表单元素传递一个value,外部监听input事件。所以我们自己封装表单组件的时候也是可以传递一个value值,监听input事件获取输入的值。


<input type="text" v-model="thing">

<!-- 等同于 -->
<input type="text" v-bind:value="thing" 
       v-on:input="thing = $event.target.value">

业务应用场景

最近在写一个在线教育平台,发现在后台添加课程的时候,每个课程所需要的参数不一样(有的课程没有特殊参数),使用固定表单在这个场景下使用很不优雅,而且工作量巨大。为了解决这个问题,我们可以在添加课程的时候动态的展示出课程分类表单所需要的参数,获取输入的课程参数,构造数据,进行入库操作。

通过组件展示分类


<!-- reply.vue -->
<template>
  <div>
    <li>
      <div v-if="data.id != 0" @click="getfid(data.id)" :id="data.id"> {{ data.name }}</div>
      <ul v-if="data.children && data.children.length > 0">
        <Reply v-for="child in data.children" :key="child.id" :data="child"/>
      </ul>
    </li>
  </div>
</template>

<script>

  import bus from './bus.js';

  export default {

    //声明名称
    name: "Reply",
    props: ['data'],
    //声明组件
    components: {},
    //声明变量
    data() {
      return {
        fid: 0,
      }
    },
    //自定义过滤器
    filters: {
      myfilter: function (value) {
        value = value.slice(0, 3);
        return value + "********";
      }
    },
    //初始化方法
    mounted() {
    },
    //声明方法
    methods: {
      //点选分类id
      getfid: function (fid) {
        this.fid = fid;
        //console.log(this.fid);
        bus.$emit("msg", fid);
        localStorage.setItem("fid", this.fid);

        //取消所有高亮
        var divs = document.getElementsByClassName("bg");

        //遍历选择器
        for (var i = divs.length - 1; i >= 0; i--) {

          //取消高亮
          divs[i].classList.remove("bg");

        }
        //首先将当前元素高亮显示
        var mydiv = document.getElementById(fid);
        //动态添加高亮类选择器
        mydiv.classList.add("bg");
      }
    }
  }
</script>


<style>

  ul {
    padding-left: 10rem;
    list-style: none;
  }

  .bg {
    background: orange;
    color: white;
  }
</style>

采用第三方组件监听分类的ID


<!--bus.js-->
import Vue from 'vue'

export default new Vue();

课程添加页面


<template>
  <div>
    <heads></heads>
    <h1>课程提交页面</h1>
    <reply :data="mydata"/>
    <van-cell-group>
      <van-field label="课程标题" v-model="title"/>
      <van-field label="课程描述" v-model="desc" rows="5" type="textarea"/>
      <van-field label="课程价格" v-model="price"/>

      <div v-for="(value,key,index) in params">
        <van-field :label="key" v-model="info[key]"/>
      </div>

      <van-button color="gray" @click="addcourse">保存课程</van-button>
    </van-cell-group>
  </div>
</template>

<script>

  //导入其他组件
  import bus from './bus.js';
  import reply from "./reply";
  import heads from "./heads";


  export default {

    //声明组件
    components: {
      'reply': reply,
      'heads': heads,
    },
    //构造方法
    created() {
      //监听
      bus.$on('msg', target => {
        console.log(target);
        this.fid = target;
        if (this.cid === 0) {
          this.get_cate(this.fid)
        } else {
          this.$toast.fail("您已经保存过课程了,无法再次选择分类");
          return false;
        }
      });
    },
    //声明变量
    data() {
      return {
        //数据
        mydata: {},
        //课程分类id
        fid: localStorage.getItem("fid"),
        title: "",
        price: "",
        desc: "",
        cid: 0,
        videos: [],
        videosrc: "",
        params: {},
        info: {}
      }
    },
    //初始化方法
    mounted() {
      this.get_data();
    },
    //声明方法
    methods: {
      get_cate(fid) {
        this.axiOS.get('Http://localhost:5000/getcate/', {params: {'fid': fid}}).then(result => {
          var myparams = result.data.params;
          if (myparams === '') {
            myparams = null
          }
          myparams = JSON.parse(myparams)
          this.params = myparams

          for (var key in this.params) {
            this.$set(this.info, key, '')
          }
          console.log(this.info)
        })
      },
      //添加课程
      addcourse: function () {
        var lists = [];
        for (var key in this.info) {
          lists.push({'key': key, 'value': this.info[key], 'label': this.params[key]})
        }

        var list_str = JSON.stringify(lists)

        var data_post = {
          fid: this.fid,
          title: this.title,
          desc: this.desc,
          price: this.price,
          id: localStorage.getItem("user_id"),
        }
        if (lists.length > 0) {
          data_post = {
            fid: this.fid,
            title: this.title,
            desc: this.desc,
            price: this.price,
            id: localStorage.getItem("user_id"),
            params:list_str
          }
        }

        this.axios.post(
          'http://localhost:5000/addcourse/',
          this.qs.stringify(data_post)).then((result) => {
          if (result.data.code === 200) {
            this.$toast.success('课程添加成功');
            this.cid = result.data.cid;
          } else {
            this.$toast.fail(result.data.msg);
          }
        });
      },
      //获取数据
      get_data: function () {
        //发送请求
        this.axios.get(
          'http://localhost:5000/catelist/').then((result) => {
          console.log(result);
          // 声明根节点
          var mytree = {'id': 0, name: ""};
          mytree['children'] = result.data;
          this.mydata = mytree;
          console.log(this.mydata);
        });
      }
    }
  }
</script>


<style scoped>

  ul {
    padding-left: 10rem;
    list-style: none;
  }

</style>

小结

简单的来说,就是我们在添加课程的时候选择分类,会以表单的形式动态展示出该分类下面我们必传的参数,用户添加课程,提高效率。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: Vue动态表单的应用详解

本文链接: https://lsjlt.com/news/137799.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Vue动态表单的应用详解
    概述 后台管理系统里面有非常多的表单需求,我们希望能够通过写一个json格式的数据,通过vue的循环动态地去渲染动态表单。并且能够在外部得到渲染出来的表单数据,从而做一个入库操作。 ...
    99+
    2024-04-02
  • Mybatis详解动态SQL以及单表多表查询的应用
    目录单表查询操作参数占位符#{}和${}SQL 注入like模糊查询多表查询操作一对一多表查询一对多多表查询动态SQL使用if标签trim标签where标签set标签for...
    99+
    2024-04-02
  • 如何使用Vue动态生成form表单
    这篇文章将为大家详细讲解有关如何使用Vue动态生成form表单,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。具有数据收集、校验和提交功能的表单生成器,包含复选框、单选框、...
    99+
    2024-04-02
  • vue怎么创建动态form表单
    这篇文章主要讲解了“vue怎么创建动态form表单”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue怎么创建动态form表单”吧!针对各个表单写好通用的组件,然后根据type用v-if来渲...
    99+
    2023-07-04
  • vue实现动态表单动态渲染组件的方式(1)
    vue 实现动态表单/动态渲染组件的方式(一),供大家参考,具体内容如下 思路 先写好各个可能会出现的表单或者自定义的组件,引入。此时后端可能会给到一个对象型数组,每个对象有要渲染组...
    99+
    2024-04-02
  • vue实现动态表单动态渲染组件的方式(2)
    本文实例为大家分享了vue实现动态表单动态渲染组件的方式,供大家参考,具体内容如下 思路 先把所有可能出现的表单/组件写在主页面每个表单/组件的slot 属性值要与后端返回的表单/组...
    99+
    2024-04-02
  • 详解Vue返回值动态生成表单及提交数据的办法
    目录主要解决的问题一、后端返回的数据,提交到后端的数据格式如下:二、vue前端代码如下:总结 主要解决的问题 1、vue在循环的时候需要动态绑定不同的v-model;vue动态的表单...
    99+
    2024-04-02
  • vue+element如何创建动态form表单
    这篇文章主要为大家展示了“vue+element如何创建动态form表单”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“vue+element如何创建动态form...
    99+
    2024-04-02
  • vue动态表单数据如何提交
    Vue动态表单数据可以通过以下步骤来提交:1. 在Vue组件中定义表单数据,可以使用data属性来存储表单数据。2. 使用v-mod...
    99+
    2023-05-29
    vue动态表单 vue
  • PHP实现动态表单生成工具详解
    目录Form介绍特点项目主页链接安装方法快速使用链式操作创建块表单数组配置创建块表单行内表单table表单表单包含多种input类型,包括 hiiden类型 ,text类型,radi...
    99+
    2024-04-02
  • Mybatis动态SQL及单表多表查询怎么应用
    本文小编为大家详细介绍“Mybatis动态SQL及单表多表查询怎么应用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Mybatis动态SQL及单表多表查询怎么应用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。单...
    99+
    2023-07-02
  • vue components 动态组件详解
    目录总结总结数组发生变化时,动态加载相应数据 场景:点击不同组件名称,界面显示相应组件 步骤一:导入所需组件 步骤二:点击 tab 选项卡,将对应组件名添加进数组 步骤三:使用动态组...
    99+
    2024-04-02
  • vue基础之详解ElementUI的表单
    目录ElementUI表单一个简单的案例表单的主要组件表单组件的使用行内的表单对齐方式表单验证自定义的验证规则表单内组件尺寸控制总结form模块的属性form模块的方法Form Me...
    99+
    2024-04-02
  • Vue中怎么利用ElementUI实现表单动态渲染
    本篇文章为大家展示了Vue中怎么利用ElementUI实现表单动态渲染,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。{  "inline&quo...
    99+
    2024-04-02
  • Vue--Router动态路由的用法示例详解
    目录官网网址动态路由概述同一路由多个参数path-to-regexpApi用法1. pathToRegexp()2、exec()3. parse()4. compile()本文介绍V...
    99+
    2022-11-13
    Vue Router动态路由 Vue Router路由 Vue Router动态路由用法
  • QML中动态与静态模型应用详解
    目录前言静态模型动态模型前言 对于开发用户界面,最重要的就是保持数据与UI分离。数据通常被称为为model,可视化处理称作view。在QML中,model与view都通过delega...
    99+
    2024-04-02
  • Vue中form表单动态如何添加组件
    这篇文章给大家分享的是有关Vue中form表单动态如何添加组件的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。效果如下:这种效果实现其实就是对 v-for 指令的一种使用,组件不是...
    99+
    2024-04-02
  • vue和iview结合动态生成表单实例
    目录一、构建myform组建二、构建myFormItem组建三、构建函数式组件mycontrl组件四、用户输入的时候需要对表单项中进行各种验证或者逻辑五、表单输入完成获取表单中的值六...
    99+
    2022-11-13
    vue iview vue动态生成表单 vue iview生成表单
  • Vue TypeScript与Vue Router:强强联手,打造动态单页面应用
    Vue TypeScript与Vue Router概述 Vue TypeScript是Vue.js框架的TypeScript版本。它允许开发人员使用TypeScript来编写Vue.js组件,从而提高代码的可读性、可维护性和可重用性。V...
    99+
    2024-02-09
    Vue TypeScript Vue Router 单页面应用 SPA 动态应用 路由
  • javascript动态生成表格详解
    *创建一个页面:两个输入框和一个按钮 *代码和步骤 代码如下: <html > <head> <title>动态生成表格<...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作