亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Vue動(dòng)態(tài)表單的應(yīng)用詳解

 更新時(shí)間:2021年10月12日 16:54:08   作者:樓下安同學(xué)  
這篇文章主要為大家詳細(xì)介紹了Vue動(dòng)態(tài)表單的應(yīng)用,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

概述

后臺(tái)管理系統(tǒng)里面有非常多的表單需求,我們希望能夠通過(guò)寫(xiě)一個(gè)json格式的數(shù)據(jù),通過(guò)vue的循環(huán)動(dòng)態(tài)地去渲染動(dòng)態(tài)表單。并且能夠在外部得到渲染出來(lái)的表單數(shù)據(jù),從而做一個(gè)入庫(kù)操作。

v-model的理解

vue-model相當(dāng)于給表單元素傳遞一個(gè)value,外部監(jiān)聽(tīng)input事件。所以我們自己封裝表單組件的時(shí)候也是可以傳遞一個(gè)value值,監(jiān)聽(tīng)input事件獲取輸入的值。

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

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

業(yè)務(wù)應(yīng)用場(chǎng)景

最近在寫(xiě)一個(gè)在線教育平臺(tái),發(fā)現(xiàn)在后臺(tái)添加課程的時(shí)候,每個(gè)課程所需要的參數(shù)不一樣(有的課程沒(méi)有特殊參數(shù)),使用固定表單在這個(gè)場(chǎng)景下使用很不優(yōu)雅,而且工作量巨大。為了解決這個(gè)問(wèn)題,我們可以在添加課程的時(shí)候動(dòng)態(tài)的展示出課程分類(lèi)表單所需要的參數(shù),獲取輸入的課程參數(shù),構(gòu)造數(shù)據(jù),進(jìn)行入庫(kù)操作。

通過(guò)組件展示分類(lèi)

<!-- 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 {

    //聲明名稱(chēng)
    name: "Reply",
    props: ['data'],
    //聲明組件
    components: {},
    //聲明變量
    data() {
      return {
        fid: 0,
      }
    },
    //自定義過(guò)濾器
    filters: {
      myfilter: function (value) {
        value = value.slice(0, 3);
        return value + "********";
      }
    },
    //初始化方法
    mounted() {
    },
    //聲明方法
    methods: {
      //點(diǎn)選分類(lèi)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");

        }
        //首先將當(dāng)前元素高亮顯示
        var mydiv = document.getElementById(fid);
        //動(dòng)態(tài)添加高亮類(lèi)選擇器
        mydiv.classList.add("bg");
      }
    }
  }
</script>


<style>

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

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

采用第三方組件監(jiān)聽(tīng)分類(lèi)的ID

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

export default new Vue();

課程添加頁(yè)面

<template>
  <div>
    <heads></heads>
    <h1>課程提交頁(yè)面</h1>
    <reply :data="mydata"/>
    <van-cell-group>
      <van-field label="課程標(biāo)題" v-model="title"/>
      <van-field label="課程描述" v-model="desc" rows="5" type="textarea"/>
      <van-field label="課程價(jià)格" 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>

  //導(dǎo)入其他組件
  import bus from './bus.js';
  import reply from "./reply";
  import heads from "./heads";


  export default {

    //聲明組件
    components: {
      'reply': reply,
      'heads': heads,
    },
    //構(gòu)造方法
    created() {
      //監(jiān)聽(tīng)
      bus.$on('msg', target => {
        console.log(target);
        this.fid = target;
        if (this.cid === 0) {
          this.get_cate(this.fid)
        } else {
          this.$toast.fail("您已經(jīng)保存過(guò)課程了,無(wú)法再次選擇分類(lèi)");
          return false;
        }
      });
    },
    //聲明變量
    data() {
      return {
        //數(shù)據(jù)
        mydata: {},
        //課程分類(lèi)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);
          }
        });
      },
      //獲取數(shù)據(jù)
      get_data: function () {
        //發(fā)送請(qǐng)求
        this.axios.get(
          'http://localhost:5000/catelist/').then((result) => {
          console.log(result);
          // 聲明根節(jié)點(diǎn)
          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>

小結(jié)

簡(jiǎn)單的來(lái)說(shuō),就是我們?cè)谔砑诱n程的時(shí)候選擇分類(lèi),會(huì)以表單的形式動(dòng)態(tài)展示出該分類(lèi)下面我們必傳的參數(shù),用戶(hù)添加課程,提高效率。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • vue中img src 動(dòng)態(tài)加載本地json的圖片路徑寫(xiě)法

    vue中img src 動(dòng)態(tài)加載本地json的圖片路徑寫(xiě)法

    這篇文章主要介紹了vue中的img src 動(dòng)態(tài)加載本地json的圖片路徑寫(xiě)法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-04-04
  • vue視圖不更新情況詳解

    vue視圖不更新情況詳解

    這篇文章主要介紹了vue視圖不更新情況詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • 使用vue項(xiàng)目配置多個(gè)代理的注意點(diǎn)

    使用vue項(xiàng)目配置多個(gè)代理的注意點(diǎn)

    這篇文章主要介紹了使用vue項(xiàng)目配置多個(gè)代理的注意點(diǎn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Vue CLI3基礎(chǔ)學(xué)習(xí)之pages構(gòu)建多頁(yè)應(yīng)用

    Vue CLI3基礎(chǔ)學(xué)習(xí)之pages構(gòu)建多頁(yè)應(yīng)用

    這篇文章主要給大家介紹了關(guān)于Vue CLI3基礎(chǔ)學(xué)習(xí)之pages構(gòu)建多頁(yè)應(yīng)用的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Vue CLI3具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • 編寫(xiě)Vue項(xiàng)目,如何給數(shù)組的第一位添加對(duì)象數(shù)據(jù)

    編寫(xiě)Vue項(xiàng)目,如何給數(shù)組的第一位添加對(duì)象數(shù)據(jù)

    這篇文章主要介紹了編寫(xiě)Vue項(xiàng)目,如何給數(shù)組的第一位添加對(duì)象數(shù)據(jù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • vue、uniapp實(shí)現(xiàn)組件動(dòng)態(tài)切換效果

    vue、uniapp實(shí)現(xiàn)組件動(dòng)態(tài)切換效果

    在Vue中,通過(guò)使用動(dòng)態(tài)組件,我們可以實(shí)現(xiàn)組件的動(dòng)態(tài)切換,從而達(dá)到頁(yè)面的動(dòng)態(tài)展示效果,這篇文章主要介紹了vue、uniapp實(shí)現(xiàn)組件動(dòng)態(tài)切換,需要的朋友可以參考下
    2023-10-10
  • 解決iView Table組件寬度只變大不變小的問(wèn)題

    解決iView Table組件寬度只變大不變小的問(wèn)題

    這篇文章主要介紹了解決iView Table組件寬度只變大不變小的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-11-11
  • vue v-viewer組件使用示例詳解(v-viewer輪播圖)

    vue v-viewer組件使用示例詳解(v-viewer輪播圖)

    這篇文章主要介紹了vue v-viewer組件使用示例詳解(v-viewer輪播圖),本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-02-02
  • Vue使用axios引起的后臺(tái)session不同操作

    Vue使用axios引起的后臺(tái)session不同操作

    這篇文章主要介紹了Vue使用axios引起的后臺(tái)session不同操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-08-08
  • 詳解vue開(kāi)發(fā)中調(diào)用微信jssdk的問(wèn)題

    詳解vue開(kāi)發(fā)中調(diào)用微信jssdk的問(wèn)題

    這篇文章主要介紹了vue開(kāi)發(fā)中調(diào)用微信jssdk的問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04

最新評(píng)論