亚洲精品在线电影-亚洲精品午夜在线观看-亚洲精品网站在线-亚洲精品视频久久久-国产精品深夜福利免费观看

千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

當(dāng)前位置:首頁  >  IT問答庫  >  Web基礎(chǔ)知識

Vue3-巧用指令

發(fā)布:web前端培訓(xùn) 2022-02-09 14:50

推薦答案

  Vue3-巧用指令不知道大家在工作中用上vue3了沒有,vue3好是好,但是有部分插件并沒有更新到3.0的,比如我比較喜歡的自定義滾動條overlayscrollbarsvue3直接使用overlayscrollbars-vue會報(bào)錯(cuò)。

  今天我們主要介紹一下如何使用指令來應(yīng)用這些插件,自定義滾動條overlayscrollbars以及拖拽sortablejs

v2-c7f6420386db61816337233c3a8001e5_1440w

  directive

  指令的話這里就不多說了,參考官方文檔(https://v3.cn.vuejs.org/api/options-assets.html),overlayscrollbars以及sortablejs都是提供了js方式調(diào)用的,我們可以在指令里面進(jìn)行插件的初始化。

main.js

import { createApp } from 'vue'import directive from './directive'

const app = createApp(App)

directive(app)


directive

import { Sortable } from 'sortablejs'import 'overlayscrollbars/css/OverlayScrollbars.css'import OverlayScrollbars from 'overlayscrollbars'

export default function(app) {

  app.directive('focus', {

    mounted(el) {

      el.focus()

    }

  })

  app.directive('sortable', {

    mounted(el, binding) {

      const config = binding.value

      new Sortable(el, config || {})

    }

  })

  app.directive('OverlayScrollbars', {

    mounted(el, binding) {

      const config = binding.value

      const instance = OverlayScrollbars(el, config || {

        scrollbars: { autoHide: 'move' }

      })

      if (config && config.scrollReady) {

        config.scrollReady(instance)

      }

    }

  })}

vue

<template>

  <ul v-sortable="sortableOptions" class="listBox">

    <li class="li" v-for="item in list" :key="item">{{ item }}</li>

  </ul>

  <div

    class="mobiReview"

    v-OverlayScrollbars="{ ...scrollOptions, scrollReady }"

  ></div></template>

<script setup>import { reactive, toRefs } from 'vue'

const state = reactive({

  list: [1, 2, 3, 4, 5],

  scroll: {

    instance: null

  },

  scrollOptions: {

    className: 'os-theme-thin-dark',

    scrollbars: { autoHide: 'move' }

  }})

function scrollReady(instance) {

  state.scroll.instance = instance}

const sortableOptions = {

  animation: 150,

  sort: true,

  draggable: '.li',

  onUpdate: (event) => {

    event.stopPropagation()

    state.list.splice(event.newDraggableIndex, 0, state.list.splice(event.oldDraggableIndex, 1)[0])

  }}

const { list } = toRefs(state)</script>

<style lang="less" scoped>.listBox {

  display: flex;

  list-style: none;

  > li {

    width: 100px;

    height: 100px;

    margin: 10px;

    background-color: red;

    display: flex;

    justify-content: center;

    align-items: center;

    cursor: move;

  }}.mobiReview {

  height: 500px;

  width: 300px;

  .box {

    height: 1000px;

  }}</style>

我們可以通過指令來傳遞初始化參數(shù),也可以獲取插件調(diào)用實(shí)例,比如scrollReady,當(dāng)然如果你指令里面寫了默認(rèn)參數(shù),也可以不用參數(shù)的傳遞。

<div

    class="mobiReview"

    v-OverlayScrollbars

  ></div>

sortablejs

這里算是一個(gè)額外補(bǔ)充說明,有些同學(xué)在做表格拖拽時(shí)使用了sortablejs

<template>

  <el-table :data="tableData" style="width: 100%" row-key="id">

    <el-table-column type="index" width="50"></el-table-column>

    <el-table-column prop="date" label="日期" width="180"></el-table-column>

    <el-table-column prop="name" label="姓名" width="180"></el-table-column>

    <el-table-column prop="address" label="地址"></el-table-column>

  </el-table></template>

<script setup>import { reactive, toRefs, onMounted } from 'vue'import { Sortable } from 'sortablejs'

const state = reactive({

  tableData: [{

    id: 1,

    date: '2016-05-02',

    name: '王小虎',

    address: '上海市普陀區(qū)金沙江路 1518 弄'

  }, {

    id: 2,

    date: '2016-05-04',

    name: '王小虎',

    address: '上海市普陀區(qū)金沙江路 1517 弄'

  }, {

    id: 3,

    date: '2016-05-01',

    name: '王小虎',

    address: '上海市普陀區(qū)金沙江路 1519 弄'

  }, {

    id: 4,

    date: '2016-05-03',

    name: '王小虎',

    address: '上海市普陀區(qū)金沙江路 1516 弄'

  }]})

onMounted(() => {

  const tbody = document.querySelector('.el-table__body-wrapper tbody')

  Sortable.create(tbody, {

    onUpdate: (event) => {

      event.stopPropagation()

      state.tableData.splice(event.newDraggableIndex, 0, state.tableData.splice(event.oldDraggableIndex, 1)[0])

    }

  })})

const { tableData } = toRefs(state)</script>

假如不設(shè)置row-key會出現(xiàn)拖拽數(shù)據(jù)錯(cuò)亂的情況,或者說在拖拽一個(gè)列表,而列表的keyindex,也會出現(xiàn)這個(gè)問題。

因?yàn)榇蠖鄶?shù)人喜歡把index作為key的賦值,而我們拖拽時(shí)index會變動,移除和添加時(shí)數(shù)組的索引會變,這會讓diff出現(xiàn)問題,就好比每一個(gè)人都有一個(gè)身份證,把某個(gè)人前面的人移除掉,這個(gè)人不可能就繼承前面那個(gè)人的身份證了,key對于這條數(shù)據(jù)應(yīng)該是唯一的,不可變的,就像人的身份證一樣,故不要把index作為key來綁定。

