0

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

错误编译消息

4

2 回答 2

0

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

所以事情是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功能

于 2019-02-05T17:12:13.667 回答
0

尝试使用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);
};
于 2019-02-05T17:39:49.820 回答