從零開(kāi)始學(xué)Vue(一)—— Vue.js 入門

概述

vue.js作為現(xiàn)在筆記熱門的JS框架离斩,使用比較簡(jiǎn)單易上手银舱,也成為很多公司首選的JS框架。 但是對(duì)于初學(xué)者可能學(xué)起來(lái)有些麻煩跛梗,所以推出《從零開(kāi)始學(xué)Vue》系列博客寻馏,本系列計(jì)劃推出19篇博客文章,這是最簡(jiǎn)單的入門第一篇核偿! 如下是暫定的系列博客目錄操软,歡迎有興趣的同學(xué)關(guān)注學(xué)習(xí)~~

系列博客目錄一覽(暫定)

01 Vue.js入門

02 Vue.js實(shí)例

03插值、指令

04過(guò)濾器Filters

05計(jì)算屬性Computed

06 Class與Style綁定

07 監(jiān)聽(tīng)屬性 Watch

08 條件渲染

09 列表渲染v-for

10 事件處理

11 初識(shí)組件

12 命令行工具(CLI)搭建

13 介紹vue-cli工程目錄結(jié)構(gòu)

14 組件嵌套/組件CSS作用域Scoped

15 Props屬性傳值

16 傳值與傳址

17 自定義事件傳值

18 生命周期鉤子

19 路由

1.1 Vue.js?概念

Vue (讀音?/vju?/宪祥,類似于?view) 是一套用于構(gòu)建用戶界面的漸進(jìn)式框架。與其它大型框架不同的是家乘,Vue 被設(shè)計(jì)為可以自底向上逐層應(yīng)用蝗羊。Vue 的核心庫(kù)只關(guān)注視圖層,不僅易于上手仁锯,還便于與第三方庫(kù)或既有項(xiàng)目整合耀找。另一方面,當(dāng)與現(xiàn)代化的工具鏈以及各種支持類庫(kù)結(jié)合使用時(shí)业崖,Vue 也完全能夠?yàn)閺?fù)雜的單頁(yè)應(yīng)用提供驅(qū)動(dòng)野芒。

1.2?起步

官方指南假設(shè)你已了解關(guān)于?HTML、CSS?和?JavaScript?的中級(jí)知識(shí)双炕。如果你剛開(kāi)始學(xué)習(xí)前端開(kāi)發(fā)狞悲,將框架作為你的第一步可能不是最好的主意——掌握好基礎(chǔ)知識(shí)再來(lái)吧!之前有其它框架的使用經(jīng)驗(yàn)會(huì)有幫助妇斤,但這不是必需的摇锋。

1.3?初試Vue.js

1.3.1?聲明式渲染:模板語(yǔ)法——插值(文本)

Vue.js?的核心是一個(gè)允許采用簡(jiǎn)潔的模板語(yǔ)法來(lái)聲明式地將數(shù)據(jù)渲染進(jìn)?DOM?的系統(tǒng):

HTML:

<div id="app">? {{ message }}</div>

JS:

varapp =new Vue({

? el: '#app',

? data: {

? ? message: 'Hello Vue!'? }

})

瀏覽器輸出內(nèi)容:Hello Vue!

除了文本插值,我們還可以像這樣來(lái)綁定元素特性:

HTML:

<div id="app-2"><span v-bind:title="message">? ? 鼠標(biāo)懸停幾秒鐘查看此處動(dòng)態(tài)綁定的提示信息站超!

? </span></div>

JS:

varapp2 =new Vue({

? el: '#app-2',

? data: {

? ? message: '頁(yè)面加載于 ' +new Date().toLocaleString()

? }

})

注意這里我們遇到了一點(diǎn)新東西荸恕。v-bind?特性被稱為指令。指令帶有前綴?v-死相,以表示它們是?Vue?提供的特殊特性融求。可能你已經(jīng)猜到了算撮,它們會(huì)在渲染的?DOM?上應(yīng)用特殊的響應(yīng)式行為生宛。在這里县昂,該指令的意思是:“將這個(gè)元素節(jié)點(diǎn)的?title?特性和?Vue?實(shí)例的?message?屬性保持一致”。

1.3.2?模板語(yǔ)法——條件v-if與循環(huán)v-for

控制切換一個(gè)元素是否顯示也相當(dāng)簡(jiǎn)單:

HTML:

<div id="app-3"><p v-if="seen">現(xiàn)在你看到我了</p></div>

