uniapp image app端不显示

踩坑历程

事情是这个样子的~

uniapp 中的 image 组件中,mode 属性的默认值是 scaleToFill ,即不保持纵横比缩放图片,使图片的宽高完全拉伸至填满 image 元素,这样的话,图片会被拉伸,很难看,找了下,widthFix 值更符合我的要求。
同时,我的所有图片都是保存至 /static 目录下,且都是 png 格式的,既然做了组件,肯定就一起做了。

组件重写

所以有了以下代码:
/components/ml/image.vue

<template>
  <image :src="`/static/${src}.png`" :mode="mode" />
</template>
<script>
export default {
  props: {
    src: { type: String, required: true },
    mode: { type: String, default: "widthFix" },
  },
};
</script>
<style lang="scss" scoped>
image {
  width: 100%;
  will-change: transform;
}
</style>

组件全局引用

想要使用组件,就得引入嘛,我希望直接全局引入,在 main.js 中(只有 main.js 部分代码):

import Vue from "vue";
import image from "@/components/ml/image";
Vue.component("ml-image", image);

然后,就可以在页面中使用 ml-image 组件了。

测试

h5 端

测试正常

app 端

图片不能正常加载

问题排查

排查问题,排除加载错误、路径错误等问题后,就只剩全局引用了,尝试不使用全局引用组件,直接在需要使用的页面引入组件,成功!

解决办法

不要全局引用组件,需要使用此组件的页面,在页面中引入再使用即可。

疑问待解决

为啥全局引用在 web 端正常,在 app 端不能正常加载?是 uniapp 内部渲染问题?希望有思路的小伙伴儿留言讨论。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。