最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Vue Elementui中的Tag與頁(yè)面其它元素相互交互的兩三事

 更新時(shí)間:2018年09月25日 09:39:38   作者:大師兄  
這篇文章主要介紹了詳解Vue Elementui中的Tag與頁(yè)面其它元素相互交互的兩三事,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

前言

公司系統(tǒng)在用elementui做后臺(tái)開發(fā),不免遇到一些需要自己去根據(jù)原有的功能上,加一些交互的功能。
今天來(lái)介紹下我在用elementUi里的Tag標(biāo)簽與多選框交互的過(guò)程,東西聽上去很簡(jiǎn)單,但就是越簡(jiǎn)單的東西越容易出一些問(wèn)題。官方tag文檔:elementUi-tag標(biāo)簽

效果圖:

思路

一、多選框勾選,出現(xiàn)對(duì)應(yīng)的tag:

1.利用watch監(jiān)聽多選框綁定的值A(chǔ)(數(shù)組)的變化;
2.根據(jù)A的變化,循環(huán)拿到勾選多選框的id對(duì)應(yīng)的name,將id以及對(duì)應(yīng)的name組成新的對(duì)象數(shù)組;
3.將上一步得到的對(duì)象數(shù)組,去重(產(chǎn)品要求,出現(xiàn)的tag里不能有重復(fù)的)得到結(jié)果B;
4.將B賦值給tags,循環(huán)展示出來(lái);

二、點(diǎn)擊tag上的刪除按鈕,刪除當(dāng)前的tag,并將對(duì)應(yīng)勾選的多選框取消勾選:

1.點(diǎn)擊tag刪除的按鈕的時(shí)候,拿到當(dāng)前tag的id C;
2.執(zhí)行方法,去除掉A里的C;
3.watch事件重新進(jìn)入到第一步的方法;

總結(jié):監(jiān)聽多選框?qū)?yīng)的model A,根據(jù)A的變化,取到對(duì)應(yīng)的id與name,賦值給tag作展示,tag的刪除事件反過(guò)來(lái)在去控制A的變化,重新進(jìn)入watch事件里的方法

聽起來(lái)挺簡(jiǎn)單,思路大概也明確,先講上述思路對(duì)應(yīng)的代碼,后邊再講遇到的問(wèn)題、坑

代碼

復(fù)制整一塊代碼到你的elementUi項(xiàng)目里就能看到效果
<template>
 <div>
 <el-row type="flex" justify="bettwen">
  <el-col :span="15">
  <!-- 表單 -->
  <el-form :model="tempForm" ref="tempForms">
   <el-form-item label="請(qǐng)選擇人員">
   <!-- 多選人員 -->
   <el-checkbox-group v-model="tempForm.checkboxGroup5" size="small">
    <el-checkbox border v-for="(item,index) in checkBox" @change="perChange(item)" :label="item.id" :key="index">{{item.name}}</el-checkbox>
   </el-checkbox-group>
   <!-- 多選人員 end-->
   </el-form-item>
  </el-form>
  <!-- 表單 end-->
  <!-- tag展示區(qū) -->
  <el-row>
   <el-tag class="tagClass" v-for="(tag,index) in tags" :key="index" closable @close="handleClose(tag)" :type="tag.id">
   {{tag.name}}
   </el-tag>
   <el-button v-if="tags.length>0" @click="clearAll" plain>全部刪除</el-button>
  </el-row>
  <!-- tag展示區(qū) end-->
  </el-col>
  
 </el-row>
 </div>
