IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> Vue组件内异步更新图片Src属性 -> 正文阅读

[JavaScript知识库]Vue组件内异步更新图片Src属性

事情是这样的:

系统内的存的均为图片的ID号,从数据库里拿出来以后在Vue的组件内进行数据绑定,但是绑定的是一个ID号,需要转换为图片的url地址,但通过组件的自定义函数处理后不显示。

第一步:绑定组件的自定义函数

 

?第二步:第自定义函数中返回完整的URL

?第三步:没有第三步了,img.src属性没了。。。。

?我的解决办法有点饶:

1. 父对象中定义一个存储图像ID和URL的键值对象,并进行初始化

2. 通过props将这个对象赋值给组件内部,img.src = photos[id]

3. 同时再给img定义一个其它的属性来调用get_cover回调 img.data-cover=“get_cover"

4. 当组件的回调被执行时通过this.$emit 来触发父组件的函数

5. 在父组件的函数中更新自己的photo键值对。。。

局部代码如下:

第一步:

new Vue({
el:'#demo1', 
data() {
        return {           
            photoObj:{}
        }
    },
    created(){    
        //始始化photoObj的数据,下面是根据我自己的内容进行的初始化
        if(sizeItemData.length > 0){
            let photoTmp = {};
            sizeItemData[0]['attr'].forEach(function(attr){
                console.log('create====',attr.photo);
                let key = attr.photo;
                photoTmp[key] = key;
            });
            this.photoObj = photoTmp;
        }
    },

.........................

第二步:

JS代码部分

Vue.component('size-item',{
    template:$("#sizeItemTpl").html(),
    //声明props,这里可以把组件外的变量传入组件内,组件调用时需要进行v-bind
    props:['photos'],

组件绑定部分:

<size-item  v-for="(row,index) in vItemData" :key="index" v-bind:index="index" v-bind:item="row" v-bind:photos="photoObj" v-on:up-global-photos="updatePhotos"></size-item>

注意里面的:v-bind:photos="photoObj"

这里是结合上面的JS部分,将像对象中的photoObj映射到组件内部通过photos进行使用。

第三步:

<img :data-src="getCover(attr.photo)" :src="photos[attr.photo]" class="preview-file" v-if="item.attr[aIndex].photo != 0"/>

看这到里的 :src 绑定的第二步中的photos的值

同时还绑定了一个 :data-src="getCover" 他的目的就是为了触发异步获取图片URL地址

第四步:回调函数内

getCover:function(photo_id){
            that = this;
            axios({
                method:'get',
                url:'。。。。。attachmentUrl.html?id='+ photo_id
            }).then(function(res){
                let imageUrl = res.data;
                that.$emit('up-global-photos',[photo_id,imageUrl]);
            });

注意这的: that.$emit('up-global-photos') ,这里的up-global-photos 在第二步代码中的组件部分通过 v-on:up-global-photos="updatePhotos" 来将对应到像Vue的自定义方法updatePhotos

第五步:也是胜利的一步

new Vue({
    el:'#sizeItemBox',
 methods:{
    updatePhotos:function(val){
            console.log('new photo=',val);
            this.photoObj[val[0]] = val[1];
        }

。。。。。。。。。。。。。。。。。。。。。。。

前后省略不相干的代码

如此转一大圈解决了一个JQuery $.get()就能搞定的问题。

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-09-19 07:54:08  更:2021-09-19 07:54:49 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/18 22:48:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码