国产成人欧美一区二区三区一色天_欧美在线资源_视频一区欧美_欧美 日韩 中文字幕_国产精品久久久久久久久久_色狠狠一区

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

當(dāng)前位置:首頁(yè)  >  IT問(wèn)答庫(kù)  >  Web基礎(chǔ)知識(shí)

Vue3-巧用指令

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

推薦答案

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

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

v2-c7f6420386db61816337233c3a8001e5_1440w

  directive

  指令的話這里就不多說(shuō)了,參考官方文檔(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>

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

<div

    class="mobiReview"

    v-OverlayScrollbars

  ></div>

sortablejs

這里算是一個(gè)額外補(bǔ)充說(shuō)明,有些同學(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會(huì)出現(xiàn)拖拽數(shù)據(jù)錯(cuò)亂的情況,或者說(shuō)在拖拽一個(gè)列表,而列表的keyindex,也會(huì)出現(xiàn)這個(gè)問(wèn)題。

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

最新問(wèn)答資訊

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

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

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

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

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

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

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

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

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

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

相關(guān)問(wèn)題

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

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

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

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

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

同時(shí)學(xué)會(huì)css,css是用來(lái)美化html頁(yè)面的為頁(yè)面提供布局和格式,最...

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

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

web前端有哪些框架?

同學(xué)您好,web前端總共有11個(gè)框架,因?yàn)閣eb前端框架可以很大程度...

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

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

測(cè)一測(cè)
你知道多少IT梗

主站蜘蛛池模板: 日韩精品一区二区三区在线观看 | 人人爽人人爽人人片av | 国产中文视频 | 一区二区在线不卡 | 国产97视频在线观看 | 免费骚视频 | 欧美啪啪网站 | 亚洲一区 中文字幕 | 国产目拍亚洲精品99久久精品 | 黄色大片网 | 久久国产精品99久久久大便 | 又爽又黄axxx片免费观看 | 欧美在线播放一区 | 日韩免费av | www.日本三级 | 91操操操| 日韩美女爱爱 | 欧美日韩国产一区二区三区 | 成人免费视频 | 99精品久久久国产一区二区三 | 亚洲视频在线看 | 精品www| 国产视频第一页 | 日本在线网站 | 成人免费在线观看 | 日本人麻豆 | 999精品视频 | 国产精品久久久久久久久久久新郎 | 天天天操操操 | 在线看亚洲 | 激情婷婷| 国产精品久久久久久久免费大片 | 中文字幕成人av | 午夜精品一区二区三区在线视频 | 999久久久| 欧美成人h版在线观看 | 大象一区| 精品一区二区三区在线观看 | 国产高清精品一区 | 日本成人在线观看网站 | 国产高清视频一区二区 |