欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

如何解決vue的v-for循環(huán)中圖片加載路徑問題-創(chuàng)新互聯(lián)

這篇文章將為大家詳細講解有關如何解決vue的v-for循環(huán)中圖片加載路徑問題,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

站在用戶的角度思考問題,與客戶深入溝通,找到朝天網站設計與朝天網站推廣的解決方案,憑借多年的經驗,讓設計與互聯(lián)網技術結合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都網站設計、做網站、成都外貿網站建設公司、企業(yè)官網、英文網站、手機端網站、網站推廣、域名與空間、虛擬空間、企業(yè)郵箱。業(yè)務覆蓋朝天地區(qū)。

先看一下產品需求,如下圖所示,

如何解決vue的v-for循環(huán)中圖片加載路徑問題

產品要求圖片和它的名稱一一對應,本來是非常簡單的需求,后臺直接返回圖片路徑和名稱,前臺直接讀取就可以了,但是我們沒有存儲圖片的服務器,再加上是一個實驗性的需求,圖片需要存放到前臺。當時我想,vue 中的img 的src 可以動態(tài)綁定到一個變量上, 很簡單嗎,就沒有考慮太多,直接開始做了。

首先和后臺商量一下數(shù)據(jù)結構,因為圖片要和名稱一一對應,所以后臺要返回中英文的名稱的映射,我把前臺的圖片名稱直接設置給后臺給的英文名稱,從而讀取圖片,圖片和中文名稱就一一對應了。數(shù)據(jù)結構如下:映射關系用對象表示,多個圖片,所以放到一個數(shù)組中

[
  {
  CnName:'荷花',
  EnName: 'lotus'
  },
  {
  CnName:'康乃馨',
  EnName: 'carnations'
  },
  {
  CnName:'牡丹',
  EnName: 'peony'
  }
 ]

現(xiàn)在前臺用vue-cli, 后臺用express 來模擬一下當時的開發(fā)場景,也可以還原一下錯誤和業(yè)務的迭代過程。新建一個文件夾,就叫vue-img吧,然后再在該文件夾中新建兩個文件夾,client, server, client 表示客戶端代碼,server 表示服務端代碼。 在client 文件夾中,打開命令窗口,執(zhí)行 vue init webpack-simple . 命令,后面的點表示當前文件夾,為了簡單,這里使用了simple 模版. server 文件夾,打開命令窗口,先執(zhí)行npm init 初始化為node 項目,然后npm install express cors --save, 安裝依賴,cors 是解決跨域的。

先來寫前端代碼,把app.vue 中的template和script中的內容清空,保留它的css 樣式內容,我們就不用寫樣式了。前端頁面,有兩個部分,一個是button, 點擊按鈕來發(fā)送請求,一個是圖片展示區(qū)域,它用的就是v-for 循環(huán), template 內容如下

<div id="app">
 <button @click='getFlower'>點擊加載請求</button>
 <!-- 由于當時想當然地以為,src 就是綁定一個變量,所以就設置了一個默認變量,這是出錯的過程 -->
 <ul>
 <li v-for ="item in flowers" :key="item">
  <img :src="defaultImg" alt="flowers">
  <p>{{item}}</p>
 </li>
 </ul>
</div>
</template>

由于template中用到了方法 getFlower, 變量defaultImg 和 flowers, 所以要在script中進行聲明。defaultImg 是一個圖片,所以還要引入進來, 在src 目錄中新建一個img文件夾,放幾張圖片。flowers是一個數(shù)組,我先預寫了一個['荷花', '康乃馨'],getFlower,因為沒有后臺,所以先沒有寫, 注意如果數(shù)據(jù)量大的,交互復雜,是要寫mock 數(shù)據(jù)的,這里比較簡單就沒有寫。這也是出錯的原因。代碼如下

import defaultImg from './img/lotus.jpg'; // import 引入圖片

export default {
 data() {
 return {
 flowers: ['荷花', '康乃馨'],
 defaultImg: defaultImg
 };
 },
 methods: {
 getFlower() {}
 }
};

整個頁面顯示如下,我以為沒有問題了。

如何解決vue的v-for循環(huán)中圖片加載路徑問題

現(xiàn)在再來寫后臺代碼, 用express 寫一個后臺接口,還是非常簡單的。在server 文件夾中,建一個文件server.js 來寫后臺代碼

var express = require('express');
var cors = require('cors'); // 引入cors 中間件,解決跨域

