記錄--iview 使用爬坑

来源:https://www.cnblogs.com/smileZAZ/archive/2022/09/14/16693773.html
-Advertisement-
Play Games

這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 前段時間公司需要開發一個後臺管理系統,時間比較急迫,一兩天時間。想一想自己一點一點的搭建起來可能性不太大,就想著有沒有現成的可以改一改,就找到了基於Vue.js和iview組件庫的現成後臺,拿來改改就可以了 iview admin。 一、 ...


這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助

前段時間公司需要開發一個後臺管理系統,時間比較急迫,一兩天時間。想一想自己一點一點的搭建起來可能性不太大,就想著有沒有現成的可以改一改,就找到了基於Vue.js和iview組件庫的現成後臺,拿來改改就可以了 iview admin。

一、介紹:

1. iview UI組件庫是基於Vue.js的UI組件庫(相比之下大家都知道的)。

2. iview admin 引用iview admin文檔的介紹:iView-admin是iView生態中的成員之一,是一套採用前後端分離開發模式,基於Vue的後臺管理系統前端解決方案。iview_admin預覽   iview_admin文檔     iview_admin github地址

二、使用:

1. 目錄結構:

從github克隆下來的原始項目就是這樣一個結構。

config/ (項目開發配置文件,主要用於區分開發環境和生產環境)

node_modules/ (項目依賴)

public/ (存放主入口文件 index.html)

src/ (資源文件,這裡面內容比較多)

還有一個比較重要的文件就是根目錄下的:vue.config.js

這個是vue配置文件,和vue cli2.x不通,這裡使用的是vue cli3,所有的webpack配置都在這裡配置

其他的一些文件和文件夾一般使用還用不到。

2. config/

config/ 文件夾下麵有兩個文件:

env.js

export default 'development'

url.js

import env from './env'
const DEV_URL = 'https://www.easy-mock.com/mock/5add9213ce4d0e69998a6f51/iview-admin/'const PRO_URL = 'https://produce.com'
export default env === 'development' ? DEV_URL : PRO_URL

這裡主要是用於區分開發環境和線上環境的請求介面基礎url。

3. public/

public/ 文件夾下麵只有一個文件,那就是index.html內容輸出的入口文件。

4. src/ 

4-1. src/api/

其中data.js 中是所有數據請求的函數,routers.js路由請求函數,user.js是用戶登錄、獲取用戶信息、退出登錄的請求方法。在iview admin中是將所有的請求方法分類放在一起,哪裡需要再在哪裡調用,而不是散佈在各個頁面裡面,這樣利於維護修改。

比如user.js中:

4-2. src/assets/

src/assets/ 下存放的都是圖片等一些靜態資源等等。

4-3. src/components/

src/components/ 下麵是iview admin已經封裝好的一些可以直接調用的組建。

4-4. src/config/

項目內配置文件,裡面已經有的配置是cookie存儲時長,是否使用國際化配置。

4-5. src/directive/

一直項目自定義指令

4-6. src/libs/ 

在這裡主要在強調一下,在axios.js中iview_admin作者對請求方法進行了封裝處理:

這裡對響應進行了攔截處理,如果你在使用時成功請求後並沒有約定好返回碼欄位為code或者成功後要返回code:200 那你使用他的請求就算在控制台Network看到請求成功數據返回,但是你列印出來的結果會是false,要不就和後臺按照他的約定好,要不就改一下源碼。

tools.js和util.js都是一下工具函數。

4-7. src/locale/

存放國際化配置文件,如果不使用國際化,則不需要關心。

4-8. src/mock/

mock數據,在沒有接入真實開發環境時,克隆下來的項目使用的都是mock的加數據。

4-9. src/router/

routers.js 路由配置文件,在這裡需要註意用戶的許可權配置:

例如:

用戶的許可權配置必須是一個數組。

4-10. src/store/

這裡是整個項目狀態管理的地方,使用了vuex狀態管理工具,不瞭解的同學可以看看 vux官方文檔

4-11. src/view/

這裡面就是我們要編寫的展示頁面了。

