Vue知識點總結(2)——v-for、v-if、v-show(超級詳細)

2021-03-02 Code程序人生

這篇文章我們了解一下v-for、v-if、v-show指令的用法,這三個指令都是常用的。順便我們會講解一道高頻面試題:v-if和v-show的區別。

v-for

v-for在實際的業務開發中非常的普遍。我們在學習一些高級語言的時候都知道for循環,通過循環我們可以遍歷出數據規範相似的數據組。
我們思考一個業務場景:在商城中,我們點擊一種商品分類,會渲染出很多種規格類似的商品。
如果渲染出20組商品就要寫20個相同的組件嗎?程式設計師必然不可能這麼傻。
一個商品卡片的內容可能有圖片、名字、價格、庫存、商品描述。這20個商品都是這些欄位,只是改變了欄位的值而已。
所以,這就是v-for指令的作用所在。
我們使用v-for就可以用一種商品卡片的代碼,渲染出無窮無盡的商品,只要我們想。
下面說一下基本的語法:

<div id="app">    <ul>        <li v-for="item in items">            {{item}}        </li>    </ul></div><script type="text/javascript">    var app = new Vue({        el:'#app',        data:{            items:[59,82,96,41,55,2,4,91,25],        },    });</script>

這就是v-for最基本的用法。v-for中的item和items都可以任意改變,但是items必須與要渲染的數組名稱相同。因為我data中的數組名字是items所以我這裡也是寫的items。
先來看一下效果吧:

如果我們想要索引的話,就把v-for中的內容改為」(item,index) in items「即可。

       <ul>            <li v-for="(item,index) in items">               索引:{{index}},內容:{{item}}            </li>       </ul>

看一下效果:

在有些業務場景下,我們需要藉助索引的幫助。
上面我們講的是數組的渲染,下面我們說一下對象的渲染。