</template>
<script>
export default {
 name: 'kk',
 mounted() {},
 data() {
 return {
  msg: 'Welcome to Your Vue.js App',
  tags: [],
  tempForm: {
  checkboxGroup5: [], //選擇的人員
  },
  detailData: [],
  checkBox: [{
   name: '小紅',
   id: '101'
  },
  {
   name: '小黃',
   id: '100'

  }, {
   name: '小明',
   id: '102'

  }, {
   name: '小明',
   id: '102'

  }
  ],
  
 }
 },
 methods: {
 clearAll() { //全部清空數(shù)據(jù)
  this.tags = []
  this.tempForm.checkboxGroup5 = []
 },
 perChange(item) {
  this.detailData.push(item)
 },
 handleClose(tag) { //標(biāo)簽的刪除事件
  // 去掉當(dāng)前刪除的tag
  let yourChoseTags = this.tempForm.checkboxGroup5

  this.tempForm.checkboxGroup5 = yourChoseTags.filter(item => {
  if (tag.id !== item) {
   return true
  }
  })

  
 },
 delRepeat(arr) { //數(shù)組對(duì)象去重
  return Object.values(
  arr.reduce((obj, next) => {
   var key = JSON.stringify(next);
   return (obj[key] = next), obj;
  }, {}),
  );
 },
 moreArr() {
  let yourChose = this.tempForm.checkboxGroup5
  let tempTags = []

  tempTags = this.baseDataDetail(yourChose, this.checkBox, tempTags)
  this.detailData = tempTags
 },
 baseDataDetail(yourChose, baseData, callBack) { //封裝的數(shù)組方法
  let temp = callBack
  // 循環(huán)兩個(gè)數(shù)據(jù)拿到選擇的checkbox的id對(duì)應(yīng)的初始數(shù)據(jù)
  yourChose.forEach(item => {
  baseData.forEach(itemSecond => {
   if (item === itemSecond.id) {
   temp.push(itemSecond)
   }
  })
  })
  return temp
 },

 },
 watch: {
 detailData() {
  let tempArr = Object.assign([], this.detailData)
  tempArr = this.delRepeat(tempArr)
  // console.log(tempArr)
  this.tags = tempArr
 },
 "tempForm.checkboxGroup5" () {
  this.moreArr()
 },
 }
}

</script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
.tempArea {
 /*width: 100%;*/
}
.tagClass{
 margin-right: 10px;
}

</style>

值得注意的點(diǎn):

1.我在多選框綁定值tempForm.checkboxGroup5的監(jiān)聽事件里的方法的最后,得到了一個(gè)可能會(huì)有重復(fù)數(shù)據(jù)(重復(fù)id跟name),再將這個(gè)含有重復(fù)數(shù)據(jù)數(shù)組對(duì)象賦值給另一個(gè)數(shù)組detailData,在watch監(jiān)聽這個(gè)數(shù)組,去完重后,賦值給tags做展示。
為什么這樣做,是因?yàn)椋覀兊男枨罄?,除了在?dāng)前頁(yè)面多選框選擇人員,還有一個(gè)選擇全公司員工的組件,這樣不管從哪個(gè)渠道選擇的人員都能最后將結(jié)果指向detailData,保證渲染正確

2.數(shù)組對(duì)象去重,初始數(shù)據(jù)里可能會(huì)有重id、重名的對(duì)象(小明),即便綁定多選框的model值里不會(huì)有重復(fù)的id,但在 利用id取對(duì)應(yīng)name的時(shí)候,還是會(huì)檢測(cè)出多條,這樣tag就可能會(huì)顯示重復(fù)的
所以利用這個(gè)方法,就能保證最后處理好的數(shù)據(jù)沒有重復(fù)的,tag不會(huì)顯示多個(gè)一樣的,
但這個(gè)方法有點(diǎn)不靈活的地方就是,你要處理的數(shù)據(jù)({id:1,name:'小明',type:now})必須id、name,type都重復(fù)的時(shí)候,才會(huì)被去重,
拓展:可根據(jù)你設(shè)置的數(shù)組對(duì)象里的某個(gè)屬性動(dòng)態(tài)去重

3.我一開始是在多選框的change事件上來(lái)做tag的展示邏輯,因?yàn)閏hange事件里可以同時(shí)拿到當(dāng)前選擇的name和id,但是,change的時(shí)候,你不知道這是在勾選還是在取消勾選,這樣tags的展示就會(huì)出問(wèn)題;

這個(gè)邏輯可能不太完美,因?yàn)橛锌赡苣愕娜藛T是從其他組件里選來(lái)的,所以當(dāng)你刪除tag的時(shí)候,會(huì)可能出問(wèn)題(暫時(shí)先不討論這種情況)

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