三、render的使用

新手使用iview表格中的render也許會遇到的問題

iview的使用和element-ui相似。但在表格中控制項的使用上兩者有很大不同。element-ui在表格中是用插槽渲染模板,而iview是使用傳統的render渲染HTML頁面。

使用element-ui的好處是,它相對比較成熟,也就是所謂的坑少功能強。但是在表格中使用控制項(Select, input, button, switch等)時,由於是模板渲染所以冗餘代碼較多,特別遇到每列都有控制項的,就不夠簡潔。

但是iview使用render雖然簡潔,可是按照官方的例子很容易一不小心進坑。

以下是官網文檔

                {
                    title: 'Name',
                    key: 'name',
                    render: (h, params) => {
                        return h('div', [
                            h  ('Icon', {
                                props: {
                                    type: 'person'
                                }
                            }),
                            h('strong', params.row.name)
                        ]);
                    }
                },
                {
                    title: 'Action',
                    key: 'action',
                    width: 150,
                    align: 'center',
                    render: (h, params) => {
                        return h('div', [
                            h('Button', {
                                props: {
                                    type: 'primary',
                                    size: 'small'
                                },
                                style: {
                                    marginRight: '5px'
                                },
                                on: {
                                    click: () => {
                                        this.show(params.index)
                                    }
                                }
                            }, 'View'),
                            h('Button', {
                                props: {
                                    type: 'error',
                                    size: 'small'
                                },
                                on: {
                                    click: () => {
                                        this.remove(params.index)
                                    }
                                }
                            }, 'Delete')
                        ]);
                    }
                }

非常易懂,其中render里創建的標簽 Icon、Button 等都是iview的控制項,第一次使用時的我照葫蘆畫瓢,使用 Select、Switch。雙雙碰壁。

從根源上抓問題就是 render 函數了,它其實就相當於 creatElement 創建一個標簽,而 Icon、Button 這些控制項渲染之後標簽名剛好就是本身;但是 Select、Switch 渲染之後的 HTML 其實是 span 或者 div 標簽,然後 class 名上綁定樣式和事件。

所以不推崇這樣綁定標簽,而是綁定控制項,也就是 import 進來的控制項。

正確用法為:

                {
                    title: 'Name',
                    key: 'name',
                    render: (h, params) => {
                        return h('div', [
                            h  (Icon, {
                                props: {
                                    type: 'person'
                                }
                            }),
                            h('strong', params.row.name)
                        ]);
                    }
                },
                {
                    title: 'Action',
                    key: 'action',
                    width: 150,
                    align: 'center',
                    render: (h, params) => {
                        return h('div', [
                            h(Button, {
                                props: {
                                    type: 'primary',
                                    size: 'small'
                                },
                                style: {
                                    marginRight: '5px'
                                },
                                on: {
                                    click: () => {
                                        this.show(params.index)
                                    }
                                }
                            }, 'View'),
                            h(Button, {
                                props: {
                                    type: 'error',
                                    size: 'small'
                                },
                                on: {
                                    click: () => {
                                        this.remove(params.index)
                                    }
                                }
                            }, 'Delete')
                        ]);
                    }
                }

好像沒啥區別?對沒錯把引號去掉。引號裡面寫標簽名,什麼 div、span 那些,整個控制項傳進來的時候不要引號。

關於 Select

既然說到iview的table了那就說說Select這個控制項吧。做項目的時候幾乎所有人都踩到了同一個坑 --> 咦?!我的id傳回來了怎麼沒綁上去嘞!這個坑真的難找,我們看看官方文檔中,Select是這麼寫的:

我們再看看 iview 的 Select.vue 源碼:

這一切看起來那麼的美好~~

but !!!!! 我怎樣在綁定的時候賦上number類型的值捏?

一般的,我們如果想v-model輸出number值,我們會這麼做:

<input v-model.number="count" type="number">

so..... iview 中 Select 的文檔里並木有 type 這個 props , 自己加肯定是不行的。所以number類型的值無法綁上去吖......, 預設類型都是string。這會造成介面給你個 10, 你的 option 里對應的是 '10',然後預設值變成了空。

