Uni-app之Vue的組件用法

v-for指令渲染列表



v-for渲染列表
數(shù)據(jù)list數(shù)組

#key

? ?預期:number | string | boolean | symbol

? ? key的特殊attribute主要用在Vue的虛擬DOM算法桨菜,在新舊nodes對比時辨識VNodes铣猩。如果不使用key,Vue會使用一種最大限度減少動態(tài)元素并且盡可能的嘗試就地修改/復用相同類型元素的算法伏嗜。而使用key時色迂,它會基于Key的變化重新排列元素順序华蜒,并且會移除key不存在的元素。

? ? 有相同父元素的子元素必須有獨特的Key。重復的Key會造成渲染錯誤。

? ? 最常見的組合? ?v-for :

<ul>

? ? ? ? <li? ? ?v-for=" item in items "? ? ?:key="item.id">{{ item }} </li>

</ul>

它也可以用于強制替換元素/組件而不是重復使用它系洛,當遇到如下場景可能會用到:1. 完整地觸發(fā)組件的聲明周期鉤子? 2. 觸發(fā)過渡

<transition>

? ? ? ? <span :key="text">{{ text }}</span>

</transition>

// 當text發(fā)生改變時俊性,<span>總是會被替換而不是被修改,因此會觸發(fā)過渡

綁定class的幾種方式


通過數(shù)據(jù)驅(qū)動的方式實現(xiàn)類的動態(tài)化綁定

綁定class

綁定Style



綁定style

計算屬性


在模板中綁定表達式是非常便利的描扯,但是它們實際上只用于簡單的操作定页。在模板中放入太多的邏輯會讓模板過重且難以維護

<div id="example">

????????????{{ message.split('').reverse().join('') }}

</div>

????在這種情況下,模板不再簡單和清晰绽诚。在實現(xiàn)反向顯示?message?之前典徊,你應該確認它。這個問題在你不止一次反向顯示 message 的時候變得更加糟糕恩够。因此卒落,官網(wǎng)也說過,任何復雜的邏輯處理蜂桶,都應使用計算屬性导绷。

<div? ? id="example">

? ? ? ? <p> message: "{{ message }}"</p>

? ? ? ? <p> computed message : " {{ reversedMessage }} "</p>

</div>

var? ? vm = new Vue({

? ? ? ? el : '#example',

? ? ? ? data :{

? ? ? ? ? ? message : 'student'

? ? ? ? },

? ? ? ? computed :{

? ? ? ? ? ? //計算屬性的getter

? ? ? ? ? ? reversedMessage :function () {

? ? ? ? ? ? ? ? ? ? ? ? //? this 指向的是 vm 實例

? ? ? ? ? ? ? ? ? ? ? ? return? this.message.split(' ').reverse().join()

? ? ? ? ? ? }

? ? ? ? }

})

條件渲染


v-if?指令用于條件性地渲染一塊內(nèi)容。這塊內(nèi)容只會在指令的表達式返回 truthy 值的時候被渲染屎飘。

必須是兄弟相連的元素,中間不能放其他的元素贾费!

在?<template>?元素上使用?v-if?條件渲染分組

????因為?v-if?是一個指令钦购,所以必須將它添加到一個元素上。但是如果想切換多個元素呢褂萧?此時可以把一個?<template>?元素當做不可見的包裹元素押桃,并在上面使用?v-if。最終的渲染結(jié)果將不包含?<template>?元素导犹。

<div v-if="type === 'A'">

????????A

</div>

<div v-else-if="type === 'B'">

????????B

</div>

<div v-else-if="type === 'C'">

????????C

</div>

<div v-else>

????????Not A/B/C

</div>

用?key?管理可復用的元素

????Vue 會盡可能高效地渲染元素唱凯,通常會復用已有元素而不是從頭開始渲染。這么做除了使 Vue 變得非郴蚜。快之外磕昼,還有其它一些好處。例如节猿,如果你允許用戶在不同的登錄方式之間切換:

<template v-if="loginType === 'username'">

????<label> Username</label>

????<input placeholder="Enter your username">

</template>

<template v-else>

????<label>Email</label>

????<input placeholder="Enter your email address">

</template>

v-show


另一個用于根據(jù)條件展示元素的選項是?v-show?指令票从。用法大致一樣:

<h1 v-show="ok">Hello!</h1>

不同的是帶有?v-show?的元素始終會被渲染并保留在 DOM 中

v-show?只是簡單地切換元素的 CSS property?display滨嘱。

注意峰鄙,v-show?不支持?<template>?元素,也不支持?v-else太雨。

v-if與v-show的區(qū)別


v-if?是“真正”的條件渲染吟榴,因為它會確保在切換過程中條件塊內(nèi)的事件監(jiān)聽器和子組件適當?shù)乇讳N毀和重建。

