Вызов функции $t в плагине nuxt.js

Я строю приложение nuxt.js. Поэтому я планирую внедрить вспомогательный объект и функции, которые повторно используются в контексте.

Итак, я создал плагин

export default (context) => {
     const { $t } = context.app;

     const validators = {
      firstNameRules: [
         v => !!v || $t('formValidation.NO_FIRST_NAME'),
         v => v.length < 128 || $t('formValidation.INVALID_FIRST_NAME_TOO_LONG')
       ]
     };

     context.$formValidators = validators;
}

Объект введен в контекст правильно, и я могу получить доступ к правилам, где я хочу. Однако попытка запустить функцию $ t приводит меня к ошибке

Cannot read property '_t' of undefined 

В общем, я хотел бы запустить функцию $ t и получать локализованное сообщение, когда что-то происходит. Это возможно и если да, то как?

2 ответа

Решение

Так что мне удалось решить это в конце концов.

Так что дело в том this ведет себя в JS

Я изменил код, чтобы быть таким:

export default function(context) {
  function getValidators() {
    return {
      firstNameRules: [
        v => !!v || this.$t('formValidation.NO_FIRST_NAME'),
        v => v.length < 128 || this.$t('formValidation.INVALID_FIRST_NAME_TOO_LONG')
      ]
    };
  }

  Vue.prototype.$formValidators = getValidators;
  context.$formValidators = getValidators;
}

А потом из моего компонента / страницы

data() {
  const { firstNameRules } = this.$formValidators();
}

Делать такие вещи, this сохраняется вплоть до $t функция

Попробуйте использовать inject:

export default (context, inject) => {
  const { $t } = context.app;
  const validators = {
    firstNameRules: [
      v => !!v || $t('formValidation.NO_FIRST_NAME'),
      v => v.length < 128 || $t('formValidation.INVALID_FIRST_NAME_TOO_LONG')
    ]
  };

  context.$formValidators = validators;
  inject('formValidators', validators);
};
Другие вопросы по тегам