需求:通过不同的参数复用同一组件,实现动态加载数据和图片,同时,在页面刷新时,图片依旧可以加载成功。

过程出现的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持久化数据的更多相关文章

  1. asp.net向后台传参数动态加载图片

    //向后台传参数动态加载图片 $(function() { $("#Button1").click(function() { var stockcode = getUrlParam ...

  2. vue动态加载图片,取消格式验证

    vue 一. 动态加载图片 (以vue模板为例) app.vue 代码如下: <template> <div id="app"> <img :src= ...

  3. Vue加载组件、动态加载组件的几种方式

    https://cn.vuejs.org/v2/guide/components.html https://cn.vuejs.org/v2/guide/components-dynamic-async ...

  4. Java 动态编译组件 & 类动态加载

    1.JDK6 动态编译组件 Java SE 6 之后自身集成了运行时编译的组件:javax.tools,存放在 tools.jar 包里,可以实现 Java 源代码编译,帮助扩展静态应用程序.该包中提 ...

  5. Vue动态加载图片图片不显示

    图片是放在assets文件夹下的 使用require进行解决 图片不显示的原因 在webpack,将图片放在assets中,会将图片图片来当做模块来用,因为是动态加载的,所以url-loader将无法 ...

  6. vue动态加载图片

    如果是直接动态获取完整的图片地址可以使用以下方法 <template> <img :src="url"> </template> <scr ...

  7. vue中动态加载图片路径的方法

    assets:在项目编译的过程中会被webpack处理解析为模块依赖,只支持相对路径的形式,如< img src=”./logo.png”>和background:url(./logo.p ...

  8. vue 动态加载图片路径报错解决方法

    最近遇到图片路径加载报错的问题 之前一直都是把图片放到assets的文件下的.总是报错,看到一些文章并且尝试成功了,特意记录下 首先先说明下vue-cli的assets和static的两个文件的区别, ...

  9. Vue 动态加载组件

    为什么要动态加载呢?而不是一次性加载呢? 一次性?你能保证你拿的内容不多,那从性能方面说还是OK的.否则,就该什么时候用,就什么时候取. 得出这想法,源于前几天上班赶产品的故事: A组件是父亲,B组件 ...

随机推荐

  1. SQL 标量函数-----日期函数 day() 、month()、year() 转载

      select day(createtime) from life_unite_product     --取时间字段的天值 select month(createtime) from life_u ...

  2. datetime模块练习

    #_author:来童星#date:2019/12/6#1.获取当前日期import datetimeprint(datetime.date.today())# 2019-12-06#2.使用toda ...

  3. 阿里云在云栖大会发布SaaS加速器3.0版最新成果,让天下没有难做的SaaS

    2019年杭州·云栖大会顺利落幕,超过6万人次观展,200余位顶尖科学家分享了前沿技术.作为“阿里云不做SaaS”,坚持“被集成”战略的落地体现,阿里云SaaS加速器在云栖大会现场发布了SaaS加速器 ...

  4. 揭秘 Flink 1.9 新架构,Blink Planner 你会用了吗?

    本文为 Apache Flink 新版本重大功能特性解读之 Flink SQL 系列文章的开篇,Flink SQL 系列文章由其核心贡献者们分享,涵盖基础知识.实践.调优.内部实现等各个方面,带你由浅 ...

  5. thinkphp 页面Trace信息

    调试模式并不能完全满足我们调试的需要,有时候我们需要手动的输出一些调试信息.除了本身可以借助一些开发工具进行调试外,ThinkPHP还提供了一些内置的调试工具和函数.例如,页面Trace功能就是Thi ...

  6. thinkphp present标签

    present标签用于判断某个变量是否已经定义,用法: 大理石平台精度等级 <present name="name"> name已经赋值 </present> ...

  7. 段错误 “段错误(segment fault)”、“非法操作,该内存地址不能read/write” 非法指针解引用造成的错误。

    [root@test after_fc_distributed]# ./ffmpeg-linux64-v3.3.1 -i "concat:mymp3tmp/test_0.mp3|mymp3t ...

  8. 一些关于Hibernate延迟加载的误区

    最近面试别人,正好出的笔试题中有道关于Hibernate延迟加载的问题,聊天过程中发现很多人对Hibernate的延迟加载有些理解误区,写 些东东在这里,希望对大家有所帮助. 首先是第一个误区:延迟加 ...

  9. C#の单例模式

    版本一: /// <summary>/// A simple singleton class implements./// </summary>public sealed cl ...

  10. Python学习之--迭代器、生成器

    迭代器 迭代器是访问集合元素的一种方式.从对象第一个元素开始访问,直到所有的元素被访问结束.迭代器只能往前,不能往后退.迭代器与普通Python对象的区别是迭代器有一个__next__()方法,每次调 ...