Vue中錯誤圖片的處理

来源:https://www.cnblogs.com/z937741304/archive/2019/11/06/11809547.html
-Advertisement-
Play Games

在一個Vue的PC項目中,要求給錯誤圖片不要讓它顯示醜陋的圖片,就要給圖片寫一個失敗後的預設圖片, 在這裡寫了兩種方法, 第一種方法,也就是百度到的最多的代碼,就是給一張圖片一個預設值。 第二種問題,如果頁面中有很多地方都存在這個東西,那麼在不同的頁面中寫很對是很麻煩的。 就使用到了VUe的指令。 ...


在一個Vue的PC項目中,要求給錯誤圖片不要讓它顯示醜陋的圖片,就要給圖片寫一個失敗後的預設圖片,

 在這裡寫了兩種方法,

第一種方法,也就是百度到的最多的代碼,就是給一張圖片一個預設值。

 

第二種問題,如果頁面中有很多地方都存在這個東西,那麼在不同的頁面中寫很對是很麻煩的。

就使用到了VUe的指令。

這裡分為了兩種情況,一種是直接載入預設圖片,等圖片載入完成之後再使用載入完成的圖片

代碼如下

 1 // 如果自定義指令多的話,再重新開啟一個文件專門寫自定義指令 太亂了
 2 //全局註冊自定義指令,用於判斷當前圖片是否能夠載入成功,可以載入成功則賦值為img的src屬性,否則使用預設圖片
 3 //指令名稱為:real-img
 4 // 通用錯誤圖片的處理方法,或者也可以懶載入的樣子
 5 Vue.directive('real-img', async function (el, binding) {
 6   let imgURL = binding.value;//獲取圖片地址
 7   if (imgURL) {
 8     let exist = await imageIsExist(imgURL);
 9     if (exist) {
10       el.setAttribute('src', imgURL);
11     }
12   }
13 });
14 
15 /**
16 * 檢測圖片是否存在
17 * @param url
18 */
19 let imageIsExist = function (url) {
20   return new Promise((resolve) => {
21     var img = new Image();
22     img.onload = function () {
23       if (this.complete == true) {
24         console.log('資源載入');
25         resolve(true);
26         img = null;
27       }
28     }
29     img.onerror = function () {
30       console.log('資源error', img);
31       resolve(false);
32       img = null;
33     }
34     img.src = url;
35   })
36 };

使用方式

1 <div class="appd_d_ch_logo">
2   <img src="../../assets/img/error/app_d.png" v-real-img="appDetail.icon" alt="">
3 </div>

 

 

第二種是直接載入圖片,等到載入失敗的時候使用預設圖。

 1 /**
 2 * 檢測圖片是否存在
 3 * @param url
 4 */
 5 let imageIsExist = function (url) {
 6   return new Promise((resolve) => {
 7     var img = new Image();
 8     img.onload = function () {
 9       if (this.complete == true) {
10         console.log('資源載入');
11         resolve(true);
12         img = null;
13       }
14     }
15     img.onerror = function () {
16       console.log('資源error', img);
17       resolve(false);
18       img = null;
19     }
20     img.src = url;
21   })
22 };
23 
24 
25 
26 // 單獨作用於應用模塊的管理
27 // 傳的是錯誤的圖片
28 Vue.directive('err-img', async function (el, binding) {
29   let imgURL = binding.value;//獲取圖片地址
30   let realURL = el.src;
31   if (imgURL) {
32     let exist = await imageIsExist(realURL);
33     if (!exist) {
34       el.setAttribute('src', imgURL);
35     }
36   }
37 });

Vue文件中使用方式如下

1 <div class="appd_d_ch_logo">
2      <img src="../../assets/img/error/app_d.png" v-real-img="appDetail.icon" alt="">
3 </div>

 

很久了學習一點新東西還是感覺挺高興的,Vue指令很多人都見過,但是到了用的時候總是沒想到,還是百度看到改造了一點點。

一段js代碼不需要引入在所有的頁面中使用很容易的辦到,可以把這一段js代碼放到Vue.prototype上面。

之前一直在想這個問題,有什麼方式可以讓所有的代碼都可以使用一段函數或者是什麼的,看到了指令,還是要多看看文檔,只有到了用的時候才可能想到自己曾經看到過這麼一段話,再重新翻看文檔使用。

 

