vue-i18n:如何在 vue 实例过滤器中使用
vue-i18n : how to use inside vue instance filter
我想使用 过滤器 来执行翻译。
问题是 'this' 没有指向我的过滤器函数中的 vue 实例。
这是我目前拥有的。
在我的模板中我有这个:
<p>{{ parking.status | translate }} </p>
在我的组件中我有这个:
new Vue({ ...
filters: {
translate: function(value, vue) {
return this.$i18n.t('MLAA-47');
}
我得到的错误是 this == undefined。
我如何将它指向我的过滤器函数中的 vue 实例?
正如该答案评论中的@vitaly-mosin 所指出的那样,您不能在过滤器函数中使用 this
。
filters are primarily designed for text transformation purposes. For
more complex data transforms in other directives, you should use
Computed properties instead.
我遇到了同样的问题,我解决了将使用 $i18n 的翻译移动到计算方法,例如:
在你的模板中,而不是这个:
<p>{{ parking.status | translate }} </p>
改为:
<p>{{ translateStatus(parking.status) }} </p>
在方法中:
methods: {
translateStatus (status) {
return this.$t(status)
}
},
我猜你有一个动态状态(不总是返回:'MLAA-47'),你应该断言你有所有这些的翻译。它对我有用!
希望对你也有帮助
我们可以像这样导入导出国际化实例的文件
import i18n from '@/i18n.js'
然后像这样使用它
i18n.t('your.message')
我不确定这是否是个好主意,但到目前为止它正在做我想要的。
像这样定义过滤器
// the instance.vue will be set on App.vue
export const instance = {
vue: null
};
// little helper
const t = (key) => instance.vue?.$t?.(key);
export default {
filter: (v) => v + t('somekey')
}
然后在App.vue
(或者你使用的任何东西)中,做
import {instance} from '@/filters'
export default {
mounted() {
instance.vue = this; // set the instance here
我想使用 过滤器 来执行翻译。
问题是 'this' 没有指向我的过滤器函数中的 vue 实例。
这是我目前拥有的。
在我的模板中我有这个:
<p>{{ parking.status | translate }} </p>
在我的组件中我有这个:
new Vue({ ...
filters: {
translate: function(value, vue) {
return this.$i18n.t('MLAA-47');
}
我得到的错误是 this == undefined。
我如何将它指向我的过滤器函数中的 vue 实例?
正如该答案评论中的@vitaly-mosin 所指出的那样,您不能在过滤器函数中使用 this
。
filters are primarily designed for text transformation purposes. For more complex data transforms in other directives, you should use Computed properties instead.
我遇到了同样的问题,我解决了将使用 $i18n 的翻译移动到计算方法,例如:
在你的模板中,而不是这个:
<p>{{ parking.status | translate }} </p>
改为:
<p>{{ translateStatus(parking.status) }} </p>
在方法中:
methods: {
translateStatus (status) {
return this.$t(status)
}
},
我猜你有一个动态状态(不总是返回:'MLAA-47'),你应该断言你有所有这些的翻译。它对我有用!
希望对你也有帮助
我们可以像这样导入导出国际化实例的文件
import i18n from '@/i18n.js'
然后像这样使用它
i18n.t('your.message')
我不确定这是否是个好主意,但到目前为止它正在做我想要的。
像这样定义过滤器
// the instance.vue will be set on App.vue
export const instance = {
vue: null
};
// little helper
const t = (key) => instance.vue?.$t?.(key);
export default {
filter: (v) => v + t('somekey')
}
然后在App.vue
(或者你使用的任何东西)中,做
import {instance} from '@/filters'
export default {
mounted() {
instance.vue = this; // set the instance here