相關(guān)文章

  • Vue el-table組件如何實(shí)現(xiàn)將日期格式化

    Vue el-table組件如何實(shí)現(xiàn)將日期格式化

    這篇文章主要介紹了Vue el-table組件如何實(shí)現(xiàn)將日期格式化問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • Vue Render函數(shù)創(chuàng)建DOM節(jié)點(diǎn)代碼實(shí)例

    Vue Render函數(shù)創(chuàng)建DOM節(jié)點(diǎn)代碼實(shí)例

    這篇文章主要介紹了Vue Render函數(shù)創(chuàng)建DOM節(jié)點(diǎn)代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • 五種Vue實(shí)現(xiàn)加減乘除運(yùn)算的方法總結(jié)

    五種Vue實(shí)現(xiàn)加減乘除運(yùn)算的方法總結(jié)

    這篇文章主要為大家詳細(xì)介紹了五種Vue實(shí)現(xiàn)加減乘除運(yùn)算的方法,文中的示例代碼簡(jiǎn)潔易懂,對(duì)我們深入了解vue有一定的幫助,需要的可以了解下
    2023-08-08
  • 15個(gè)Vue技巧,你都知道嗎

    15個(gè)Vue技巧,你都知道嗎

    在使用 Vue 開發(fā)的這幾年里,掌握一些有用的技巧,使用一些更高級(jí)的技術(shù)點(diǎn),總會(huì)有用的,本文就介紹了15個(gè)Vue技巧,具有一定的參考價(jià)值,感興趣的可以了解一下
    2022-02-02
  • vue實(shí)現(xiàn)公共組件傳值并及時(shí)監(jiān)聽到數(shù)據(jù)更新視圖

    vue實(shí)現(xiàn)公共組件傳值并及時(shí)監(jiān)聽到數(shù)據(jù)更新視圖

    這篇文章主要介紹了vue實(shí)現(xiàn)公共組件傳值并及時(shí)監(jiān)聽到數(shù)據(jù)更新視圖方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • vue中props值的傳遞詳解

    vue中props值的傳遞詳解

    這篇文章主要介紹了vue中props值的傳遞,在vue中父組件要正向的向子組件傳遞數(shù)據(jù)或者參數(shù),子組件接收到后根據(jù)參數(shù)的不同來(lái)進(jìn)行對(duì)應(yīng)的渲染,這個(gè)正向的數(shù)據(jù)傳遞在vue組件中就是通過(guò)props來(lái)實(shí)現(xiàn)的,需要的朋友可以參考下
    2009-05-05
  • Vue動(dòng)態(tài)改變css樣式的3種方法總結(jié)

    Vue動(dòng)態(tài)改變css樣式的3種方法總結(jié)

    這篇文章主要給大家介紹了關(guān)于Vue動(dòng)態(tài)改變css樣式的3種方法,在Vue.js中我們經(jīng)常需要根據(jù)特定的條件或事件來(lái)動(dòng)態(tài)地修改CSS樣式,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-11-11
  • 解決vue刷新頁(yè)面以后丟失store的數(shù)據(jù)問(wèn)題

    解決vue刷新頁(yè)面以后丟失store的數(shù)據(jù)問(wèn)題

    這篇文章主要介紹了解決vue刷新頁(yè)面以后丟失store的數(shù)據(jù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-08-08
  • 如何在vue-cli中使用css-loader實(shí)現(xiàn)css module

    如何在vue-cli中使用css-loader實(shí)現(xiàn)css module

    這篇文章主要介紹了如何在vue-cli中使用css-loader實(shí)現(xiàn)css module,幫助大家更好的理解和使用vue框架,感興趣的朋友可以了解下
    2021-01-01
  • 拿來(lái)即用的vue旋轉(zhuǎn)木馬組件demo

    拿來(lái)即用的vue旋轉(zhuǎn)木馬組件demo

    這篇文章主要為大家介紹了拿來(lái)即用的vue旋轉(zhuǎn)木馬組件demo詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03

最新評(píng)論

勃利县| 航空| 长沙市| 松潘县| 南郑县| 区。| 沂水县| 玉溪市| 乐清市| 改则县| 奉节县| 澳门| 抚松县| 达州市| 天全县| 布尔津县| 罗定市| 含山县| 隆回县| 兴仁县| 金寨县| 肥城市| 关岭| 曲阳县| 忻州市| 老河口市| 和政县| 平阳县| 盱眙县| 九江县| 池州市| 巢湖市| 高阳县| 伊吾县| 左权县| 阳朔县| 福安市| 九江市| 柏乡县| 扶风县| 东乡族自治县|