如果我的文章幫助到了你,我會非常高興的。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在資料庫的增刪改查操作中,使用最頻繁的就是查詢操作。 而在所有查詢操作中,統計數量操作更是經常被用到。 關於資料庫中行數統計,無論是MySQL還是Oracle亦或者是SqlServer,都有一個函數可以使用,那就是COUNT。 而對於COUNT,有幾個問題很值得去思考: 1、COUNT有幾種用法? ...
  • 1:安裝 去mongodb的官網http://www.mongodb.org/downloads下載32bit的包 解壓後會出現以下文件 在安裝的盤C:下建立mongodb文件夾,拷貝bin文件夾到該目錄下,這樣就相當於安裝了mongodb的相關命令。 為了啟動mongodb方便,將mongod.e ...
  • MySQL DDL操作執行的三種方式 1,INPLACE,在進行DDL操作時,不影響表的讀&寫,可以正常執行表上的DML操作,避免與COPY方法相關的磁碟I/O和CPU周期,從而最小化資料庫的總體負載。 最小化負載有助於在DDL操作期間保持良好的性能和高吞吐量。 2,COPY,不允許併發執行過多個D ...
  • 完成共用參數的讀寫public class SharedPreference { private Context context; public SharedPreference(Context context) { // TODO Auto-generated constructor stub t... ...
  • 蘋果認可的標識符 Apple提供了各種API,以方便用戶識別各種用途: 通用標識符(UDID) 在iOS的早期,蘋果公司提供了一個uniqueIdentifier財產上UIDevice-親切地稱為udid (不要與UUID混淆)。雖然這樣的功能在今天看來是不可想象的,但該屬性一直存在到IOS 5,直 ...
  • https://developer.umeng.com/docs/66632/detail/66748#createappid ...
  • 版權聲明:本文為xing_star原創文章,轉載請註明出處! 本文同步自http://javaexception.com/archives/225 最近線上報錯,有個用戶連續crash了10次左右,查看了下堆棧信息,發現是提示com.android.camera.action.CROP這個Inten ...
  • 版權聲明:本文為xing_star原創文章,轉載請註明出處! 本文同步自http://javaexception.com/archives/224 禁用EditText 這個其實很簡單,最簡單的一種方式,代碼如下 那麼還有其他的方式麽,我想應該是有的,以下的幾個api我並沒有做驗證 參考資料: ht ...
一周排行
    -Advertisement-
    Play Games
  • .Net8.0 Blazor Hybird 桌面端 (WPF/Winform) 實測可以完整運行在 win7sp1/win10/win11. 如果用其他工具打包,還可以運行在mac/linux下, 傳送門BlazorHybrid 發佈為無依賴包方式 安裝 WebView2Runtime 1.57 M ...
  • 目錄前言PostgreSql安裝測試額外Nuget安裝Person.cs模擬運行Navicate連postgresql解決方案Garnet為什麼要選擇Garnet而不是RedisRedis不再開源Windows版的Redis是由微軟維護的Windows Redis版本老舊,後續可能不再更新Garne ...
  • C#TMS系統代碼-聯表報表學習 領導被裁了之後很快就有人上任了,幾乎是無縫銜接,很難讓我不想到這早就決定好了。我的職責沒有任何變化。感受下來這個系統封裝程度很高,我只要會調用方法就行。這個系統交付之後不會有太多問題,更多應該是做小需求,有大的開發任務應該也是第二期的事,嗯?怎麼感覺我變成運維了?而 ...
  • 我在隨筆《EAV模型(實體-屬性-值)的設計和低代碼的處理方案(1)》中介紹了一些基本的EAV模型設計知識和基於Winform場景下低代碼(或者說無代碼)的一些實現思路,在本篇隨筆中,我們來分析一下這種針對通用業務,且只需定義就能構建業務模塊存儲和界面的解決方案,其中的數據查詢處理的操作。 ...
  • 對某個遠程伺服器啟用和設置NTP服務(Windows系統) 打開註冊表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer 將 Enabled 的值設置為 1,這將啟用NTP伺服器功 ...
  • title: Django信號與擴展:深入理解與實踐 date: 2024/5/15 22:40:52 updated: 2024/5/15 22:40:52 categories: 後端開發 tags: Django 信號 松耦合 觀察者 擴展 安全 性能 第一部分:Django信號基礎 Djan ...
  • 使用xadmin2遇到的問題&解決 環境配置: 使用的模塊版本: 關聯的包 Django 3.2.15 mysqlclient 2.2.4 xadmin 2.0.1 django-crispy-forms >= 1.6.0 django-import-export >= 0.5.1 django-r ...
  • 今天我打算整點兒不一樣的內容,通過之前學習的TransformerMap和LazyMap鏈,想搞點不一樣的,所以我關註了另外一條鏈DefaultedMap鏈,主要調用鏈為: 調用鏈詳細描述: ObjectInputStream.readObject() DefaultedMap.readObject ...
  • 後端應用級開發者該如何擁抱 AI GC?就是在這樣的一個大的浪潮下,我們的傳統的應用級開發者。我們該如何選擇職業或者是如何去快速轉型,跟上這樣的一個行業的一個浪潮? 0 AI金字塔模型 越往上它的整個難度就是職業機會也好,或者說是整個的這個運作也好,它的難度會越大,然後越往下機會就會越多,所以這是一 ...
  • @Autowired是Spring框架提供的註解,@Resource是Java EE 5規範提供的註解。 @Autowired預設按照類型自動裝配,而@Resource預設按照名稱自動裝配。 @Autowired支持@Qualifier註解來指定裝配哪一個具有相同類型的bean,而@Resourc... ...