v-if?也是惰性的:如果在初始渲染時條件為假囊扳,則什么也不做——直到條件第一次變?yōu)檎鏁r吩翻,才會開始渲染條件塊兜看。

相比之下,v-show?就簡單得多——不管初始條件是什么仿野,元素總是會被渲染铣减,并且只是簡單地基于 CSS 進行切換。

一般來說脚作,v-if?有更高的切換開銷葫哗,而?v-show?有更高的初始渲染開銷。因此球涛,如果需要非常頻繁地切換劣针,則使用?v-show?較好;如果在運行時條件很少改變亿扁,則使用?v-if?較好捺典。

v-if與v-for不推薦同時使用


不推薦同時使用?v-if?和?v-for。

當?v-if?與?v-for?一起使用時从祝,v-for?具有比?v-if?更高的優(yōu)先級襟己。

組件與路由頁面


組件的定義:主要負責構(gòu)建用戶界面,包含 HTML JS Style

// 定義一個名為 button-counter 的新組件

?Vue.component('button-counter', {

????????data: function (){

????????????????????return {

????????????????????????????count: 0

????????????????????????}

????????????},

????????template: '<button v-on:click="count++">You clicked me {{ count }} times.</button>'

})

????組件是可復用的 Vue 實例牍陌,且?guī)в幸粋€名字:在這個例子中是?<button-counter>擎浴。我們可以在一個通過?new Vue?創(chuàng)建的 Vue 根實例中,把這個組件作為自定義元素來使用

<div id="components-demo">

????????<button-counter></button-counter>

</div>

new Vue({

????????el: '#components-demo'

})

因為組件是可復用的 Vue 實例毒涧,所以它們與?new Vue?接收相同的選項贮预,例如?data、computed契讲、watch仿吞、methods?以及生命周期鉤子等。僅有的例外是像?el?這樣根實例特有的選項捡偏。

data必須是一個函數(shù)

當我們定義這個?<button-counter>?組件時唤冈,你可能會發(fā)現(xiàn)它的?data?并不是像這樣直接提供一個對象:

data: {

????????count:0

}

取而代之的是,一個組件的?data?選項必須是一個函數(shù)银伟,因此每個實例可以維護一份被返回對象的獨立的拷貝

data:function(){

????return{

????????count:0

????????}

}

如果 Vue 沒有這條規(guī)則务傲,點擊一個按鈕就可能會像如下代碼一樣影響到其它所有實例,會共享同一個對象枣申。

路由頁面


用于操作頁面的跳轉(zhuǎn)實現(xiàn), 在uniapp中售葡,放在pages里面頁面,都叫路由頁面忠藤,同時路由頁面必須有注冊在pages.json中挟伙。

路由的功能:是框架統(tǒng)一管理,需要在pages.json中配置每個路由頁面的路徑及頁面樣式。類似小程序在app.json中配置頁面路由一樣尖阔,所以在uni-app的路由用法與Vue-Router方式管理路由不同贮缅。

路由的跳轉(zhuǎn):uni-app有兩種頁面路由跳轉(zhuǎn)方式:1.使用navigator組件跳轉(zhuǎn)? ? 2.調(diào)用API跳轉(zhuǎn)

頁面棧:框架以棧的形式管理當前所有的頁面,當發(fā)生路由切換的時候介却,頁面棧的表現(xiàn)如下:

路由方式????????????????????????????????頁面棧表現(xiàn)????????????????????????????????????????觸發(fā)時機

初始化? ? ? ? ? ? ? ? ? ? ????????????? ?新頁面入棧? ? ? ? ? ? ? ? ? ? ? ? ? ? ? uni-app 打開的第一個頁面

打開新頁面? ? ? ? ? ? ? ? ? ? ? ? ? ? 新頁面入棧????????????????????????調(diào)用 API ??uni.navigateTo??谴供、使用組件 ?<navigator open-type="navigate"/>

頁面重定向????????????????當前頁面出棧,新頁面入棧? ? ? ? ? 調(diào)用 API ??uni.redirectTo??齿坷、使用組件??<navigator open-type="redirectTo"/>

頁面返回? ? ? ? ? ? ? ?頁面不斷出棧桂肌,直到目標返回頁? ? ? ? 調(diào)用 API ?uni.navigateBack? ?,使用組件?<navigator open-type="navigateBack"/>?、? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 用戶按左上角返回按鈕永淌、安卓用戶點擊物理back按鍵

Tab 切換????????????頁面全部出棧崎场,只留下新的 Tab 頁面? ? 調(diào)用 API ?uni.switchTab? 、使用組件??<navigator open-type="switchTab"/>? 遂蛀、用? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?戶切換 Tab

重加載????????????????頁面全部出棧谭跨,只留下新的頁面? ? ? ? ? ? 調(diào)用 API ?uni.reLaunch? 、使用組件 ?<navigator open-type="reLaunch"/>

