javascript - 重用相同的 View 和逻辑,只需更改 VUE 中的端点

标签 javascript vue.js code-reuse

我遇到了这样的情况:我有一堆行为相同的端点:

http:://api.development/projects/status/types

http:://api.development/projects/errors/types

http:://api.development/projects/priority/types

它们都有相同的动词:GET、POST(添加)、PUT(编辑)和 DELETE,并且共享相同的数据结构:

{
    name: "",
    description: ""
}

因此,我的客户端上的 View 和管理逻辑将是相同的。

我正在为客户端使用VUE。我考虑创建一个组件来重用 View 并创建包含该组件的其他三个组件。因此逻辑将被写入所有这三个父组件中。

但是我如何实现在它们之间重用它的逻辑呢?唯一会改变的代码是端点。

最佳答案

您可以创建一个服务文件,并在其中声明您的 API 调用,然后将该文件导出为组件并在应用程序中的任何位置重用这些调用。

它看起来像这样:

import axios from 'axios'
const api = 'API'

export default {
  data() {
    return {
      user: `${api}/some/route`,
      hotels: `${api}/other/route/`
    }
  },
  methods: {
    getHeaders() {
      return {
        headers: {
          Authorization: 'Bearer ' + 'TOKEN',
          'Content-Type': 'application/json'
        }
      }
    },
    getModule(route, cb) {
      axios
        .get(route, this.getHeaders())
        .then(response => {
          cb(response.data)
        })
        .catch(err => {
          cb(err)
        })
    },
    postModule(route, data, cb) {
      axios
        .post(route, data, this.getHeaders())
        .then(response => {
          cb(response.data)
        })
        .catch(e => {
          cb(e)
        })
    },
    putModule(route, data, cb) {
      axios
        .put(route, data, this.getHeaders())
        .then(response => {
          cb(response.data)
        })
        .catch(e => {
          console.log(e)
        })
    },
    deleteModule(route, id, cb) {
      axios
        .delete(route + id, this.getHeaders())
        .then(response => {
          cb(response.data)
        })
        .catch(e => {
          console.log(e)
        })
    }
  }
}

在要执行调用的组件中,执行以下操作:

import ServiceFileName from '@/services/YourServiceFileName'

methods:{
getData () {
      Main.methods.getModule(Main.data().hotels, data => {
        console.log(data)
      })
    }
}

关于javascript - 重用相同的 View 和逻辑,只需更改 VUE 中的端点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57322949/

相关文章:

amazon-web-services - 使用相同代码库管理多个静态网站的解决方案

spring - 重用自定义 JSP 标记

kotlin - 使用 Javalin 在多个路径中重用同一组路由

javascript - Chrome 开发工具中有没有办法不跳过其他 JavaScript 文件?

javascript - 尝试从 pdf 解压缩外部参照流 - 获取 "ERROR incorrect header check"

javascript - 将服务变量绑定(bind)到指令?

vue.js - 如何在v-select组件vuetify上设置过滤条件?

javascript - Vue 计算属性

angular - 如何在其他项目中重用 Angular 模块

javascript - 在不同的 attr 中定义的指令 attr 内的回调函数