最新問答資訊

01 unity用什么編程語言?unity學(xué)習(xí)難度大嗎

學(xué)習(xí) unity 語言
6020 人關(guān)注

02 python容易學(xué)嗎?學(xué)好python有什么好處?

學(xué)習(xí) python 工作 培訓(xùn)
5389 人關(guān)注

03 html是什么語言?html學(xué)習(xí)難嗎?

學(xué)習(xí) html 語言 可以
5062 人關(guān)注

04 c語言難學(xué)嗎?c語言學(xué)好要多久?

語言 技術(shù) 學(xué)習(xí)
4733 人關(guān)注

06 學(xué)好平面設(shè)計(jì)要多久?報(bào)速成班靠譜嗎?

平面 設(shè)計(jì) 學(xué)習(xí) 時(shí)間
4238 人關(guān)注

相關(guān)問題

web前端自學(xué)好還是培訓(xùn)好

關(guān)于“web前端自學(xué)好還是培訓(xùn)好”這個(gè)問題說法眾說紛紜,有很多...

選擇Web培訓(xùn)機(jī)構(gòu)的注意事項(xiàng)有哪些

師資力量;老師是不是又豐富的實(shí)戰(zhàn)開發(fā)經(jīng)驗(yàn),這點(diǎn)是非常重要的。...

Web前端主要做什么

前端開發(fā)是創(chuàng)建Web頁面或app等前端界面呈現(xiàn)給用戶的過程,通過HT...

web前端培訓(xùn)分享:學(xué)Web前端的好處有哪些

web前端近幾年在IT互聯(lián)網(wǎng)行業(yè)比較火熱,很多人都開始參加web前端...

web前端培訓(xùn)分享:Web前端需要學(xué)什么

Web前端需要學(xué)什么?好不好學(xué)?這是很多想要進(jìn)入到web前端行業(yè)的學(xué)...

零基礎(chǔ)參加web前端培訓(xùn)都學(xué)什么

零基礎(chǔ)參加web前端培訓(xùn)都學(xué)什么?基礎(chǔ)階段學(xué)習(xí)HTML常用標(biāo)簽與表單...

測一測
你知道多少IT梗

主站蜘蛛池模板: 人人99 | 亚洲一区二区三区免费看 | 久久er| 亚洲欧美一区二区三区麻豆 | 丁香花在线电影小说观看 | 国产精品视频免费看 | 中国精品视频一区二区三区 | 波多野结衣中文字幕在线视频 | 国产日本欧美在线观看乱码 | 婷婷深爱五月 | 亚洲欧洲无码一区二区三区 | 最新国产一区二区精品久久 | 羞羞视频在线免费 | 欧美激情性色生活片免费观看 | 久久精品国产第一区二区 | 男女男精品视频在线观看 | 午夜欧美精品久久久久久久久 | 亚州第一视频 | 亚洲第一看片 | 久久免费视频2 | 这里只有精品视频在线观看 | 伊人久久天堂 | 六月婷婷久久 | 天天草综合网 | 欧美在线视频一区二区 | 亚洲视频欧美 | 伊人亚洲影院 | 亚洲成人伊人网 | 羞色视频| 中文字幕无线码欧美成人 | 羞羞视频免费网站男男 | 精品视频一区在线观看 | 日韩精品在线免费观看 | 免费国产视频 | 欧美深夜福利 | 一级片在线播放 | 久久se精品一区精品二区 | 免费自拍偷拍视频 | 99热在线获取最新地址 | 亚洲视频第一页 | 在线不卡福利 |