【问题标题】:How to watch and set dynamically a variable?如何动态观察和设置变量?
【发布时间】:2019-07-17 22:54:31
【问题描述】:

您好,这是我在 StackOverflow 上的第一篇文章。

我正在致力于动态翻译网站。我正在使用包vuejs-localization。 如何直接切换语言?

我正在使用最新版本的 VueJS 和 Laravel。

这是我的语言选择器上的代码:

export default {
  name: "LanguageDropDown",
  data() {
    return {
      languages: [
        {
          lang: "fr",
          text: "Français",
          icon: "fr",
        },
        {
          lang: "gb",
          text: "English",
          icon: "gb",
        },
        {
          lang: "us",
          text: "US",
          icon: "us"
        },
      ],
    };
  },
  computed: {
    getCurrentLang: function() {      
      return this.$lang.getLang();
    },
  },
  methods: {
    setLanguage(lang) {
      this.$root.$emit("setLang", lang);
    },
    setLang(lang, index) {
      this.$root.$emit("setLang", this.languages[index].languages[lang], index);
    },
  },
};

这就是我的 App.js 中的内容:

const app = new Vue({
  el: '#app',
  router,
  data() {
    return {
      lang: 'fr'
    };
  },
  created() {
    this.$lang.setLang( this.lang ); 
  },
  mounted() {
    let _this = this;
    this.$root.$on( 'setLang', function( lang ){      
      _this.lang =  lang ; 
      console.log(_this.lang);
    });
  },
  watch: {
    lang :{
      handler(val){
        this.lang = val;
        console.log('changed to :' + this.lang);
      },
    },
  },
})

我希望通过将变量 'fr' 更改为 'us' 或 'gb' 来进行翻译,但日志显示 lang 正在切换,但没有发生任何事情......

感谢您的帮助。

【问题讨论】:

  • 我不明白您为什么要监视 lang 数据而不是直接在 .on 事件中设置 valur
  • 我已经习惯了这样做,所以这是我想要修复它的唯一方法

标签: laravel vue.js translation watch


【解决方案1】:

要更改语言,您需要致电this.$lang.setLang。你可以在手表中做到这一点

watch: {
    lang :{
      handler(val){
        this.lang = val;
        this.$lang.setLang(val)
        console.log('changed to :' + this.lang);
      },
    },
  },

【讨论】:

  • 您好,感谢您的回答,翻译仅在我转到其他页面时完成,但至少它可以工作。如果您对此有想法,欢迎您。感谢您的关注!
猜你喜欢
  • 2021-06-02
  • 1970-01-01
  • 2017-07-24
  • 1970-01-01
  • 1970-01-01
  • 2011-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多