Я хочу реализовать перетаскиваемую строку с использованием событий mousedown
, mousemove
и mouseup
.
В своей первой попытке я пытался использовать свойства классов-функций-стрелок: https://codesandbox.io/s/example-1-15psm?fontsize=14&hidenavigation=1&theme=dark
Но свойство position
в Test.vue
кажется неактивным. Не уверен, но я предполагаю, что это из-за этого Vue ограничение:
Не используйте стрелочные функции в свойстве опций или обратном вызове, например
created: () => console.log(this.a)
илиvm.$watch('a', newValue => this.myMethod())
. Поскольку стрелочная функция не имеетthis
,this
будет обрабатываться как любая другая переменная и лексически просматриваться в родительских областях до тех пор, пока не будет найдена, что часто приводит к таким ошибкам, как UncaughtTypeError: Cannot read property of undefined
илиUncaught TypeError: this.myMethod is not a function
.
Во второй попытке я попытался использовать стандартные методы класса: https://codesandbox.io/s/example-2-t7beu?fontsize=14&hidenavigation=1&theme=dark
Это работает, за исключением того, что связанные функции onMouseMove
и onMouseUp
в Test.vue
анонимны, я не могу их отвязать с помощью removeEventListener
.
Итак, как правильно использовать addEventListener
и removeEventListener
в компонентах класса Vue?