Синтаксис функций ES6? [Дубликат]

1

Я пытаюсь позвонить в свой магазин, помещенный в хранилище:

methods: {
    ...mapActions('Modal', [
        'toggleActive',
    ]),
    close: () => {
        this.toggleActive();
    }

Это приводит к ошибке:

Uncaught TypeError: Cannot read property 'toggleActive' of undefined

Выполнение следующих работ:

close: function() {
    this.toggleActive();
}

Как я могу использовать синтаксис функции ES6 с vue/vuex?

Теги:
vue.js
vuejs2
vuex

1 ответ

4
Лучший ответ

Вы используете функции стрелок. Функции Arrow закрываются над this в контексте, где они определены, вместо того, чтобы устанавливать его, когда они называются function функций. Например:

// Whatever 'this' means here
var o = {
    foo: () => {
        // ...is what 'this' means here when 'foo' is called
    }
};

Вероятно, вы просто хотите использовать синтаксис метода:

methods: {
    // (I'm using a simple method for toggleActive just for clarity; if you're
    // transpiling with something that understands rest notation for
    // objects, your 'mapActions' thing is probably fine *provided* that
    // the functions it creates aren't also arrow functions
    toggleActive() {
        // ...
    },
    close() {
        ths.toggleActive();
    }
};

Обратите внимание, что это зависит от всех обычных this материала, описанного в этом вопросе ответы.

  • 0
    Спасибо, я посмотрел вашу ссылку и ваш отредактированный ответ, но я все еще растерялся, хотя как функции стрелок - с «this» внутри должно ссылаться на состояние пространства имен vuex?
  • 0
    @panthro: зачем они это делают? Опять же, они закрывают this , точно так же, как закрывают другие переменные. (Если вы не видите мой пример с foo , нажмите Обновить.)
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню