26 lines
530 B
Vue
26 lines
530 B
Vue
<script setup>
|
|
/** 官网可配置图片统一处理加载失败;替代内容由调用处提供,不伪造头像或二维码。 */
|
|
import { ref, watch } from "vue";
|
|
|
|
defineOptions({ inheritAttrs: false });
|
|
const props = defineProps({ src: String, alt: String });
|
|
const failed = ref(false);
|
|
watch(
|
|
() => props.src,
|
|
() => {
|
|
failed.value = false;
|
|
},
|
|
);
|
|
</script>
|
|
|
|
<template>
|
|
<img
|
|
v-if="src && !failed"
|
|
v-bind="$attrs"
|
|
:src="src"
|
|
:alt="alt"
|
|
@error="failed = true"
|
|
/>
|
|
<slot v-else />
|
|
</template>
|