Vuejs——(4)v-if、v-for
(二十)v-if
①標準v-if用法
簡單來說,該值為true則顯示該標籤,為false則不顯示;
如例:
[javascript] view plain copy- <div id="app">
- <div v-if="abc">{{abc.a}}</div>
- </div>
- <script>
- var vm = new Vue({
- el: '#app',
- data: {
-
abc: {
- a: "1"
- }
- }
- })<pre name="code"class="javascript">
</script>
當abc這個物件存在時,顯示這一行資料,其內容為abc.a的值;
假如abc這個物件不存在,那麼則不顯示;
也可以用另外一個變數來控制其是否顯示(能否顯示決定於該值隱式轉換為boolean型別時是true還是false);
例如假如上面有abc這個物件,但這個物件是空物件(沒有屬性a),但空物件隱式轉換後為true,因此會有div,但這個div裡沒有內容;
②template v-if 包裝以同時影響多個html標籤;
即假如多個標籤(且他們是連續的),被一個變數控制是否顯示,那麼每個都這麼寫顯然太繁瑣,因此用一個template標籤將這些標籤包裹起來,用v-if標籤控制該template標籤是否顯示,實際渲染時,template標籤不會顯示,只會顯示其內的標籤;
如示例:
[javascript] view plain copy- <div id="app">
- <template v-if="abc">
-
<div>{{abc[0]}}</div>
- <div>{{abc[1]}}</div>
- <div>{{abc[2]}}</div>
- </template>
- </div>
- <script>
- var vm = new Vue({
- el: '#app',
- data: {
- abc: [1, 2, 3]
- }
- })
- </script>
由於非空陣列是值為true,空陣列的值為false,因此方便控制;
另外,這裡只是演示,事實上更好的寫法的v-for來控制內部三個標籤來同時顯示(當然,如果不需要顯示全部的則不應該這麼寫);
顯示內容:
<divid="app">
<div>1</div>
<div>2</div>
<div>3</div>
</div>
③v-show 用於控制該標籤的display樣式
他的特點是,dom存在於頁面內,已經渲染、事件繫結完畢,區別只是是否顯示。
例如:
[javascript] view plain copy- <div v-show="a">{{test}}</div>
a的值為true,則正常顯示;
a的值為false,則自動新增display:none
v-show不支援template寫法(即不能同時控制多個同級連續div);
④v-else v-if和v-show的補充語句;
即v-if和v-show的判斷為true時,不顯示v-else標籤的內容;否則顯示v-else標籤的內容。
例如:
[javascript] view plain copy- <div id="app">
- <div v-show="a">{{test}}</div>
- <div v-else>def</div>
- </div>
- <script>
- var vm = new Vue({
- el: '#app',
- data: {
- a: true,
- test: "abc"
- }
- })
- </script>
顯示abc;
若把data中的a改為false,則顯示def;
另外,標籤之間需要連續,如以下,v-else則不能正常生效:
[javascript] view plain copy- <div v-show="a">{{test}}</div>
- <div>another</div>
- <div v-else>def</div>
另外,不要在元件的情況下使用v-else,而是採用v-show=”!變數名”來變相起到v-else的效果
⑤v-if和v-show的比較
v-if |
v-show |
|
渲染時間 |
第一次為真時 |
剛開始就渲染 |
切換形式 |
動態生成,區域性編譯/解除安裝 |
控制display屬性 |
生成消耗 |
較小(只生成為真的部分) |
較大(生成全部) |
切換消耗 |
較大(切換時需要區域性編譯) |
較小(因為生成時已經渲染完成) |
v-if是在第一次條件為真時,進行渲染(比如他下面還有其他元件);
v-show因為只是控制display的屬性,因此開始就會渲染;
(二十一)v-for列表渲染
①標準寫法
[javascript] view plain copy- <li v-for="i in items">{{i}}</li>
【1】items是一個物件或者陣列;
【2】該格式相當於for(var i in items){//略}
【3】插值的i相當於items[i]
【4】該li會被複制多個,然後依次被items[i]渲染,直到渲染完畢;
示例:
- <divid="app">
- <ul>
- <liv-for="i in items">{{i}}</li>
- </ul>
- </div>
- <script>
- var vm = new Vue({
- el: '#app',
- data: {
- items: {
- a: "1",
- b: "2",
- c: "3"
- }
- }
- })
- </script>
結果:
<divid="app">
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
</ul>
</div>
②索引編號:
在標籤裡使用$index,即表示當前索引在v-for中的編號(從0開始);
例如上面改為:
[javascript] view plain copy- <li v-for="i in items">{{i}}'s index is {{$index}}</li>
③template v-for 用於包裹多個標籤的v-for
簡單來說,需要將多個標籤都用v-for遍歷,那麼就需要用template標籤。
同樣,template在實際渲染的時候不會出現,只是起到一個包裹作用。
如程式碼:
異常(4)----通過throw、throws關鍵字寫帶有異常的方法
二、throws關鍵字 三、自己寫方法丟擲異常 四、舉例 一、throw關鍵字 關鍵字throw,用於在方法的內部丟擲異常。 throw丟擲的是異常的物件。throw後面,必須寫 new 物件(Exception或Exception
jQuery原始碼解析(4)—— css樣式、定位屬性
閒話 原計劃是沒有這篇博文的,研究animation原始碼的時候遇到了css樣式這個攔路虎。比如jQuery支援“+=10”、“+=10px”定義一個屬性的增量,但是有的屬性設定時可以支援數字,有的必須有單位;在對屬性當前值讀取時,不同的瀏覽器可能返回不同的單
C#中的方法傳參與switch、if結構(4)
判斷 1.2 菱形 條件表達式 執行 代碼 輸出 分類 簡易 一、方法傳參的2種方式 1、按值傳遞 傳遞的是值的副本,值會更改但未保留,值最終並未更改 2、按引用傳遞(形參用ref關鍵字修飾)【P86頁】 傳遞的是地址,值會更改且保留,值最終更改
Vue條件渲染(v-if和v-show的區別)
在專案中我們總是用到根據某一值判斷屬性是否顯示,或不同的值讓其顯示不同,顧名思義總是用v-if來實現,v-show也可用來判斷是否顯示,兩者有什麼區別呢? 相同點:兩者都可用作為條件判斷元素是否顯示。 不同點:1). v-if後可跟v-else-if 和 v-else用來
oracle系統表v$session、v$sql欄位說明(轉)
在本檢視中,每一個連線到資料庫例項中的 session都擁有一條記錄。包括使用者 session及後臺程序如 DBWR, LGWR, arcchiver等等。 V$SESSION中的常用列 V$SESSION是基礎資訊檢視,用於找尋使用者 SID或 SADDR。不過,它也有一些列會動態的變化,可用於檢查
Vuejs(14)——在v-for中,利用index來對第一項新增class
<aclass="list-group-item":class="{'active':!index}"v-for="(i,index) in announcement"> index來源於v-for,i表示遍歷的陣列的元素,index表示索引。 由於index從0開始,因此如果要