定義一個list.vue組件

組件的使用步驟:1從外部引入? 2. 注冊? 3. 使用在view中

uni.navigateTo(object):? 保留當前頁面李滴,跳轉(zhuǎn)到應用內(nèi)的某個頁面螃宙,使用 uni.navigateBack 可以返回到原來的頁面

<template>

? ? <view>

? ? ? ? ? ? <h3>自定義頁面</h3>

? ? </view>

</template>

<script>

? ? ? ? export? default {

? ? ? ? ? ? ? ? data () {

? ? ? ? ? ? ? ? ? ? ? ? return {}

? ? ? ? ? ? ? ? ? },

? ? ? ? ? ? ? ? methods: {

? ? ? ? ? ? ? ? ? ? ? ? onLoad() {

? ? ? ? ? ? ? ? ? ? ? ? ? ? //編程式導航,通過路徑所坯,實現(xiàn)頁面的跳轉(zhuǎn)

? ? ? ? ? ? ? ? ? ? ? ? ? ? uni.navigateTo({

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? url : '/pages/list/list'

? ? ? ? ? ? ? ? ? ? ? ? ? ? })

? ? ? ? ? ? ? ? }

}

<style>

</style>

? ??????????

然后操作路由去實現(xiàn)頁面的跳轉(zhuǎn)

pages.json

注:如果頁面沒有發(fā)生跳轉(zhuǎn)污呼,可能需要重新編譯一下,可能是出現(xiàn)了緩存包竹。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市籍凝,隨后出現(xiàn)的幾起案子周瞎,更是在濱河造成了極大的恐慌,老刑警劉巖饵蒂,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件声诸,死亡現(xiàn)場離奇詭異,居然都是意外死亡退盯,警方通過查閱死者的電腦和手機彼乌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來渊迁,“玉大人慰照,你說我怎么就攤上這事×鹦啵” “怎么了毒租?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長箱叁。 經(jīng)常有香客問我墅垮,道長惕医,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任算色,我火速辦了婚禮抬伺,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘灾梦。我一直安慰自己峡钓,他們只是感情好,可當我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布斥废。 她就那樣靜靜地躺著椒楣,像睡著了一般。 火紅的嫁衣襯著肌膚如雪牡肉。 梳的紋絲不亂的頭發(fā)上捧灰,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天,我揣著相機與錄音统锤,去河邊找鬼毛俏。 笑死,一個胖子當著我的面吹牛饲窿,可吹牛的內(nèi)容都是我干的煌寇。 我是一名探鬼主播,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼逾雄,長吁一口氣:“原來是場噩夢啊……” “哼阀溶!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起鸦泳,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤银锻,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后做鹰,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體击纬,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年钾麸,在試婚紗的時候發(fā)現(xiàn)自己被綠了更振。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡饭尝,死狀恐怖肯腕,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情钥平,我是刑警寧澤乎芳,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響奈惑,放射性物質(zhì)發(fā)生泄漏吭净。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一肴甸、第九天 我趴在偏房一處隱蔽的房頂上張望寂殉。 院中可真熱鬧,春花似錦原在、人聲如沸友扰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽村怪。三九已至,卻和暖如春浮庐,著一層夾襖步出監(jiān)牢的瞬間甚负,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工审残, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留梭域,地道東北人。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓搅轿,卻偏偏與公主長得像病涨,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子璧坟,可洞房花燭夜當晚...
    茶點故事閱讀 44,779評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 說明 :uni-app基于Vue 2.0實現(xiàn)既穆,開發(fā)者需注意Vue 1.0 -> 2.0 的使用差異,詳見從 Vue...
    瑟聞風傾閱讀 29,561評論 0 8
  • 引言 移動互聯(lián)網(wǎng)的初期雀鹃,囿于設(shè)備硬件性能限制幻工,流量以原生App為主,iOS褐澎、Android是當時兩大平臺。 隨著硬...
    邵張散人閱讀 1,474評論 0 1
  • 前言 您將在本文當中了解到,往網(wǎng)頁中添加數(shù)據(jù),從傳統(tǒng)的dom操作過渡到數(shù)據(jù)層操作,實現(xiàn)同一個目標,兩種不同的方式....
    itclanCoder閱讀 25,800評論 1 12
  • 目錄介紹 01.遇到問題匯總 02.關(guān)于布局設(shè)置 03.基礎(chǔ)語法總結(jié) 04.關(guān)于交互問題 06.關(guān)于回傳數(shù)據(jù) 07...
    楊充211閱讀 755評論 1 2
  • 好一段時間沒寫文章了伐蒋。嗯工三,之前欠的nodemcu的文章,我會找時間補上的先鱼。剛好項目組推新的固件俭正,加入幾個新的模塊。...
    謝mingmin閱讀 1,980評論 1 3