var app = express();
app.use(cors());

// 前端發(fā)送的是get請求,接口是flowers. 返回的數(shù)據(jù)code 表示成功或失敗,obj 表示數(shù)據(jù)
// 數(shù)據(jù)中Cn 表示中文名稱,En表示中文名稱
app.get('/flowers', (req, res) => {
 res.json({
 code: 0,
 obj: [
  {
  CnName:'荷花',
  EnName: 'lotus'
  },
  {
  CnName:'康乃馨',
  EnName: 'carnations'
  },
  {
  CnName:'牡丹',
  EnName: 'peony'
  }
 ]
 })
})
app.listen(3000, () => {
 console.log('server start at 3000');
})

現(xiàn)在用nodemon server.js 啟動服務,在瀏覽器地址輸入http://localhost:3000/flowers, 可以看到返回的數(shù)據(jù)表示接口ok.

現(xiàn)在再重新寫一下前端代碼,進行前后端聯(lián)調。由于要發(fā)送請求,還要安裝axios 依賴。首先要根據(jù)后臺接口改一下template 內容的li

<ul>
 <li v-for ="item in flowers" :key="item.EnName">
  <img :src="item.EnName" alt="flowers">
  <p>{{item.CnName}}</p>
 </li>
 </ul>

然后,在script中引入 axios, flowers 數(shù)組清空,default img 刪除 , 引入后臺數(shù)據(jù)所需要的三張圖片, 同時getFlower 方法發(fā)送請求

// 引入axios,用于發(fā)送請求,defaults 設置后臺請求地址
import axios from 'axios';
axios.defaults.baseURL = "http://localhost:3000"

// 引入相關的圖片, 命名要和后臺保持一致
import lotus from './img/lotus.jpg';
import carnations from './img/carnations.jpg';
import peony from './img/peony.jpg';

export default {
 data() {
 return {
 flowers: [], 
 lotus,
 carnations,
 peony
 };
 },
 methods: {
 getFlower() {
 axios.get('/flowers')
 .then(res => {
  if(res.status === 200 && res.data.code === 0) {
  this.flowers = res.data.obj;
  }
 })
 }
 }
};

我以為成功了,點擊按鈕發(fā)送請求,但是看到的如下畫面,沒有圖片

如何解決vue的v-for循環(huán)中圖片加載路徑問題

當時想不通,img 的src 綁定的是變量,它和defaultImg 不應該是一樣嗎?打開瀏覽器控制臺,看到如下內容,img 的src 已經是一個字符串,它不是我們想要的變量了。

我想這里可能是它對item.EnName進行了一次解析變成了字符串,就完事了,綁定變量,就是解析一次。而對于defalutImg 來說,它本來就是變量,無法再進行分割解析,所以它會去data 里面去找,如果找不到,才報錯。

如何解決vue的v-for循環(huán)中圖片加載路徑問題

那么我們現(xiàn)在要做的就是把item.EnName 變成圖片的地址,這樣進行一次解析的時候,直接去讀取圖片。要怎么做到呢?當時 我也不是很清楚,就百度了一下,有人提到了require 方法, require 一個圖片路徑,我想require 什么,以前沒有聽說過require 這個關鍵字啊。想了一段時間,突然就明白了,require 是一個commonJs 規(guī)范的關鍵字,當我們在寫node 代碼的時候,都是有require 去讀取資源的。在前端js 中,一直使用import,直接忘記了,不知道怎么用了。webpack 把img 當做一種資源,所以使用時要先引進。引進方式有兩種,一種是import , 一種是require, 因為webpack 同時支持ES6 module 和 commonJs 規(guī)范. import 是個語句,只能在js 代碼頂部使用, 而require 不一樣,它是一個表達式,可以進行賦值操作。我們試一下,用require 引入圖片是怎么樣的效果,在 script 標簽時,寫下

var img = require('./img/lotus.jpg');
console.log(img);

刷新瀏覽器,在控制臺上可以看到如下輸出

如何解決vue的v-for循環(huán)中圖片加載路徑問題

正好是圖片的路徑,也正是我們想要的內容,剛才也說了,require是一個表達式,它可以用到任何js 表達式能用到的地方。我這時就想,把后臺返回的代碼進行重新組裝,EnName 直接是圖片路徑。getFlower 方法修改如下

getFlower() {
 axios.get('/flowers')
 .then(res => {
  if(res.status === 200 && res.data.code === 0) {
  this.flowers = res.data.obj.map(item => {
   return {
   CnName: item.CnName,
   EnName: require(`./img/${item.EnName}.jpg`) // 利用require 引入圖片,獲得圖片路徑
   }
  })
  }
 })
 }

這時刷新瀏覽器,點擊按鈕發(fā)送請求,可以看到圖片了并且一一對應, 成功了。

如何解決vue的v-for循環(huán)中圖片加載路徑問題

這時又一想,既然require 是一個表達式,在template模版中是直接可以解析js 表達式,那么直接把img 的src 綁定到require 表達式就可以了,把getFlower 方法,回退到上一次代碼,然后template 代碼如下

<ul>
 <li v-for ="item in flowers" :key="item.EnName">
  <img :src="require(`./img/${item.EnName}.jpg`)" alt="flowers">
  <p>{{item.CnName}}</p>
 </li>
 </ul>

同樣也成功了。

最后寫代碼的時候發(fā)現(xiàn),如果讀取的圖片不存在,上面的方法就會報錯,并且沒有辦法處理。這時還要回到js 的代碼處理。我又把html代碼回到以前,然后在getFlower方法中進行錯誤處理,既然讀取報錯,我們讀取的代碼就放到try中, 如果有報錯,就在catch 看處理,提供一個默認圖片,try catch 處理讀取異常。 try catch 的邏輯

   try {
   img = require(`./img/${item.EnName}.jpg`);
   } catch (err) {
   img = require('./img/lotus.jpg');
   }

整個app.vue

<template>
<div id="app">
 <button @click='getFlower'>點擊加載請求</button>
 <ul>
 <li v-for ="item in flowers" :key="item.EnName">
  <img :src="item.EnName" alt="flowers">
  <p>{{item.CnName}}</p>
 </li>
 </ul>
</div>
</template>

<script>
// 引入axios,用于發(fā)送請求,defaults 設置后臺請求地址
import axios from 'axios';
axios.defaults.baseURL = "http://localhost:3000";

export default {
 data() {
 return {
 flowers: []
 };
 },
 methods: {
 getFlower() {
 axios.get('/flowers')
 .then(res => {
  if(res.status === 200 && res.data.code === 0) {
  this.flowers = res.data.obj.map(item => {
   var img = null;
   try {
   img = require(`./img/${item.EnName}.jpg`);
   } catch (err) {
   img = require('./img/lotus.jpg');
   }

   return {
   CnName: item.CnName,
   EnName: img
   }
  })
  }
 })
 }
 }
};
</script>

關于“如何解決vue的v-for循環(huán)中圖片加載路徑問題”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

文章題目:如何解決vue的v-for循環(huán)中圖片加載路徑問題-創(chuàng)新互聯(lián)
URL分享:http://aaarwkj.com/article18/dpjsdp.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供網站營銷、響應式網站、云服務器、營銷型網站建設、建站公司手機網站建設

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網站建設
女人被爽到高潮呻吟免费看| 俩小伙探花专约老熟女| 毛片一区二区三区免费看| 亚洲av十八禁在线播放| 亚洲午夜福利啪啪啪| 日韩中文字幕一二三| 免费毛片一区二区三区四区| 精品成人乱色一区二区| 精品欧美激情精品一区| 黄片视频免费观看一起草| 欧美日韩午夜久久免费| 日韩欧美国产精品自拍| 亚洲不卡免费在线视频| 日本经典三级在线视频| 国产精品欧美日韩一区| 热久久这里只有精品视频| 国产黄的网站在线观看| 日韩欧美国产麻豆91在线精品| 精华国产一区二区三区| 中文字幕在线日韩精品| 一区二区少妇黄色三区| 天堂网av高清在线播放| 亚洲av区一区二区三| 欧美黄片免费在线视频| 日本高清不卡在线播放| 国产精品久久亚洲一区二区| 午夜欧美日韩精品久久久| 日韩视频免费看一区二区| 欧美日韩丝袜一区二区| 欧美亚洲成人免费电影| 日韩av亚洲在线观看| 黄片色呦呦视频免费看| 国模在线视频一区二区| 国产日韩熟女中文字幕| 亚洲国产日韩欧美一级| 日韩亚洲国产欧美在线观看| 一区二区三区四区毛片| 亚洲成av人在线播放| 久久中文字幕一区二区三区| 国产精品一区二区黑人巨大| 久久精品国产亚洲av麻豆网站|