vue条件渲染问题

\#\#\# 问题描述
页面加载时,会先出现v-else下的结果,然后才出现v-if下的结果
\#\#\# 相关代码

<el-image class="miner-img" :src="'https://cloud.dxpool.com/' + minerInfo.img_url" fit="contain" v-if="minerInfo.img_url"></el-image>
<el-image class="miner-img" :src="require('../../../assets/images/noimage.svg')" v-else></el-image>

\#\#\# 你期待的结果是什么?实际看到的错误信息又是什么?
希望在v-if="minerInfo.img_url"为真时,直接输出图片,不经过v-else

阅读 2.4k
2 个回答

这个你刚开始请求数据的时候,img_url 字段是没有的, 所以会走 else 逻辑。

你可以加个 loadingFlag 状态,默认是true, 当加载完数据的时候 设置为 false, 大致代码如下:

<el-image class="miner-img" :src="'https://cloud.dxpool.com/' + minerInfo.img_url" fit="contain" v-if="minerInfo.img_url"></el-image>
<el-image class="miner-img" :src="require('../../../assets/images/noimage.svg')" v-else-if="!loadingFlag"></el-image>

你这个应该是延时造成的,起先img_url没有值,所以显示了else的图片,然后你赋值了,才显示。
如果真的很在意图片变动,可以考虑在外面包裹一层,加个判断,等赋值完后再显示。

<div v-if="flag">
    <el-image class="miner-img" :src="'https://cloud.dxpool.com/' + minerInfo.img_url" fit="contain" v-if="minerInfo.img_url"></el-image>
    <el-image class="miner-img" :src="require('../../../assets/images/noimage.svg')" v-else></el-image>
</div>
export default {
    data() {
        return {
            flag: false
        }
    },
    methods: {
        requestDone() {
            this.flag = true
        }
    }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题