mirror of
https://github.com/dataease/dataease.git
synced 2025-02-27 13:52:53 +08:00
54 lines
1.0 KiB
Vue
54 lines
1.0 KiB
Vue
![]() |
<template>
|
||
|
<component
|
||
|
:is="mode"
|
||
|
v-bind="$attrs"
|
||
|
v-on="$listeners"
|
||
|
/>
|
||
|
</template>
|
||
|
|
||
|
<script>
|
||
|
import Axios from 'axios'
|
||
|
|
||
|
export default {
|
||
|
name: 'AsyncComponent',
|
||
|
inheritAttrs: true,
|
||
|
props: {
|
||
|
// 父组件提供请求地址
|
||
|
url: {
|
||
|
type: String,
|
||
|
default: ''
|
||
|
}
|
||
|
},
|
||
|
data() {
|
||
|
return {
|
||
|
resData: '',
|
||
|
mode: ''
|
||
|
}
|
||
|
},
|
||
|
watch: {
|
||
|
url: {
|
||
|
immediate: true,
|
||
|
async handler(val, oldVal) {
|
||
|
if (!this.url) return
|
||
|
// Cache 缓存 根据 url 参数
|
||
|
if (!window.SyncComponentCache) {
|
||
|
window.SyncComponentCache = {}
|
||
|
}
|
||
|
let res
|
||
|
if (!window.SyncComponentCache[this.url]) {
|
||
|
window.SyncComponentCache[this.url] = Axios.get(this.url)
|
||
|
res = await window.SyncComponentCache[this.url]
|
||
|
} else {
|
||
|
res = await window.SyncComponentCache[this.url]
|
||
|
}
|
||
|
const Fn = Function
|
||
|
this.mode = new Fn(`return ${res.data}`)()
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
methods: {
|
||
|
|
||
|
}
|
||
|
}
|
||
|
</script>
|