【问题标题】:Vue 'computed' filtersVue“计算”过滤器
【发布时间】:2016-10-31 21:21:48
【问题描述】:

是否可以从过滤器中提取变量,并在更改时更新过滤器?就像在计算属性中一样?

我希望能够做类似的事情:

Vue.filter('t', function(val) {
    return this.currentLanguage[val];
});

并在this.currentLanguage 更改时让过滤器重新编译模板。

显然我可以传入一个额外的参数,但我不想对每个字符串都这样做。

我的代码在切换组件时可以正常工作,那么有没有办法强制重新编译?我正在使用vue-router,但是

this.$route.router.go({
    path: this.$route.router.path,
        query: {
            t: + new Date()
         }
    })
}

很遗憾没有触发重新编译。

【问题讨论】:

  • 你能更深入地解释这个问题吗?我做了一个JSFiddle here,其中过滤器依赖于一个外部变量。它可以正常工作。
  • 嗯,我明白了。我认为我的问题是我将我的翻译器用作插件,Vue.use(Translator)。因此,在我的翻译中,this.currentLanguage 没有被观察到,因为它只是一个对象的普通属性,而不是在 Vue 数据中。
  • 如果您提供可证明此行为的可运行代码,帮助会容易得多。 MCVE 类型的东西总是很棒

标签: vue.js vue-router vue-component


【解决方案1】:

您可以使用以下方式定义反应性:

Vue.util.defineReactive(obj, key, val)

https://jsfiddle.net/pespantelis/qzuyxqq7/3/

另外,我为此创建了一个包:

https://github.com/pespantelis/vue-localizer

【讨论】:

    猜你喜欢
    • 2018-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-16
    相关资源
    最近更新 更多