【问题标题】:Refactoring vue2 code重构 vue2 代码
【发布时间】:2017-11-24 12:20:42
【问题描述】:

我想通过将身份验证功能分离到不同的功能来重构我的代码

所以在我目前的登录功能中

  submitdata () {
    this.$axios({
      url: '/oauth/token',
      method: 'post',
      baseURL: 'http://127.0.0.1:8000',
      data: this.login_form
    })
      .then(
        (res) => {
          this.submitted = false
          localStorage.setItem('access_token', res.data.access_token);
          localStorage.setItem('refresh_token', res.data.refresh_token);

          } else {
            this.$swal('Oops...', 'Invalid Login!', 'error')
          }

        },
        (err) => {
          this.submitted = false
          this.$swal('Oops...', 'Invalid Login', 'error')
        }
      )

    return
  },

我想做的是把它外包到一个不同的文件中,所以我创建了一个文件 auth.js

auth.js
import vue from 'vue';

login(){  
  this.$axios({
    url: '/oauth/token',
    method: 'post',
    baseURL: 'http://127.0.0.1:8000',
    data: this.login_form
   }).then()....
 }

现在我只想在我的组件中调用

auth.login.then()...

但现在我无法访问 Vue this.$ 原型

我该怎么办?

【问题讨论】:

    标签: javascript vue.js vuejs2


    【解决方案1】:

    我会将axios 放入名为api-client.js 的单独js 模块中。然后,您只需导入该模块即可在代码中的任何位置使用它,并且您不仅限于拥有 Vue 实例,这现在是您的问题。另一件事是在我看来,将 http 客户端与视图实体结合起来并不是一个好的设计。 所以你会有类似的东西(在伪代码中):

    api-client.js

    import axios from 'axios'
    
    login(){
       axios.get('url').then...
    }
    

    让 api-client 简洁明了。它的任务是only 发出一个 HTTP 请求,没有别的,与视图(Vue)操作无关。

    登录表单.vue

    import apiClient from '/some/path/api-client'
    
    submitdata() {
       apiClient.login().then...
    }
    

    【讨论】:

    • 有点令人困惑的是,在创建 apiClient 时会喊它是 js 或 vue 组件。 Ans 我也已经在 vuejs 中设置了我的全局 http url 和拦截器,我也可以重用它们。哪个是可重用性最好的编码标准?
    • api-client 应该是一个 js 模块。我认为你应该把你的 url 也放到 api-client 中,然后你可以通过公共方法公开它们。
    • 我现在看到了,但是现在是一个带有登录功能的示例,如果我将它放在 auth.js 中,然后返回一个承诺,然后我将如何在 js 函数的登录函数中访问 vuejs http 资源。同样在我的 vuejs 中,我还设置了 http 资源库 url 和拦截器
    • 你不需要访问 vue 里面的登录功能。您需要获取令牌,这就是您应该关心的全部。然后从 vue 调用登录函数来响应点击什么的。然后在回调中,您可以为登录用户呈现正确的 UI。
    • 谢谢我现在看到逻辑了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-01
    • 1970-01-01
    相关资源
    最近更新 更多