Измените локаль момента во время выполнения глобально (сделайте Vue.prototype.moment реактивным) - PullRequest
0 голосов
/ 10 октября 2019

Я импортирую момент в Vue следующим образом:

import moment from 'moment-timezone/builds/moment-timezone-with-data-2012-2022';
Vue.prototype.moment = moment;

Затем в моем created() я устанавливаю нужные языки. Имейте в виду, что это работает с обновлением, но не во время выполнения .

export default new Vue({
   render: h => h(BaseApp), 

   mounted() {

      let supportedLanguages = ['tr', 'etc'];

      supportedLanguages.forEach((val) => {
            moment.locale(val, {
                months: this.$i18n.messages[val]._months_,
                monthsShort: this.$i18n.messages[val]._months_short_,
                monthsParseExact: true,
                weekdays: this.$i18n.messages[val]._weekdays_,
                weekdaysShort: this.$i18n.messages[val]._weekdays_short_,
                weekdaysMin: this.$i18n.messages[val]._weekdays_min_,
                weekdaysParseExact: true,
            });
        })

   },

   methods: {
       changeLocale(lang) {
          this.moment.locale(lang);
       }
   }
})

Тем не менее, в моей консоли, если я пытаюсь $vm0.moment.locale(), он возвращает обратно правильную локаль

Во всех моих компонентах я использую его в шаблоне

<h1>{{ day.format('ddd') }}</h1>

Проблема в том, что когда я пытаюсь изменить локаль момента, она не меняется в каждом компонентешаблон. Есть ли способ принудительного обновления во всех шаблонах. (Я попытался $vm.$forceUpdate() в корне)

Как мне сделать момент реагирующим?

1 Ответ

0 голосов
/ 10 октября 2019
Two-way data binding by VueJS. It's not moment problem.

var parent = new Vue({
  data: {
    a: 1
  }
})
// $addChild() is an instance method that allows you to
// programatically create a child instance.
var child = parent.$addChild({
  inherit: true,
  data: {
    b: 2
  }
})
console.log(child.a) // -> 1
console.log(child.b) // -> 2
parent.a = 3
console.log(child.a) // -> 3
...