vue:使用不同参数跳转同一组件,实现动态加载图片和数据,以及利用localStorage和vuex持久化数据
需求:通过不同的参数复用同一组件,实现动态加载数据和图片,同时,在页面刷新时,图片依旧可以加载成功。
过程出现的bug和问题:
1、使用params传参后,再次刷新页面,参数丢失导致数据无法再次加载
2、改用query进行传参后,页面刷新后图片无法加载,这是由于图片的url是在created钩子函数调用查询数据api后才进行赋值,而赋值之后页面已经渲染完成,导致图片无法加载成功
解决方案:
1、通过localStorage将数据持久化,在跳转到当前路由时,先使用localStorage将数据持久化,这里可以配合vuex进行操作
2、页面渲染前,图片的url直接读取localStorage的值,就不会出现页面渲染完成,url还没被赋值导致图片无法加载的情况
附上代码:
需要从 /zyview 跳转至 /viewmessage
/zyview跳转部分:
this.$router.push({
// path: `/viewmessage/${this.names[index]}`,
// 使用下列方法方法跳转路由,就不会出现点击tab后再次跳转的bug
name: "viewmessage",
query: {
name: this.lists[index].m_name, // 此为药品名称
index: index, // 药材索引
mid: this.lists[index].id, // 药材id
// imgpath: this.lists[index].img_path
},
});
触发跳转的方法:
gotodescribe(e,index) {
console.log(this.lists[index].id)
console.log(this.test)
const path = this.lists[index].img_path
// 这里path和index是和store中actions方法里面的变量名意义对应,名字不对应无法传值
this.$store.dispatch('addimagepath', {path,index})
console.log("存储内容" + this.$store.state.imgpath.imgpaths[this.$route.query.index])
this.$router.push({
// path: `/viewmessage/${this.names[index]}`,
// 使用下列方法方法跳转路由,就不会出现点击tab后再次跳转的bug
name: "viewmessage",
query: {
name: this.lists[index].m_name, // 此为药品名称
index: index, // 药材索引
mid: this.lists[index].id, // 药材id
// imgpath: this.lists[index].img_path
},
});
},
这是跳转前将数据持久化的步骤:
this.$store.dispatch('addimagepath', {path,index})
以下为vuex部分,新建一个文件写此存储图片路径的模块:
const state = {
// 图片路径
imgpaths: [],
// imgpaths: localStorage.getItem(imgpaths[index]),
test: "b4b797913756456bb5ffd8d661ab79e5.jpg"
}
const getters = {
}
// 改变state状态
const mutations = {
addimgpath(state,{path,index}){
state.imgpaths[index] = path
localStorage.setItem(index,path) // 这里使用localStorage持久化数据,后面页面就直接读取localStorage中的数据
}
}
const actions = {
addimagepath(context,{path,index}){
context.commit('addimgpath',{path,index})
}
}
export default {
state,
getters,
mutations,
actions
}
/viewmessage部分:
<el-image
:src="`http://image.zysuyuan.cn:8031/${this.path}`"
style="width: 400px; height: 400px"
:fit="fit"
alt="药材"
></el-image>
data() {
return {
path: localStorage.getItem(this.$route.query.index),
.........
}
}
created和watch:
created() {
this.fetchData();
},
watch: {
$route(to, from) {
this.path = localStorage.getItem(this.$route.query.index);
this.fetchData();
}
},
vue:使用不同参数跳转同一组件,实现动态加载图片和数据,以及利用localStorage和vuex持久化数据的更多相关文章
- asp.net向后台传参数动态加载图片
//向后台传参数动态加载图片 $(function() { $("#Button1").click(function() { var stockcode = getUrlParam ...
- vue动态加载图片,取消格式验证
vue 一. 动态加载图片 (以vue模板为例) app.vue 代码如下: <template> <div id="app"> <img :src= ...
- Vue加载组件、动态加载组件的几种方式
https://cn.vuejs.org/v2/guide/components.html https://cn.vuejs.org/v2/guide/components-dynamic-async ...
- Java 动态编译组件 & 类动态加载
1.JDK6 动态编译组件 Java SE 6 之后自身集成了运行时编译的组件:javax.tools,存放在 tools.jar 包里,可以实现 Java 源代码编译,帮助扩展静态应用程序.该包中提 ...
- Vue动态加载图片图片不显示
图片是放在assets文件夹下的 使用require进行解决 图片不显示的原因 在webpack,将图片放在assets中,会将图片图片来当做模块来用,因为是动态加载的,所以url-loader将无法 ...
- vue动态加载图片
如果是直接动态获取完整的图片地址可以使用以下方法 <template> <img :src="url"> </template> <scr ...
- vue中动态加载图片路径的方法
assets:在项目编译的过程中会被webpack处理解析为模块依赖,只支持相对路径的形式,如< img src=”./logo.png”>和background:url(./logo.p ...
- vue 动态加载图片路径报错解决方法
最近遇到图片路径加载报错的问题 之前一直都是把图片放到assets的文件下的.总是报错,看到一些文章并且尝试成功了,特意记录下 首先先说明下vue-cli的assets和static的两个文件的区别, ...
- Vue 动态加载组件
为什么要动态加载呢?而不是一次性加载呢? 一次性?你能保证你拿的内容不多,那从性能方面说还是OK的.否则,就该什么时候用,就什么时候取. 得出这想法,源于前几天上班赶产品的故事: A组件是父亲,B组件 ...
随机推荐
- JAVA算法之高级排序
本章介绍两种高级排序,希尔排序和快速排序,这两种排序比之前讲到的简单排序都要快很多:希尔排序大约需要O(N*(logN)2)的时间,快速排序的时间复杂度为(N*logN),这两种算法和我们在讲递归的时 ...
- 配置虚拟机上的RedHat6 Linux系统的网络(选择的是仅主机模式)
1.启动虚机,网络选择:仅主机模式 2.进入自己的本地网络配置中,修改相关配置 1)修改VMware NetWork Adapter VMnet1 ip为192.168.137.1,子网掩码:255. ...
- leetcode-157周赛-5213-玩筹码
题目描述: 自己的提交: class Solution: def minCostToMoveChips(self, chips: List[int]) -> int: res = float(' ...
- [JZOJ1904] 【2010集训队出题】拯救Protoss的故乡
题目 题目大意 给你一个树形的网络,每条边从父亲流向儿子.根节点为原点,叶子节点流向汇点,容量为无穷大. 可以给一些边扩大容量,最多总共扩大\(m\)容量.每条边的容量有上限. 求扩大容量后最大的最大 ...
- 线性dp——cf1096D
dp[i][j]表示到第i位,与hard的匹配状态到达了第j位 每位有两种决策:消或者不消 分别转移一下即可 转移代码 ;i<n;++i) ;j<=;++j) { cmin(f[i+][j ...
- (转)Android 升级 ADT 之后报错之一 case语句 .
转:http://blog.csdn.net/wchinaw/article/details/7325641 下面文章大意是指:在一般的Android项目中,R类的常量都是用final定义的,但ADT ...
- iserver中的服务数据迁移
今天需要将iserver测试服务器上的空间数据服务(数据源是Oracle Plus)迁移到客户的正式服务器,原想需要很大的工作量,其实是这样简单: 一.保证客户的iserver环境都已安装正确.对于o ...
- Android Drawable 详解(教你画画!)
参考 1.Android中的Drawable基础与自定义Drawable 2.android中的drawable资源 3.Android开发之Shape详细解读 Drawable分类 No xml标签 ...
- ON_WM_TIMER() void (__cdecl xx::* )(UINT)”转换为“void (__cdecl CWnd::* )(UINT_PTR)
ON_WM_TIMER()在编译器从32位转换为64位的时候, 出现的问题; class CFlatComboBox : public CComboBox (基类为CWnd) 为了重载CWnd的 ...
- CDH断电后 hbase出现spilt块不完整问题
从错误看起来是regionspilt时候断电了,导致hbase master启动不起来,因为是测试环境只能删除这些region了,掉一部分数据 删除hbase下spilt块,删除zK里面的habse ...