Vue 动态图片加载路径问题和解决方法
最近在做一个树形结构的组件,使用了Vue和element UI中el-tree组件。因为树中每个节点都需要显示一个图标图片,并且需要根据后台传入的数据类型动态地显示,所以图片的路径需要动态地加载。下面是核心组件代码:
<el-tree :data="data" class="tree-view" node-key="id" :props="defaultProps" @node-click="click" :default-checked-keys="[1]">
<span class="custom-tree-node" slot-scope="{node, data}">
<img v-if="data.iconSkin != undefined" :src="data.iconSkin" style="margin-right: 0.3em; " />
<span @click="getChildNodes(data.id) ">{{ node.label }}</span>
</span>
</el-tree>
后台交互使用了vuex和axios,本篇文章后台数据没有问题,所以不做展示了。后台传入的数据结构是这样的:
{
"id": "2|299|0",
"open": false,
"maxStatus": 0,
"iconSkin": "res1",
"name": "test",
"children": [],
"parent": false
}
Vue中动态加载图片需要使用require,这个很多文章都有介绍。具体可以参考这篇文章vue的 v-for 循环中图片加载路径问题。
一开始我认为直接在后台传入完整的js语句就能加载,所以我把后台传入的数据iconSkin写成了完整的路径。也就是require(@/assets/resourceimage/res1.png),具体代码跟最上面的代码片段一致。
本来以为这样就能加载成功了,打开chrome查看发现图片裂开了,也就是图片获取失败了。检查HTML元素,发现图片的路径是字符串。
这是因为js在解析对象的时候并不会把字符串当成js对象去解析,因此解析出的路径显示成了字符串。在多次尝试和查资料以后我找到了几个解决方案
方案一:在src路径写require
这个方案比较简单,<img v-if="data.iconSkin != undefined" :src="require(@/assets/resourceimage/${data.iconSkin}.png)" style="margin-right: 0.3em; " />
只要保证数据是正确的,这个方案是完全可以的。
方案二:使用computed
computed是Vue里的计算属性,computed会在state数据更新时自动计算。
computed: mapState({
tree: function(state) {
const data = state.resTree.treeResult;
if (data != null) {
const result = state.resTree.treeResult;
return result.data;
}
}
})
但是注意,此时不能使用方案一那样的形式了,应该将computed的数据绑定在组件上,然后通过v-for的方式进行调用。以element-UI的el-tree组件为例,我们可以这样写:
<el-tree :data="tree" class="tree-view" node-key="id" :props="defaultProps" >
<span class="custom-tree-node" slot-scope="{node, tree}">
<img :src="getUrl(`${node.icon}`)" style="margin-right: 0.3em; " />
<span>{{node.label}}</span>
</span>
</el-tree>
<script>
methods: {
getUrl(url) {
return require(`@/assets/resourceimage/${url}.png`);
}
}
</script>
这个用法比较简单,它把computed的计算结果——也就是tree绑定到el-tree的data上,这样就可以使用内部的node使用tree中的数据了。
切记不要使用下面的记住写法:
- require('@/assets/resourceimage/'+${node.icon}'+'.png');
- require('@/assets/resourceimage/'+{{node.icon}}'+'.png');
Vue 动态图片加载路径问题和解决方法的更多相关文章
- linux和windows动态库加载路径区别
# linux和windows动态库加载路径区别 ### 简介------------------------------ linux加载动态库的路径是系统目录/lib和/usr/lib.- wind ...
- Java的cmd配置(也即Java的JDK配置及相关常用命令)——找不到或无法加载主类 的解决方法
Java的cmd配置(也即Java的JDK配置及相关常用命令) ——找不到或无法加载主类 的解决方法 这段时间一直纠结于cmd下Java无法编译运行的问题.主要问题描述如下: javac 命令可以正 ...
- U盘加载速度慢的解决方法
在日常的生活和工作中,我们经常用U盘存储一些文件和程序.然而,一些朋友发现U盘有时候在使用过程中的识别加载速度非常缓慢.是U盘出故障了吗?其实不尽然,下面就为大家分享一下如何快速解决U盘加载缓慢的方法 ...
- VB 6.0不能加载MSCOMCTL.OCX的解决方法
问题场景:打开 VB 6项目时报错,不能加载 'C:\WINDOWS\system32\MSCOMCTL.OCX'--继续加载工程吗? 解决方法: 1.新建一个VB工程,然后按CTRL + T,选中 ...
- vue的 v-for 循环中图片加载路径问题
先看一下产品需求,如下图所示, 产品要求图片和它的名称一一对应,本来是非常简单的需求,后台直接返回图片路径和名称,前台直接读取就可以了,但是我们没有存储图片的服务器,再加上是一个实验性的需求,图片需要 ...
- 谈谈动态地加载Jquery库文件的方法
有时候,我们可能不会在网页中<script src="jquery.min.js" 来加载 Jquery 库,可能在用户点击某个按钮后,才去加载 Jquery 库. 好处不用 ...
- OpenCV程序在Debug时出现「PDB文件无法加载」的一个解决方法
这几天毕设要用到OpenCV,按照网上的教程来搭建开发环境. 用的是OpenCV 3.0 beta + Visual Studio Community 2013.我的系统64位是Win 8.1,但在加 ...
- spring加载过程中jar包加载不了,解决方法
当我们在开发spring项目时,一般会将jar包放到webInf/lib下,这样是myeclipse自动将jar包加载到tomcat中webapps下,但是当我们新建一个lib文件夹的情况下,我们ad ...
- Visual studio 2017添加引用时报错未能正确加载ReferenceManagerPackage包的解决方法
vs2017添加引用时报错未能正确加载“ReferenceManagerPackage”包. - AusonSir - 博客园https://www.cnblogs.com/-bao/p/674941 ...
随机推荐
- POJ - 1088 滑雪 dp
http://bailian.openjudge.cn/practice/1088?lang=en_US 题解: 设一个dp[N][N]数组代表从(i,j)坐标开始能滑到的最远距离.更新的方法为 遍历 ...
- HDU - 5651 xiaoxin juju needs help 逆元模板
http://acm.hdu.edu.cn/showproblem.php?pid=5651 题意:生成回文串.输出所有回文串的可能数. 题解:mod除法会损失高位,用逆元来代替除法,模板如下 ac代 ...
- ArcGIS API for javascript开发笔记(三)——解决打印输出的中文为乱码问题
感谢一路走来默默支持和陪伴的你~~~ ----------------------欢迎来访,拒绝转载---------------------- 1. 调用ArcGIS API的Print实 ...
- CAP 一致性协议及应用解析
https://mp.weixin.qq.com/s/26x8O1bRzurl84e3nM6TTA CAP 一致性协议及应用解析 原创: 有赞技术 有赞coder 1周前 文 | 云开 on 用户中心 ...
- extjs错误,看到红色才能让自己记住知识点
1.Cannot call method 'getColumnCount' of undefined Hi, maybe you use colModel before rendering.Notic ...
- 【Python】【Web.py】详细解读Python的web.py框架下的application.py模块
详细解读Python的web.py框架下的application.py模块 这篇文章主要介绍了Python的web.py框架下的application.py模块,作者深入分析了web.py的源码, ...
- sql server作业管理查看/进程管理查看命令
一.作业管理 (1) select * from msdb.dbo.sysjobhistory 可以查看作业的历史记录 (2) select * from msdb.dbo.sysjobs 查 ...
- 【剑指offer】替换空格
一.题目: 请实现一个函数,将一个字符串中的空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 二.思路: Python代码,先 ...
- git 下载单个文件 已经添加多个远程服务器
175down vote It is possible to do (in the deployed repository) git fetch followed by git checkout or ...
- DW课堂练习 用所学的知识去制作一个 (邮箱的注册页面)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...