技巧3 vue3项目 axios前后端交互 图片地址拼接方法

一般来说图片有两种存储方式:

1.后端传完整在线地址

列表项img是一个完整地图片在线地址(https://www.xxx/img/1.jpg),后端传过来数组前端直接读取即可,img的url可以直接渲染。

2.图片存储在前端

当图片存储在前端的public文件夹下,后端的图片地址很可能是图片的名字,而不是路径,因为路径是前端的图片存储相对路径。

#python
[{
    
    "id":1,"content":"xxxx","url":"9.png"},{
    
    },{
    
    }]

这个时候就需要前端接到后端传值去拼接路径了。

拼接路径做法:

 created(){
    
    
		  //1.初始化函数里:从后端获取分类的数据。
		  //用到axios 从后端直接获取,不用传参。用get接收即可。
		   this.getdata()  
	  },
	  methods:{
    
    
		  getdata(){
    
    
				var that=this;
				this.$axios.get("http://127.0.0.1:8000/v3baisort/")
				.then(function(data){
    
    
				// 2. 由于后端图片地址不是在线的,图片存储在项目中,
				// 所以后端只是图片名,需要在这里拼接一下图片路径.	
				  for(var i = 0; i < data["data"].length; i++){
    
    
				  var url1=data["data"][i].url
				  // 1)找到放图片路径的地方 拼接后端的图片名。
				  var imgurl=require('../../../public/img/goods/goodssort/'+url1)
					// 2)给后端数组的图片url重新赋值
				  data["data"][i].url=imgurl
				  }
					// 3)把后端数据赋给本页面catelist
				 that.catelist=data["data"]
				 
				}).catch(function(error){
    
    
					alert(error)
					})
				},
		  
	  } 

这样写似乎很麻烦,有更简单的拼接方法:

直接用axios读取到图片名字。渲染的时候绑定img标签上的src,直接在src上拼接,不是更好吗?

这么想就要注意了,img不会识别这种动态绑定:

<img :src="'../../public/img'+item.url" /><br>

src绑定的会解析成一个纯字符串,只能通过axios里面require()先包一下,拼接好再显示。

require的使用方法:

require处理图片地址

猜你喜欢

转载自blog.csdn.net/yangyangdt/article/details/122464187