Skip to content

Api插件

在框架内部使用的是alova.js,作为基础请求工具,alova 提供了基础的,与 axios 相似的基础请求能力,你可以配合 axios、fetch 等任何请求库使用,获得响应缓存、请求共享等开箱即用的特性

javascript
export class ApisPlugin {
    constructor() {
        this.name = 'ApisPlugin'
    }

    install({ctx}, options = []) {
        ctx.apis = {...ctx.http};
        options.forEach((item) => {
            const api = ctx.apis[item.replace(/\/(\w)/g, (_, c) => (c ? c.toUpperCase() : ""))] = {url: item} // 转成驼峰规则
            api.httpGet = (params, config) => ctx.http.httpGet(api.url, params, config)
            api.httpPost = (params, config) => ctx.http.httpPost(api.url, params, config)
        });
        if (typeof window === 'object') {
            if (!window.$apis) {
                window.$apis = ctx.apis
            }
        }
    }
}

export const useApisPlugin = new ApisPlugin()

注册插件

javascript
import install from "vue-bag-admin"
const {app, framework, plugins} = install()

const apis = ['/auth/local/register', '/auth/local', '/menus', 'secretkey']
framework.use(plugins.useApisPlugin, apis)
app.mount('#app')

使用

$global框架内置全局模板属性

vue

<template>
    <div>
        <!--   $global框架内置全局模板变量     -->
        <n-button @click="handleClick($global)">发送请求</n-button>
    </div>
</template>
<script setup>
const form = {};// 传递参数
const handleClick = ($global) => {
    $global.apis.AuthLocal.httpPost(form).then((res) => {
        console.log(res)
    })
}
</script>

getCurrentInstance获取全局属性

在vue3的官方文档中描述getCurrentInstance:可以获取挂载在全局的属性和获取上下文

vue

<template>
    <div>
        <n-button @click="handleClick">发送请求</n-button>
    </div>
</template>
<script setup>
const form = {};// 传递参数
const {appContext: {config: {globalProperties}}} = getCurrentInstance(); 
const handleClick = () => {
    globalProperties.$global.apis.AuthLocal.httpPost(form).then((res) => {
        console.log(res)
    })
}
</script>

修改url

在发送的过程需要临时修改url

vue

<template>
    <div>
        <n-button @click="handleClick($global)">发送请求</n-button>
    </div>
</template>
<script setup>
const form = {};// 传递参数
const handleSubmit = ($global) => {
    $global.apis.AuthLocal.url = '/edit/api/url'
    // 实际发生出去的就是 /api/edit/api/url
    $global.apis.AuthLocal.httpPost(form).then((res) => {
        console.log(res)
    })
}
</script>

修改baseURL

alova非常灵活,更多修改参数method官方配置

vue

<template>
    <div>
        <n-button @click="handleClick($global)">发送请求</n-button>
    </div>
</template>
<script setup>
const form = {};// 传递参数
const handleSubmit = ($global) => {
    const method = $global.apis.AuthLocal.httpPost(form)
    method.baseURL = '/api2' // 修改baseURL
    method.url = '/edit/api/url' // 也能修改url
    method.send().then((res) => { // 调用send发送请求
        console.log(res)
    })
}
</script>