<div id="app">    <ul>        <li v-for="item in Students">            {{item.name}} - {{item.age}}        </li>    </ul></div><script type="text/javascript">    var app = new Vue({        el:'#app',        data:{            Students:[                {                    name:'Ray',                    age:18                },                {                    name:'Creator',                    age:20                },                {                    name:'Code',                    age:3                }            ]        },</script>

先看一下結果吧:

渲染對象的代碼形式和渲染數組很類似。我們在渲染數組的時候,插值表達式{{}}中只需要寫item即可,但是渲染對象的時候,需要{{item.屬性}},其實還是比較簡單的。索引的用法和數組那裡一樣。
因為篇幅有限,我們只是舉了一個很小的例子,v-for的應用場景很廣泛,可以給我們優化掉很多的代碼量。

v-if

我們如何控制一個組件是否顯示?其實有很多方法,但是vue為我們提供的v-if非常好用。
基本代碼如下:

<div id="app">    <p v-if="msg">我被顯示了</p></div><script>    new Vue({        el:'#app',        data:{            msg:true        }    });</script>

我們在p標籤上寫了一個v-if,綁定了一個變量為msg。在data中,我們給msg賦值的布爾值true,所以,按理來說,這個p標籤會被顯示。

沒有問題。
v-if用法很簡單,但是應用場景也非常的廣泛,我們可以在很多的方法事件中,處理v-if綁定的變量值,用來控制組件的顯示與隱藏。這個指令是非常非常重要的。

v-show

說起v-show,其實它的作用和v-if是一樣一樣的。但是它們又有著根本上的區別,這個區別在面試中經常被問道。
我們先寫一下它的基本代碼格式:

<div id="app">    <p v-show="msg">我被顯示了</p></div><script>    new Vue({        el:'#app',        data:{            msg:true        }    });</script>

是不是和v-if一樣一樣的。
但是我們細細來觀察一下。當我們把msg的值改為false的時候,打開F12,看一下代碼。

頁面上確實沒有顯示出內容。但是!!!在DOM結構中,這個p標籤其實已經被掛載上去了,只是把CSS的display屬性值改為了none!!!
我們用同樣的操作,在看一下v-if的DOM結構。

在p標籤並沒有被掛載到DOM上!!!
所以這是v-if和v-show最根本的區別,敲下黑板。這個知識點在一些基礎面試中,出現率極高。

v-if和v-show都有各自的應用場景,大家可以仔細思考一下,根據它們的特點,什麼時候用v-if,什麼時候用v-show。值得思考一下。

相關焦點

  • 【面試真題系列】Vue中的v-if和v-show有什麼區別?
    在用法上也相同:<div v-if="show"></div><div v-show="show"></div>v-if和v-show的區別兩者的區別主要表現在下面四個方面
  • 前端:v-if與v-show的用法與區別
    vue中顯隱方法常用兩種,v-show和v-if,但這兩種是有區別的。實現本質方法區別v-show本質就是標籤display設置為none,控制隱藏v-if是動態的向DOM樹內添加或者刪除DOM元素編譯的區別v-show
  • Vue知識點總結(5)——v-model(超級詳細)
    今天的內容是v-model雙向數據綁定是Vue的靈魂特點之一,v-model是完美的體現了Vue雙向綁定的特點。
  • Vue v-for循環數據
    一、原理分析v-for數據循環是vue項目中比較常用的一個功能主要應用在相同樣式重複的數據,通過v-for的方式寫一條數據即可,剩下的數據通過循環的方式渲染展示.這裡我們可以看到,這是一個網站首頁的banner圖,裡面有三張banner圖,樣式都是一樣的,一般的寫法是寫三個img標籤展示三張圖片,而在vue中就可以用v-for的方式,寫一個img標籤循環渲染展示三張banner圖.
  • vue基本知識點總結——面試必備
    前一陣子看了很多關於vue的知識點,自己理解著整理一下,再加深一下印象。也希望可以幫助到有需要的同學。理解錯誤的地方,歡迎指正。1、對於Vue是一套漸進式框架的理解答:Vue是漸進的,沒有強主張,是個輕量視圖。它只做了自己應該做的事,沒有做多餘的事。2、vue.js的兩個核心是什麼?答:數據驅動和組件化。
  • 淺談Vue.js中v-text,v-html,{{}}之間的異同
    實際項目中可能你經常那麼寫,也經常看到過,但你未必真的深刻認識這幾個之間的區別,我記得在以前公司有人這麼說過自己寫css代碼,全程靠猜,例如margin不行改padding,padding不行改定位,這就很能說明問題,對知識點理解不深刻,你不能說他不能做東西,但這樣寫出來的頁面,自然是兼容性差,耦合性過高看下面一段代碼<div
  • 關於 v-model 的一點思考
    本文來自「Vue 虛擬實驗室」的小夥伴,本文詳細講解了 v-model 的使用在 Vue 中 v-model 指令的使用場景,主要分為兩種
  • 深入理解v-model之自定義組件用法
    綁定多個v-model在 vue2 中當在自定義組件中使用v-model時,組件接收一個屬性value的值,然後通過觸發input事件來更新該值:-- 等價於 --><custom-comp :value="msg" @input="msg = $event"></custom-comp>v-model 實現實現方式類似,我們看下 vue2 中實現一個自定義 input 組件:
  • JDictSelectTag下拉框,選值無效,v-model和v-decorator用法詳解
    根據貼出來的問題代碼,使用了v-model關聯參數,同時設置了trigger-change,查看JDictSelectTag.vue代碼,執行邏輯如下:也就是說,設置trigger-change時,沒有執行input()事件處理函數,執行的是change(),所以model綁定的值沒有變化。
  • vue之自定義組件的 v-model 的詳解及實踐
    Vue的自定義組件的 v-model的這塊將的不是很清楚,今天我們就一起來捋一下看看自定義組件中的v-model是什麼。先看官方文檔中對v-model的解釋v-model 指令在表單 <input>、<textarea> 及 <select> 元素上創建雙向數據綁定。它會根據控制項類型自動選取正確的方法來更新元素。儘管有些神奇,但 v-model 本質上不過是語法糖。
  • Vue的學習筆記(中篇)
    v-if和v-show的使用:如果元素涉及到頻繁的切換,最好不要使用 v-if, 而是使用 v-show,如果元素可能永遠也不會被顯示出來被用戶看到,則使用v-if。flag"><h3 v-if="flag">這是用v-if控制的元素</h3><h3 v-show="flag">這是用v-show控制的元素</h3>2.在data中定義一個flag,如以下的代碼;
  • Vux v0.1.2 發布,基於 Vue 和 WeUI 的 UI 組件庫
    Hi, Vux 0.1.2發布了。
  • vue v-for 指令的基本用法【07】
    arr:[ { city:'北京', }, { city:'上海', }, { city:'深圳', } ]};</script>PS:插值使用 item.city 語法來獲取每個元素;2.
  • 總結 Vue 知識體系之高級技巧應用篇
    那麼怎麼系統地學習和掌握 vue 呢?為此,我做了簡單的知識體系體系總結,不足之處請各位大佬多多包涵和指正,如果喜歡的可以點個小贊!本文主要講述一些vue開發中的幾個高級應用,希望能對大家有所幫助。Vue.use我們使用的第三方 Vue.js 插件。如果插件是一個對象,必須提供install方法。
  • 結合源碼理解vue列表渲染v-for中的key屬性
    剛開始使用vue框架的同學有的喜歡用v-for的index係數來作為key的值,這樣和用元素的唯一id作為key有什麼區別呢?這次來給大家講解。        上篇文章結合源碼給大家講解了vue2.0的生命周期和響應式原理,模板一開始要經過編譯成virtualDOM,之後vue在渲染VirtualDOM時通過get函數進行依賴收集和當數據改變時通過set函數進行派發更新。
  • Vue面試中,經常會被問到的面試題/Vue知識點整理
    2、vue生命周期的作用是什麼?答:它的生命周期中有多個事件鉤子,讓我們在控制整個Vue實例的過程時更容易形成好的邏輯。3、vue生命周期總共有幾個階段?答:它可以總共分為8個階段:創建前/後, 載入前/後,更新前/後,銷毀前/銷毀後。4、第一次頁面加載會觸發哪幾個鉤子?
  • vue的v-for中為什麼要加:key
    vue的v-for中不加:key貌似也能正常顯示,為什麼要加:key呢?我們知道vue可以動態的改變頁面的結構,比如在一個div裡面插入一個span標籤,看似簡單的操作,底層還是很複雜的,它是如何實現的呢?
  • [VUE基礎]vue2中emit的使用姿勢
    $emit('closeMain',flag);},(2)在父組件中子組件引用處添加函數v-on:function="function1";其中function為子組件中定義函數,function1為父組件定義函數--用於接收子組件傳值並進行相應數據處理,可定義為同一名稱
  • Vue造輪子必備*.vue文件源碼讀取並高亮展示
    npm v6.4.1yarn v1.22.10vue-cli v4.5.9@vue/compiler v3.0.4前言(需求)就是想讀取 *.vue 文件的源碼並高亮展示到頁面上,又不想用第三方的依賴(其實是找不到)。2.
  • vue-element-admin v3.9.1 發布,後臺集成方案
    vue-element-admin v3.9.1 已發布,更新內容:feature[TagsView]: 支持滑鼠中鍵關閉 TagsView #1149feature