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

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

Vue3-巧用指令

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

推薦答案

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

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

v2-c7f6420386db61816337233c3a8001e5_1440w

  directive

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

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)用實例,比如scrollReady,當然如果你指令里面寫了默認參數(shù),也可以不用參數(shù)的傳遞。

<div

    class="mobiReview"

    v-OverlayScrollbars

  ></div>

sortablejs

這里算是一個額外補充說明,有些同學(xué)在做表格拖拽時使用了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ù)錯亂的情況,或者說在拖拽一個列表,而列表的keyindex,也會出現(xiàn)這個問題。

因為大多數(shù)人喜歡把index作為key的賦值,而我們拖拽時index會變動,移除和添加時數(shù)組的索引會變,這會讓diff出現(xiàn)問題,就好比每一個人都有一個身份證,把某個人前面的人移除掉,這個人不可能就繼承前面那個人的身份證了,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è)計要多久?報速成班靠譜嗎?

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

相關(guān)問題

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

在it行業(yè)涉及到各種專業(yè)的知識,作為一個工作人員掌握一些基礎(chǔ)的...

前端技術(shù)有哪些?

互聯(lián)網(wǎng)行業(yè)的發(fā)展速度很快,特別是在前端這個崗位,如果不能時刻...

web前端開發(fā)需要掌握哪些知識

同時學(xué)會css,css是用來美化html頁面的為頁面提供布局和格式,最...

javascript是干什么的?JavaScript日常用途是什么

同學(xué),你好!javascript是干什么的?JavaScript日常用途是什么?...

web前端有哪些框架?

同學(xué)您好,web前端總共有11個框架,因為web前端框架可以很大程度...

學(xué)web前端需要學(xué)什么知識

更多關(guān)于web前端培訓(xùn)的問題,歡迎咨詢千鋒教育在線名師。千鋒教...

測一測
你知道多少IT梗

主站蜘蛛池模板: 中日韩精品无码一区二区三区| 久久精品国产一区二区| 国产一区二区三区在线免费观看| 国产福利电影一区二区三区,日韩伦理电影在线福 | 春暖花开亚洲性无区一区二区| 熟女性饥渴一区二区三区| 国产激情一区二区三区四区| 国产精品亚洲一区二区麻豆| 中文字幕精品亚洲无线码一区应用| 99无码人妻一区二区三区免费| 青青青国产精品一区二区| 国产在线精品一区二区夜色| 国产一区二区三区亚洲综合| 日本无卡码免费一区二区三区| 国产品无码一区二区三区在线| 色老头在线一区二区三区 | 日韩一区二区三区电影在线观看 | 国模大胆一区二区三区| 国产成人精品日本亚洲专一区| 亚洲视频一区二区在线观看| 人妻无码一区二区三区AV| 精品无人区一区二区三区| 久久国产精品无码一区二区三区| 污污内射在线观看一区二区少妇| 高清一区二区三区日本久| 无码毛片视频一区二区本码| 日韩精品无码一区二区三区不卡 | 99精品高清视频一区二区| 国产福利电影一区二区三区久久久久成人精品综合 | 色系一区二区三区四区五区| 综合激情区视频一区视频二区| 精品视频一区在线观看| 国产成人高清精品一区二区三区| 国产伦精品一区二区三区视频金莲| 无码国产亚洲日韩国精品视频一区二区三区 | 99久久精品国产高清一区二区| 在线播放一区二区| 91精品一区二区综合在线| 亚洲AV无码一区二区三区人| 亚洲AV无码一区二区三区人 | 国产成人无码一区二区三区|