vue-i18n beforeDestroy不能调用this.$t

1,592 阅读1分钟

提出[Bug Report]: jsfiddle.net/masongzhi/t…

因为vue-i18n在beforeDestroy中会注销this.$t,所以在beforeDestroy不能调用this.$t

beforeDestroy (): void {
    if (!this._i18n) { return }

    if (this._subscribing) {
      this._i18n.unsubscribeDataChanging(this)
      delete this._subscribing
    }

    if (this._i18nWatcher) {
      this._i18nWatcher()
      delete this._i18nWatcher
    }

    if (this._localeWatcher) {
      this._localeWatcher()
      delete this._localeWatcher
    }

    this._i18n = null
  }

可以将注销操作放在this.$nextTick中执行

PR:github.com/kazupon/vue…

注意:这个解决方案只能解决同步代码,如果在异步代码中还是会报错,具体解决方法是引入Vue注册的i18n,调用i18n.t替代this.$t