從零開始學Vue(一)—— Vue.js 入門

概述

vue.js作為現在筆記熱門的JS框架,使用比較簡單易上手,也成為很多公司首選的JS框架。 但是對于初學者可能學起來有些麻煩,所以推出《從零開始學Vue》系列博客,本系列計劃推出19篇博客文章,這是最簡單的入門第一篇! 如下是暫定的系列博客目錄,歡迎有興趣的同學關注學習~~

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

01 Vue.js入門

02 Vue.js實例

03插值、指令

04過濾器Filters

05計算屬性Computed

06 Class與Style綁定

07 監聽屬性 Watch

08 條件渲染

09 列表渲染v-for

10 事件處理

11 初識組件

12 命令行工具(CLI)搭建

13 介紹vue-cli工程目錄結構

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

15 Props屬性傳值

16 傳值與傳址

17 自定義事件傳值

18 生命周期鉤子

19 路由

1.1 Vue.js?概念

Vue (讀音?/vju?/,類似于?view) 是一套用于構建用戶界面的漸進式框架。與其它大型框架不同的是,Vue 被設計為可以自底向上逐層應用。Vue 的核心庫只關注視圖層,不僅易于上手,還便于與第三方庫或既有項目整合。另一方面,當與現代化的工具鏈以及各種支持類庫結合使用時,Vue 也完全能夠為復雜的單頁應用提供驅動。

1.2?起步

官方指南假設你已了解關于?HTML、CSS?和?JavaScript?的中級知識。如果你剛開始學習前端開發,將框架作為你的第一步可能不是最好的主意——掌握好基礎知識再來吧!之前有其它框架的使用經驗會有幫助,但這不是必需的。

1.3?初試Vue.js

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

Vue.js?的核心是一個允許采用簡潔的模板語法來聲明式地將數據渲染進?DOM?的系統:

HTML:

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

JS:

varapp =new Vue({

? el: '#app',

? data: {

? ? message: 'Hello Vue!'? }

})

瀏覽器輸出內容:Hello Vue!

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

HTML:

<div id="app-2"><span v-bind:title="message">? ? 鼠標懸停幾秒鐘查看此處動態綁定的提示信息!

? </span></div>

JS:

varapp2 =new Vue({

? el: '#app-2',

? data: {

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

? }

})

注意這里我們遇到了一點新東西。v-bind?特性被稱為指令。指令帶有前綴?v-,以表示它們是?Vue?提供的特殊特性。可能你已經猜到了,它們會在渲染的?DOM?上應用特殊的響應式行為。在這里,該指令的意思是:“將這個元素節點的?title?特性和?Vue?實例的?message?屬性保持一致”。

1.3.2?模板語法——條件v-if與循環v-for

控制切換一個元素是否顯示也相當簡單:

HTML:

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

JS:

varapp3 =new Vue({

? el: '#app-3',

? data: {

? ? seen: true? }

})

瀏覽器輸出打印:現在你看到我了

注意這個例子演示了我們不僅可以把數據綁定到?DOM?文本或特性,還可以綁定到?DOM?結構。

還有其它很多指令,每個都有特殊的功能。例如,v-for?指令可以綁定數組的數據來渲染一個項目列表:

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: '學習 JavaScript' },

? ? ? { text: '學習 Vue' },

? ? ? { text: '整個牛項目' }

? ? ]

? }

})

在控制臺里,輸入?app4.todos.push({ text: '新項目' }),你會發現列表最后添加了一個新項目。

1.3.3?模板語法——處理用戶輸入

為了讓用戶和你的應用進行交互,我們可以用?v-on?指令添加一個事件監聽器,通過它調用在?Vue?實例中定義的方法:

HTML:

<div id="app-5"><p>{{ message }}</p><button v-on:click="reverseMessage">逆轉消息</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?方法中,我們更新了應用的狀態,但沒有觸碰?DOM——所有的?DOM?操作都由?Vue?來處理,你編寫的代碼只需要關注邏輯層面即可。

1.3.4?雙向數據綁定

Vue?還提供了?v-model?指令,它能輕松實現表單輸入和應用狀態之間的雙向綁定。

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?組件化應用構建

組件系統是?Vue?的另一個重要概念,因為它是一種抽象,允許我們使用小型、獨立和通常可復用的組件構建大型應用。仔細想想,幾乎任意類型的應用界面都可以抽象為一個組件樹:

在?Vue?里,一個組件本質上是一個擁有預定義選項的一個?Vue?實例。在?Vue?中注冊組件很簡單:

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

? template: '

這是個待辦項

'})

現在你可以用它構建另一個組件模板:

<ol><!-- 創建一個 todo-item 組件的實例 --><todo-item></todo-item></ol>

但是這樣會為每個待辦項渲染同樣的文本,這看起來并不炫酷。我們應該能從父作用域將數據傳到子組件才對。讓我們來修改一下組件的定義,使之能夠接受一個?prop:

Vue.component('todo-item', {

? // todo-item 組件現在接受一個// "prop",類似于一個自定義特性。// 這個 prop 名為 todo。? props: ['todo'],

? template: '

{{ todo.text }}

'})

現在,我們可以使用?v-bind?指令將待辦項傳到循環輸出的每個組件中:

<div id="app-7"><ol><!--? ? ? 現在我們為每個 todo-item 提供 todo 對象

? ? ? todo 對象是變量,即其內容可以是動態的。

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

? ? ? 作詳細解釋。

? ? --><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: '隨便其它什么人吃的東西' }

? ? ]

? }

})

盡管這只是一個刻意設計的例子,但是我們已經設法將應用分割成了兩個更小的單元。子單元通過?prop?接口與父單元進行了良好的解耦。我們現在可以進一步改進??組件,提供更為復雜的模板和邏輯,而不會影響到父單元。

在一個大型應用中,有必要將整個應用程序劃分為組件,以使開發更易管理。在后續教程中我們將詳述組件,不過這里有一個?(假想的)?例子,以展示使用了組件的應用模板是什么樣的:

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

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,818評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,185評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,656評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,647評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,446評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,951評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,041評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,189評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,718評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,602評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,800評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,316評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,045評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,419評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,671評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,420評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,755評論 2 371

推薦閱讀更多精彩內容