【问题标题】:Vue - Can not use or access this.$router or vue instance in my mixin fileVue - 无法在我的 mixin 文件中使用或访问 this.$router 或 vue 实例
【发布时间】:2019-03-07 13:44:38
【问题描述】:

我的 src/mixins/chechauthMixin.js 文件如下:

export const checkauthMixin = {
    methods: {
        validateAuthentication: function(path) {
            if(this.$store.getters.isAuthenticated) {
                this.$router.push('/dashboard')
            }   
        }
    }
}

但是,这里似乎没有定义“this”这个词。我从一个组件或我的 routes.js 文件中调用这个 mixin 方法。如何访问 vue 实例? 如果这不可能,那么对于这种情况有什么好的解决方法?

我有一个类似的 mixin 文件,我在其中存储了我的社交身份验证功能,并且它也使用了“this”实例。当我调试并尝试在控制台中使用该实例时,它指出该元素未定义。但是,当我不调试时,我的身份验证代码能够正常工作。

这两种情况到底发生了什么?

【问题讨论】:

    标签: javascript vue.js vuejs2 frontend vuex


    【解决方案1】:

    我认为这是因为您使用的是旧的 javascript 调用

     validateAuthentication: function(path) {
            if(this.$store.getters.isAuthenticated) {
                this.$router.push('/dashboard')
            }   
        }
    

    尝试使用:

    export const checkauthMixin = {
       methods: {
          validateAuthentication(path) {
              if(this.$store.getters.isAuthenticated) {
                 this.$router.push('/dashboard')
              }   
          }
       }
    }
    

    我也使用 mixins,使用 this.$router 没有问题...但是我使用更新的语法编写 mixins。希望这能解决你的问题

    【讨论】:

    • 嗨!感谢您的帮助,我对此表示赞赏。所以我使用了这种方法,现在'this'不再是未定义的,而是引用了 validateAuthentication 方法,所以我在 main.js 中定义的 vue 实例似乎仍然无法访问。所以 this.$store 仍然是未定义的,this.$router 也是如此
    • @Hamza 请编辑您的问题并展示您如何尝试使用 mixin。我也许可以帮助你。您是否在组件中导入 vuex?你的geeters还好吗?..你真的可以在使用你的mixin的组件中使用你的getter吗?我的意思是,如果您将 mixin 的代码直接粘贴到组件中会发生什么?
    • 所以显然我发现了我的问题。实际上,在这种情况下,我没有正确使用 mixin。 mixins 旨在用于共享相似功能的组件,所以我显然想使用我刚刚遇到的路由保护。非常感谢您抽出时间来帮助我。非常感谢!
    【解决方案2】:

    好的,所以我想我找到了问题所在。我实际上错误地使用了mixin。 mixin 应该用于共享相似功能的多个组件。我试图将 mixin 用作独立函数。

    我真正想要使用的是路由守卫。所以 vue-router 有一个名为 beforeach 的函数,这就是我想使用的,但当我遇到这个问题时并不知道。

    【讨论】:

      【解决方案3】:

      如果this 不是您所期望的,请尝试self

      validateAuthentication: function(path) {
          var self = this;
          if(self.$store.getters.isAuthenticated) {
              self.$router.push('/dashboard')
          }   
      }
      

      欢迎来到 Stack Overflow。下一次,尽量让你的代码和问题尽可能简洁。 "Walls of Text"(你有的那种杂乱无章的段落)让你的问题很难快速回答,因此它不会像其他情况下那样迅速得到回答,或者根本不会得到回答。请注意,此网站上的人们不想花时间理解您的问题,所以他们会跳过它。

      另外,请务必添加您尝试过的内容,以及您遇到的错误。祝你好运!

      【讨论】:

      • 感谢您对冗长的问题表示歉意。据我了解,vue mixin 主要用于可重用代码,所以我在路由文件中使用这个 mixin 方法作为 beforenter 调用。在这种情况下,它没有连接到组件。这不是使用 mixins 的好方法吗?
      • @Hamza 您正在以正确的方式使用 mixins。我不同意 Travis 的观点。我认为您的问题准确且易于理解
      猜你喜欢
      • 2017-05-21
      • 1970-01-01
      • 2021-12-13
      • 1970-01-01
      • 2019-06-01
      • 2021-06-02
      • 2021-08-25
      • 2019-02-19
      相关资源
      最近更新 更多