JS:

varapp3 =new Vue({

? el: '#app-3',

? data: {

? ? seen: true? }

})

瀏覽器輸出打用┟印:現(xiàn)在你看到我了

注意這個(gè)例子演示了我們不僅可以把數(shù)據(jù)綁定到?DOM?文本或特性七芭,還可以綁定到?DOM?結(jié)構(gòu)。

還有其它很多指令蔑赘,每個(gè)都有特殊的功能狸驳。例如,v-for?指令可以綁定數(shù)組的數(shù)據(jù)來(lái)渲染一個(gè)項(xiàng)目列表:

HTML:

<div id="app-4"><ol><li v-for="todo in todos">? ? ? {{ todo.text }}

? ? </li></ol></div>

JS:

varapp4 =new Vue({

? el: '#app-4',

? data: {

? ? todos: [

? ? ? { text: '學(xué)習(xí) JavaScript' },

? ? ? { text: '學(xué)習(xí) Vue' },

? ? ? { text: '整個(gè)牛項(xiàng)目' }

? ? ]

? }

})

在控制臺(tái)里缩赛,輸入?app4.todos.push({ text: '新項(xiàng)目' })耙箍,你會(huì)發(fā)現(xiàn)列表最后添加了一個(gè)新項(xiàng)目。

1.3.3?模板語(yǔ)法——處理用戶輸入

為了讓用戶和你的應(yīng)用進(jìn)行交互酥馍,我們可以用?v-on?指令添加一個(gè)事件監(jiān)聽(tīng)器辩昆,通過(guò)它調(diào)用在?Vue?實(shí)例中定義的方法:

HTML:

<div id="app-5"><p>{{ message }}</p><button v-on:click="reverseMessage">逆轉(zhuǎn)消息</button></div>

JS:

varapp5 =new Vue({

? el: '#app-5',

? data: {

? ? message: 'Hello Vue.js!'? },

? methods: {

? ? reverseMessage: function () {

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

? ? }

? }

})

注意:在?reverseMessage?方法中,我們更新了應(yīng)用的狀態(tài)旨袒,但沒(méi)有觸碰?DOM——所有的?DOM?操作都由?Vue?來(lái)處理汁针,你編寫的代碼只需要關(guān)注邏輯層面即可。

1.3.4?雙向數(shù)據(jù)綁定

Vue?還提供了?v-model?指令砚尽,它能輕松實(shí)現(xiàn)表單輸入和應(yīng)用狀態(tài)之間的雙向綁定施无。

HTML:

<div id="app-6"><p>{{ message }}</p><input v-model="message"></div>

JS:

varapp6 =new Vue({

? el: '#app-6',

? data: {

? ? message: 'Hello Vue!'? }

})

1.3.5?組件化應(yīng)用構(gòu)建

組件系統(tǒng)是?Vue?的另一個(gè)重要概念,因?yàn)樗且环N抽象必孤,允許我們使用小型猾骡、獨(dú)立和通常可復(fù)用的組件構(gòu)建大型應(yīng)用敷搪。仔細(xì)想想兴想,幾乎任意類型的應(yīng)用界面都可以抽象為一個(gè)組件樹(shù):

在?Vue?里,一個(gè)組件本質(zhì)上是一個(gè)擁有預(yù)定義選項(xiàng)的一個(gè)?Vue?實(shí)例赡勘。在?Vue?中注冊(cè)組件很簡(jiǎn)單:

// 定義名為 todo-item 的新組件Vue.component('todo-item', {

? template: '

這是個(gè)待辦項(xiàng)

'})

現(xiàn)在你可以用它構(gòu)建另一個(gè)組件模板:

<ol><!-- 創(chuàng)建一個(gè) todo-item 組件的實(shí)例 --><todo-item></todo-item></ol>

但是這樣會(huì)為每個(gè)待辦項(xiàng)渲染同樣的文本嫂便,這看起來(lái)并不炫酷。我們應(yīng)該能從父作用域?qū)?shù)據(jù)傳到子組件才對(duì)狮含。讓我們來(lái)修改一下組件的定義顽悼,使之能夠接受一個(gè)?prop:

Vue.component('todo-item', {

? // todo-item 組件現(xiàn)在接受一個(gè)// "prop",類似于一個(gè)自定義特性几迄。// 這個(gè) prop 名為 todo蔚龙。? props: ['todo'],

? template: '

{{ todo.text }}

'})

現(xiàn)在,我們可以使用?v-bind?指令將待辦項(xiàng)傳到循環(huán)輸出的每個(gè)組件中:

<div id="app-7"><ol><!--? ? ? 現(xiàn)在我們?yōu)槊總€(gè) todo-item 提供 todo 對(duì)象

? ? ? todo 對(duì)象是變量映胁,即其內(nèi)容可以是動(dòng)態(tài)的木羹。

? ? ? 我們也需要為每個(gè)組件提供一個(gè)“key”,稍后再

? ? ? 作詳細(xì)解釋。

? ? --><todo-item

? ? ? v-for="item in groceryList"? ? ? v-bind:todo="item"? ? ? v-bind:key="item.id"></todo-item></ol></div>Vue.component('todo-item', {

? props: ['todo'],

? template: '<li>{{ todo.text }}</li>'

})

var app7 = new Vue({

? el: '#app-7',

? data: {

? ? groceryList: [

? ? ? { id: 0, text: '蔬菜' },

? ? ? { id: 1, text: '奶酪' },

? ? ? { id: 2, text: '隨便其它什么人吃的東西' }

? ? ]

? }

})

盡管這只是一個(gè)刻意設(shè)計(jì)的例子坑填,但是我們已經(jīng)設(shè)法將應(yīng)用分割成了兩個(gè)更小的單元抛人。子單元通過(guò)?prop?接口與父單元進(jìn)行了良好的解耦。我們現(xiàn)在可以進(jìn)一步改進(jìn)??組件脐瑰,提供更為復(fù)雜的模板和邏輯妖枚,而不會(huì)影響到父單元。

在一個(gè)大型應(yīng)用中苍在,有必要將整個(gè)應(yīng)用程序劃分為組件绝页,以使開(kāi)發(fā)更易管理。在后續(xù)教程中我們將詳述組件寂恬,不過(guò)這里有一個(gè)?(假想的)?例子续誉,以展示使用了組件的應(yīng)用模板是什么樣的:

<div id="app"><app-nav></app-nav><app-view><app-sidebar></app-sidebar><app-content></app-content></app-view></div>

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市初肉,隨后出現(xiàn)的幾起案子酷鸦,更是在濱河造成了極大的恐慌,老刑警劉巖牙咏,帶你破解...
    沈念sama閱讀 218,284評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件臼隔,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡妄壶,警方通過(guò)查閱死者的電腦和手機(jī)躬翁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)盯拱,“玉大人,你說(shuō)我怎么就攤上這事例嘱〗品辏” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 164,614評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵拼卵,是天一觀的道長(zhǎng)奢浑。 經(jīng)常有香客問(wèn)我,道長(zhǎng)腋腮,這世上最難降的妖魔是什么雀彼? 我笑而不...
    開(kāi)封第一講書人閱讀 58,671評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮即寡,結(jié)果婚禮上硕并,老公的妹妹穿的比我還像新娘尾组。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布傻丝。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上萧豆,一...
    開(kāi)封第一講書人閱讀 51,562評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音昏名,去河邊找鬼涮雷。 笑死,一個(gè)胖子當(dāng)著我的面吹牛轻局,可吹牛的內(nèi)容都是我干的洪鸭。 我是一名探鬼主播,決...
    沈念sama閱讀 40,309評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼嗽交,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼卿嘲!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起夫壁,我...
    開(kāi)封第一講書人閱讀 39,223評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤拾枣,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后盒让,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體梅肤,經(jīng)...
    沈念sama閱讀 45,668評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評(píng)論 3 336
  • 正文 我和宋清朗相戀三年邑茄,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了姨蝴。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,981評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡肺缕,死狀恐怖左医,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情同木,我是刑警寧澤浮梢,帶...
    沈念sama閱讀 35,705評(píng)論 5 347
  • 正文 年R本政府宣布,位于F島的核電站彤路,受9級(jí)特大地震影響秕硝,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜洲尊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評(píng)論 3 330
  • 文/蒙蒙 一远豺、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧坞嘀,春花似錦躯护、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,904評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春检眯,著一層夾襖步出監(jiān)牢的瞬間厘擂,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,023評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工锰瘸, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留刽严,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,146評(píng)論 3 370
  • 正文 我出身青樓避凝,卻偏偏與公主長(zhǎng)得像舞萄,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子管削,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評(píng)論 2 355

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