@cihone8122

Vue3. Как получить доступ к функции из директивы?

Пример кода:
<!DOCTYPE html>
<html>
<head></head>
<body>
<div id="app">
  <button v-test>click me</button>
</div>

<script src="https://unpkg.com/vue@3.0.5/dist/vue.global.js"></script>
<script>
(function () {
  'use strict';

  const App = {};

  const TestDirective = {
    data() {
      return {
        someData: [123, 456]
      }
    },
    methods: {
      helloMethod() {
        console.log('hello from method!');
      }
    },
    mounted() {
      // ↓↓↓ Вот тут появляется ошибка "Uncaught TypeError: Cannot read property 'helloMethod' of undefined"
      this.helloMethod()
      // ↑↑↑

      console.log(this.someData);
    }
  };

  const app = Vue.createApp(App);
  app.directive('test', TestDirective);
  app.mount('#app');
})();
</script>
</body>
</html>


При запуске этого кода в консоли выводится ошибка:
Uncaught TypeError: Cannot read property 'helloMethod' of undefined

Причина вроде бы понята - переменная this неопределена.
Но тогда как получить доступ к функции helloMethod и локальной переменной someData?
  • Вопрос задан
  • 299 просмотров
Решения вопроса 1
profesor08
@profesor08 Куратор тега JavaScript
Читай внимательно тут https://v3.vuejs.org/guide/custom-directive.html, особое внимание на работу с аргументами.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
black1277
@black1277
Вольный стрелок
вместо this.helloMethod() нужно писать this.methods.helloMethod()
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы