Vue (一)

vue

一严蓖、認識Vue

定義:一個構建數(shù)據驅動的 web 界面的漸進式框架

優(yōu)點:

1车遂、可以完全通過客戶端瀏覽器渲染頁面京办,服務器端只提供數(shù)據

2、方便構建單頁面應用程序(SPA)

二而昨、引入Vue

<div id="app">
    <p title="p"></p>
    <p v-bind:title='title'></p>
</div>
<script type="text/javascript" src="vue.js"></script>
<script>
    new Vue({
        el: '#app',
        data: {
            title: 'vue-p'
        }
    })
</script>

三救氯、Vue實例

  • 實例:el
<div id='app'>
    
</div>
<script>
    new Vue({
        el: '#app'
    })
</script>
  • 數(shù)據:data
<div id='app'>
    <p v-text='msg1'></p>
    <p>{{ msg2 }}</p>
</div>
<script>
    new Vue({
        el: '#app',
        data: {
            msg1: '段落1',
            msg2: '段落2'
        }
    })
</script>
  • 方法:methods
<div id='app'>
    <p v-on:click='func'>{{ msg }}</p>
</div>
<script>
    new Vue({
        el: '#app',
        data: {
            msg: '段落'
        },
        methods: {
            func: function() {
                alert(this.msg)
            }
        }
    })
</script>
  • 計算屬性:computed
<div id='app'>
    <div>
        姓:<input type='text' v-model='first_name'>
    </div>
    <div>
        名:<input type='text' v-model='last_name'>
    </div>
    <div>
        全名:<input type='text' v-model='full_name'>
    </div>
</div>
<script>
    new Vue({
        el: '#app',
        data: {
            first_name: '',
            last_name: ''
        },
        computed: {
            full_name: function() {
                return this.first_name + this.last_name
            }
        }
    })
</script>
  • 監(jiān)聽器:watch
<div id='app'>
    <div>
        姓名:<input type='text' v-model='full_name'>
    </div>
    <p>姓:{{ first_name }}</p>
    <p>名:{{ last_name }}</p>
</div>
<script>
    new Vue({
        el: '#app',
        data: {
            full_name: '',
            first_name: '',
            last_name: ''
        },
        watch: {
            full_name: function() {
                this.first_name = this.full_name.split(' ')[0];
                this.last_name = this.full_name.split(' ')[1];
            }
        }
    })
</script>
  • 分隔符:delimiters
<div id='app'>
    ${ msg }
</div>
<script>
    new Vue({
        el: '#app',
        data: {
            msg: 'message'
        },
        delimiters: ['${', '}']
    })
</script>
  • 實例對象使用成員屬性與方法
<script>
    var app = new Vue({
        el: '#app',
        data: {
            msg: 'message'
        }
    })
    console.log(app)
    console.log(app.$el)
    console.log(app.$data.msg)
    console.log(app.msg)
</script>

四、實例生命周期鉤子

  • 定義
每個 Vue 實例在被創(chuàng)建時都要經過一系列的初始化過程——例如配紫,需要設置數(shù)據監(jiān)聽、編譯模板午阵、將實例掛載到 DOM 并在數(shù)據變化時更新 DOM 等躺孝。同時在這個過程中也會運行一些叫做生命周期鉤子的函數(shù),這給了用戶在不同階段添加自己的代碼的機會底桂。
  • 鉤子方法
beforeCreate:在實例初始化之后植袍,數(shù)據觀測 (data observer) 和 event/watcher 事件配置之前被調用。

created:在實例創(chuàng)建完成后被立即調用籽懦。在這一步于个,實例已完成以下的配置:數(shù)據觀測 (data observer),屬性和方法的運算暮顺,watch/event 事件回調厅篓。然而,掛載階段還沒開始捶码,$el 屬性目前不可見羽氮。

beforeMount:在掛載開始之前被調用:相關的 render 函數(shù)首次被調用。

mounted:el被新創(chuàng)建的vm.$el替換惫恼,并掛載到實例上去之后調用該鉤子档押。

beforeUpdate:數(shù)據更新時調用,發(fā)生在虛擬 DOM 打補丁之前祈纯。

updated:數(shù)據更新時調用令宿,發(fā)生在虛擬 DOM 打補丁之前。

activated:keep-alive 組件激活時調用腕窥。

deactivated:keep-alive 組件停用時調用粒没。

beforeDestroy:實例銷毀之前調用。在這一步簇爆,實例仍然完全可用革娄。

destroyed:Vue實例銷毀后調用。調用后冕碟,Vue實例指示的所有東西都會解綁定拦惋,所有的事件監(jiān)聽器會被移除,所有的子實例也會被銷毀安寺。

errorCaptured:2.5.0+ 新增厕妖,當捕獲一個來自子孫組件的錯誤時被調用。此鉤子會收到三個參數(shù):錯誤對象挑庶、發(fā)生錯誤的組件實例以及一個包含錯誤來源信息的字符串言秸。此鉤子可以返回 false 以阻止該錯誤繼續(xù)向上傳播软能。
  • 重點鉤子
created:實例完全創(chuàng)建完畢(屬性與方法都準備就緒)【倩可以進行數(shù)據操作(請求后臺數(shù)據查排,重新渲染最新數(shù)據)

mounted:虛擬DOM構建完畢,并完成實例的el掛載抄沮“虾耍可以重新操作頁面DOM

五、視圖常規(guī)操作

  • v-text:文本變量
<p v-text='msg'></p>
<p>{{ msg }}</p>
  • v-once:一次性文本賦值
<p v-once>{{ msg }}</p>
  • v-html:html文本變量
<p v-html='msg'></p>
<script>
    new Vue({
        el: '#app',
        data: {
            msg: '<b>文本</b>'
        }
    })
</script>
  • v-bind:屬性綁定
<div id="app">
    <img v-bind:src='imgSrc' />
    <!-- 簡寫 -->
    <img :src='imgSrc' />
</div>
<script>
    new Vue({
        el: '#app',
        data: {
            imgSrc: 'https://www.baidu.com/favicon.ico'
        }
    })
</script>
  • v-model:雙向數(shù)據綁定
<div id="app">
    <input type="text" v-model='msg'>
    <p>{{ msg }}</p>
</div>
<script>
    new Vue({
        el: '#app',
        data: {
            msg: ''
        }
    })
</script>
  • v-cloak:避免頁面加載閃爍
<style>
    [v-cloak] {
        display: none;
    }
</style>
<div id="app" v-cloak>
    
</div>
  • 視圖自身運算
<div id="app" v-cloak>
    <p>{{ 1 + 1 }}</p>
    <p>{{ [1, 2, 3].join('@') }}</p>
</div>

六叛买、條件渲染

  • v-if:值true會被渲染砂代,值false不會被渲染
<div id="app">
    <div v-if='isShow'>div div div</div>
    <button @click='isShow = !isShow'>改變</button>
</div>
<script>
    new Vue({
        el: '#app',
        data: {
            isShow: true
        }
    })
</script>
  • v-else:與v-if結合使用形成對立面
<div id="app">
    <div v-if='isShow'>div div div</div>
    <div v-else='isShow'>DIV DIV DIV</div>
    <button @click='isShow = !isShow'>改變</button>
</div>
<script>
    new Vue({
        el: '#app',
        data: {
            isShow: true
        }
    })
</script>
  • v-else-if:變量的多情況值判斷
<div id="app">
    <div v-if='tag == 0'>if if if</div>
    <div v-else-if='tag == 1'>else if else</div>
    <div v-else='tag == 2'>else else else</div>
    <input type='number' min='0' max='2' v-model='tag' />
</div>
<script>
    new Vue({
        el: '#app',
        data: {
            tag: 0
        }
    })
</script>
  • template:不被渲染的vue結構標簽