這裡我實在沒想到解決辦法,我就.....我就默默地把介面傳回來的數值類型通通toString()了 ( T-T 委屈 ,希望有小伙伴能給出更好的方法,不要醬紫暴力 )

另外Select真的是奇怪耶!文檔上寫的是:

非 template/render 模式下,需使用 i-select、i-option

然而事實是:

管你什麼模式都需要用 i-select、i-option !

本文轉載於:

https://juejin.cn/post/6844903655926136846

如果對您有所幫助,歡迎您點個關註,我會定時更新技術文檔,大家一起討論學習,一起進步。

 


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

-Advertisement-
Play Games
更多相關文章
  • 前言 想必在linux上寫過程式的同學都有分析進程占用多少記憶體的經歷,或者被問到這樣的問題——你的程式在運行時占用了多少記憶體(物理記憶體)? 通常我們可以通過top命令查看進程占用了多少記憶體。這裡我們可以看到VIRT、RES和SHR三個重要的指標,他們分別代表什麼意思呢? 這是本文需要跟大家一起探討的 ...
  • 近日,騰訊雲MySQL發佈新架構,在基礎硬體能力、自研內核及外部網路延遲等方面進行了全面升級。 在探究新版本實際性能的過程中,測試人員通過基準測試工具SysBench以及全模擬業務生產環境,分別針對只寫、只讀以及混合讀寫場景進行性能測試。其結果顯示,新架構下的雲資料庫MySQL在性能上比原有架構提升 ...
  • 摘要:不要歪了,我這裡說特性它不是 bug,而是故意設計的機制或語法,你有可能天天寫語句或許還沒發現原來還能這樣用,沒關係我們一起學下漲姿勢。 本文分享自華為雲社區《【雲駐共創】天天寫 SQL,你遇到了哪些神奇的特性?》,作者: 龍哥手記 。 一 SQL 的第一個神奇特性 日常開發我們經常會對錶進行 ...
  • 介紹多版本併發控制 多版本併發控制技術(Multiversion Concurrency Control,MVCC) 技術是為瞭解決問題而生的,通過 MVCC 我們可以解決以下幾個問題: 讀寫之間阻塞的問題:通過 MVCC 可以讓讀寫互相不阻塞,即讀不阻塞寫,寫不阻塞讀,這樣就可以提升事務併發處理能 ...
  • 一、組件化的優缺點 二、組件化的拆分 三、組件與組件之間如何進行通訊(路由) 四、從Cocopods拉取代碼的過程 遠程索引庫里很多的.spec文件,該文件記錄了很多內容,如用戶名,框架名稱,描述,框架的地址 Podfile 文件是拉取框架源碼的配置文件, pod install 命令會根據Podf ...
  • 愛思助手 IPA 簽名功能常見問題彙總 使用 Apple ID 簽名 IPA 文件也就是常說的“個人簽”,很多小伙伴在使用Apple ID簽名時,有時候會出現證書申請失敗,或者簽名失敗,這類報錯信息。 以下彙總愛思助手 IPA 簽名功能在使用時可能遇到的問題和解決辦法。 1.安裝已簽名的軟體需要越獄 ...
  • HMS Core廣告服務(Ads Kit)為開發者提供流量變現服務和廣告標識服務,依托華為終端能力,整合資源,幫助開發者獲取高質量的廣告內容。同時提供轉化跟蹤參數服務,支持三方監測平臺、廣告主進行轉化歸因分析。下麵我們分享一些開發者在接入廣告服務中經常會碰到的問題,希望給遇到類似問題的開發者提供參考 ...
  • 事件流 概述:事件流指代的是事件的執行流程,多個盒子嵌套相同事件,這個時候你觸發一個盒子的事件,並不會只執行一個盒子的事件的處理函數,而是全部執行。 事件流的倆種模式 冒泡模式(瀏覽器採用的) 冒泡模式指代的是事件從裡到外逐個執行 阻止事件冒泡 e.stopPropagation() 函數 (*)( ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...