Vue3 Composition API PerfectScrollbar Plugin не указан элемент для инициализации

Я пытаюсь создать плагин Perfect Scrollbar для Vue3, но у меня возникла ошибка когда я инициализирую объект:

Ошибка: не указан элемент для инициализации PerfectScrollbar

Компонент полосы прокрутки:

import PerfectScrollbar from 'perfect-scrollbar'
import { isEmpty } from 'lodash'
import {
 onMounted,
 reactive,
 ref,
 h
} from 'vue'

export default {
  name: 'VuePerfectScrollbar',
  props: {
    options: {
      type: Object,
      required: false,
      default: () => {
      }
    },
    tag: {
      type: String,
      required: false,
      default: 'div'
    }
  },
  setup(props, {emit, slots}) {
    const el = ref(null)
    let ps = reactive({})
    
    onMounted(() => {
      if (isEmpty(ps)) {
        ps = new PerfectScrollbar(el, props.options)

      }
    })


    return () => h(
      props.tag,
      {
        class: 'ps',
        ref: el
      },
      slots.default && slots.default()
    )
  }
}

Я сделал console.log прямо перед инициализацией, и там есть ссылка на элемент, поэтому я не уверен, почему появляется ошибка. Согласно this This error simply means that you are calling PerfectScrollbar on something that doesn't exist!, возможно, DOM не был обновлен в данный момент ? Я тоже пробовал с nextTick, но это не сработало.


person Petru Lebada    schedule 10.01.2021    source источник
comment
что делает if (isEmpty(ps)) {?   -  person Boussadjra Brahim    schedule 10.01.2021
comment
@BoussadjraBrahim, я забыл добавить импорт lodash. Это функция lodash для проверки состояния объекта. Во второй строке настройки я объявляю реактивный пустой объект ps, а позже методом create я обновляю его новым объектом PerfectScrollbar.   -  person Petru Lebada    schedule 10.01.2021


Ответы (1)


Вы должны получить доступ к атрибуту value в свойстве ref следующим образом:

ps = new PerfectScrollbar(el.value, props.options)
person Boussadjra Brahim    schedule 10.01.2021
comment
блин ... и я знал это, но я все время забываю об этом ... спасибо - person Petru Lebada; 10.01.2021