【问题标题】:Call $t function in nuxt.js plugin在 nuxt.js 插件中调用 $t 函数
【发布时间】:2019-02-05 15:38:30
【问题描述】:

我正在构建一个 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 函数并在发生事情时获取本地化消息。这可能吗?如果可以,怎么做?

【问题讨论】:

    标签: nuxt.js nuxt-i18n


    【解决方案1】:

    所以我最终设法解决了它。

    所以问题在于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 函数

    【讨论】:

      【解决方案2】:

      尝试使用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);
      };
      

      【讨论】:

      • 不,这不会改变任何东西。但我确实设法解决了问题。 this 行为有问题
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-03
      • 1970-01-01
      • 2019-12-03
      • 2023-03-03
      • 1970-01-01
      相关资源
      最近更新 更多