<template v-if="isShow">
    <p>用template嵌套</p>
    <p>可以為多行文本</p>
    <p>同時顯隱</p>
    <p>且template標簽不會被vue渲染到頁面</p>
</template>
  • v-show:一定會被渲染到頁面,以display屬性控制顯隱
  • key:為v-if方式的顯隱創(chuàng)建緩存率挣,提高效率
<div id="app">
    <div v-if='tag == 0' key='0'>if if if</div>
    <div v-else-if='tag == 1' key='1'>else if else</div>
    <div v-else='tag == 2' key='2'>else else else</div>
    <input type='number' min='0' max='2' v-model='tag' />
</div>
<script>
    new Vue({
        el: '#app',
        data: {
            tag: 0
        }
    })
</script>

七刻伊、列表渲染

  • v-for:循環(huán)渲染列表
<div id="app">
    <ul>
        <li v-for='item in items'>{{ item }}</li>
    </ul>
    <button @click='click'>改變</button>
</div>
<script>
    new Vue({
        el: '#app',
        data: {
            items: ['張三', '李四', '王五']
        },
        methods: {
            click: function () {
                this.items.splice(1, 1, '李大大');
                this.items.pop();
                this.items.push('趙六')
            }
        }
    })
</script>
  • 遍歷數(shù)組
// items: ['張三', '李四', '王五']

// 值
<ul>
    <li v-for='item in items'>{{ item }}</li>
</ul>
// 值, 索引
<ul>
    <li v-for='(item, index) in items'>{{ index }} - {{ item }}</li>
</ul>
  • 遍歷對象
// {'name': '張三', 'age': 18, 'sex': '男'}

// 值
<div v-for="value in object">
  {{ value }}
</div>
// 值, 鍵
<div v-for="(value, key) in object">
  {{ key }}: {{ value }}
</div>
// 值, 鍵, 索引
<div v-for="(value, key, index) in object">
  {{ index }}. {{ key }}: {{ value }}
</div>

  • 復雜數(shù)據渲染
// items: [{'name': '張三'}, {'age': 18}, {'sex': '男'}]
<div>
    <div>{{ items[0].name }}</div>
    <div>{{ items[1].age }}</div>
    <div>{{ items[2].sex }}</div>
</div>
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末椒功,一起剝皮案震驚了整個濱河市捶箱,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌动漾,老刑警劉巖讼呢,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異谦炬,居然都是意外死亡悦屏,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進店門键思,熙熙樓的掌柜王于貴愁眉苦臉地迎上來础爬,“玉大人,你說我怎么就攤上這事吼鳞】囱粒” “怎么了?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵赔桌,是天一觀的道長供炎。 經常有香客問我,道長疾党,這世上最難降的妖魔是什么音诫? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮雪位,結果婚禮上竭钝,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好香罐,可當我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布卧波。 她就那樣靜靜地躺著,像睡著了一般庇茫。 火紅的嫁衣襯著肌膚如雪港粱。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天旦签,我揣著相機與錄音查坪,去河邊找鬼。 笑死顷霹,一個胖子當著我的面吹牛咪惠,可吹牛的內容都是我干的击吱。 我是一名探鬼主播淋淀,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼覆醇!你這毒婦竟也來了朵纷?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤永脓,失蹤者是張志新(化名)和其女友劉穎袍辞,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體常摧,經...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡搅吁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了落午。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谎懦。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖溃斋,靈堂內的尸體忽然破棺而出界拦,到底是詐尸還是另有隱情,我是刑警寧澤梗劫,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布享甸,位于F島的核電站,受9級特大地震影響梳侨,放射性物質發(fā)生泄漏蛉威。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一走哺、第九天 我趴在偏房一處隱蔽的房頂上張望瓷翻。 院中可真熱鬧,春花似錦、人聲如沸齐帚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽对妄。三九已至湘今,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間剪菱,已是汗流浹背摩瞎。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留孝常,地道東北人旗们。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像构灸,于是被迫代替她去往敵國和親上渴。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,976評論 2 355

推薦閱讀更多精彩內容