Vue概念及常見命令介紹

Vue.js介紹


Vue.js是JavaScript MVVM(Model-View-ViewModel)庫高氮,十分簡潔谣沸,Vue核心只關(guān)注視圖層,相對AngularJS提供更加簡潔阻星、易于理解的API七冲。Vue盡可能通過簡單的API實現(xiàn)響應(yīng)的數(shù)據(jù)綁定和組合的視圖組件荚孵。

Vue和MVVM模式


MVVM模式即Model-View-ViewModel余耽。Vue提供的核心是MVVM中的VM耍缴,即ViewModel戴而。ViewModel負(fù)責(zé)連接View和Model凑术,保證視圖和數(shù)據(jù)的一致性。
Vue借鑒了AngularJS的directive和filter的概念所意,但是API相對簡單易懂淮逊,而在整體也相對輕巧許多,Vue在組件化上與React概念很接近扁眯,可以定義可復(fù)用和嵌套的組件類壮莹,可以在模板中聲明式的使用組件。
Vue是以數(shù)據(jù)為驅(qū)動的姻檀,Vue自身將DOM和數(shù)據(jù)進(jìn)行綁定命满,一旦創(chuàng)建綁定,DOM和數(shù)據(jù)將保持同步绣版,每當(dāng)數(shù)據(jù)發(fā)生變化胶台,DOM會跟著變化歼疮。
ViewModel是Vue的核心,它是Vue的一個實例诈唬。Vue實例時作用域某個HTML元素上的韩脏,這個HTML元素可以是body,也可以是某個id所指代的元素铸磅。
DOM Listeners和Data Bindings是實現(xiàn)雙向綁定的關(guān)鍵赡矢。DOM Listeners監(jiān)聽頁面所有View層DOM元素的變化,當(dāng)發(fā)生變化阅仔,Model層的數(shù)據(jù)隨之變化吹散;Data Bindings監(jiān)聽Model層的數(shù)據(jù),當(dāng)數(shù)據(jù)發(fā)生變化八酒,View層的DOM元素隨之變化空民。

Vue.js特點

  • 簡潔:頁面由HTML模板+Json數(shù)據(jù)+Vue實例組成
  • 數(shù)據(jù)驅(qū)動:自動計算屬性和追蹤依賴的模板表達(dá)式
  • 組件化:用可復(fù)用、解耦的組件來構(gòu)造頁面
  • 輕量:代碼量小羞迷,不依賴其他庫
  • 快速:精確有效批量DOM更新
  • 模板友好:可通過npm界轩,bower等多種方式安裝,很容易融入

Vue.js入門小例子

聲明式渲染

本例子由HTML模板(View)+Json數(shù)據(jù)(Model)+Vue實例(ViewModel)組成衔瓮。
創(chuàng)建Vue的實例浊猾,需傳入一個選項對象,如:數(shù)據(jù)报辱、掛載元素与殃、方法、模生命周期鉤子等碍现。本例子中幅疼,選項對象的el屬性為#app,表示Vue實例掛載在<div id="app">...</div>元素上昼接,data屬性為exampleData爽篷,表示Model為exampleData。View中{{message}}是Vue的一種數(shù)據(jù)綁定語法慢睡,在運行時逐工,{{message}}會被數(shù)據(jù)對象的message屬性替換。

<!DOCTYPE html>
<html>
    <head>
        <title>聲明式渲染</title>
        <meta charset="utf-8">
        <script src="https://unpkg.com/vue/dist/vue.js"></script>        
    </head>
    <body>
        <!-- View -->
        <div id="app">
            {{message}}
        </div>
        <script>
            //Model
            var exampleData = {
                message: 'Hello Vue!'
            }
            //ViewModel
            var app = new Vue({
                el: '#app',
                data: exampleData
            })
        </script>
    </body>
</html>

雙向綁定

在Vue中使用v-model在表單元素上實現(xiàn)雙向綁定漂辐。當(dāng)在輸入框輸入的信息發(fā)生變化泪喊,<p>...</p>中的信息隨之變化;當(dāng)通過控制臺中的Console髓涯,修改exampleData.message的值袒啼,輸入框中的信息也隨之變化。

<!DOCTYPE html>
<html lang="en">
    <head>
        <title>雙向綁定</title>
        <meta charset="utf-8">
        <script src="https://unpkg.com/vue/dist/vue.js"></script>
    </head>
    <body>
        <!-- View -->
        <div id="app">
            <p>{{message}}</p>
            <input type="text" v-model="message">
        </div>
        <script>
            //Model
            var exampleData = {
                message: 'Hello Vue!'
            }
            //ViewModel
            var app = new Vue({
                el: '#app',
                data: exampleData
            })
        </script>
    </body>
</html>

運行截圖:


更改exampleData.message

Vue.js常用指令

Vue指令以v-開頭,作用在HTML元素上蚓再,將指令綁定在元素上時滑肉,會給綁定的元素添加一些特殊行為,可將指令視作特殊的HTML屬性(attribute)摘仅。
下面將介紹Vue中常用的幾個內(nèi)置指令靶庙。當(dāng)然,Vue除了內(nèi)置指令娃属,也可以根據(jù)需求自定義指令六荒。

v-if指令

條件判斷指令,根據(jù)表達(dá)式值的真假來插入或刪除元素矾端,表達(dá)式返回一個布爾值恬吕,語法如下:

v-if = "expression"

例子:
在本例中,表達(dá)式是yes须床,no,和age>25渐裂,yes的值為true豺旬,因此在HTML中顯示該元素,其他同理柒凉。

<!DOCTYPE html>
<html lang="en">
    <head>
        <title>v-if指令</title>
        <meta charset="utf-8">
        <script src="https://unpkg.com/vue/dist/vue.js"></script>
    </head>
    <body>
        <div id="app">
            <h1 v-if="yes">Yes</h1>
            <h1 v-if="no">No</h1>
            <h1 v-if="age > 25">Age: {{age}}</h1>
        </div>
        <script>
            var app = new Vue({
                el: '#app',
                data: {
                    yes: true,//值為真族阅,插入元素
                    no: false,//值為假,不插入元素
                    age: 28
                }
            })
        </script>
    </body>
</html>

運行截圖:


v-show指令

條件渲染指令膝捞,與v-if不同的是坦刀,無論v-show的值為truefalse,元素都會存在于HTML代碼中蔬咬;而只有當(dāng)v-if的值為true鲤遥,元素才會存在于HTML代碼中。v-show指令只是設(shè)置了元素CSS的style值林艘。語法如下:

v-show = "expression"

例子:

<!DOCTYPE html>
<html lang="en">
    <head>
        <title>v-show指令</title>
        <meta charset="utf-8">
        <script src="https://unpkg.com/vue/dist/vue.js"></script>
    </head>
    <body>
        <div id="app">
            <h1 v-show="yes">Yes</h1>
            <h1 v-show="no">No</h1>
            <h1 v-show="age > 25">Age: {{age}}</h1>
        </div>
        <script>
            var app = new Vue({
                el: '#app',
                data: {
                    yes: true,//值為真
                    no: false,//值為假
                    age: 28
                }
            })
        </script>
    </body>
</html>

運行截圖:


v-else指令

可配合v-if或v-show使用盖奈,v-else指令必須緊鄰v-if或v-show,否則該命令無法正常工作狐援。v-else綁定的元素能否渲染在HTML中钢坦,取決于前面使用的是v-if還是v-show。若前面使用的是v-if啥酱,且v-if值為true爹凹,則v-else元素不會渲染;若前面使用的是v-show镶殷,且v-show值為true禾酱,則v-else元素仍會渲染到HTML。

v-for指令

循環(huán)指令,基于一個數(shù)組渲染一個列表宇植,與JavaScript遍歷類似得封,語法如下:

v-for = "item in items"

例子:
在本例中,數(shù)組是todos指郁,依次遍歷數(shù)組todos中的每個元素忙上,將text部分顯示。

<!DOCTYPE html>
<html lang="en">
    <head>
        <title>v-for指令</title>
        <meta charset="utf-8">
        <script src="https://unpkg.com/vue/dist/vue.js"></script>
    </head>
    <body>
        <div id="app">
            <ol>
                <li v-for="todo in todos">{{todo.text}}</li>
            </ol>
        </div>
        <script>
            var app = new Vue({
                el: '#app',
                data: {
                    todos: [
                        {text: 'learn Javascript'},
                        {text: 'learn Vue'},
                        {text: 'learn ...'}
                    ]
                }
            })
        </script>
    </body>
</html>

運行截圖:


在瀏覽器控制臺里Console闲坎,輸入app.todos.push({text: 'new item'})疫粥,則會插入新的一條信息。
運行截圖:

v-bind指令

給DOM綁定元素屬性腰懂,語法如下:

v-bind:argument="expression"

其中梗逮,argument通常是HTML元素的特性,如:v-bind:class="expression"绣溜。
注:v-bind指令可以縮寫為:冒號慷彤。如::class="expression"
例子:
在本例子中怖喻,當(dāng)鼠標(biāo)懸停在span標(biāo)簽的文字上時底哗,會顯示加載網(wǎng)頁的時間。

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <script src="https://unpkg.com/vue/dist/vue.js"></script>
    </head>
    <body>
        <div id="app">
            <span v-bind:title="message">Hover your mouse over me</span>
        </div>
        <script>
            var app = new Vue({
                el: '#app',
                data: {
                    message: 'you loaded this page on ' + new Date()
                }
            })
        </script>
    </body>
</html>

v-on指令

用于監(jiān)聽DOM事件锚沸,語法與v-bind類似跋选,如監(jiān)聽點擊事件v-on:click="doSth"
注:v-on指令可以縮寫為@符號哗蜈。如:@click="dooSth"前标。
例子:

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <script src="https://unpkg.com/vue/dist/vue.js"></script>
    </head>
    <body>
        <div id="app">
            <p><input type="text" v-model="message"></p>
            <p>
                <button v-on:click="greet">Greet</button>
            </p>
            <p>
                <button v-on:click="say('hello vue')">Hello</button>
            </p>
        </div>
        <script>
            var app = new Vue({
                el: '#app',
                data: {
                    message: 'Greet to Vue'
                },
                methods: {
                    greet: function(){
                        alert(this.message);
                    },
                    say: function(msg){
                        alert(msg);
                    }
                }
            })
        </script>
    </body>
</html>

運行結(jié)果:


一個綜合性例子

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <script src="https://unpkg.com/vue/dist/vue.js"></script>
    </head>
    <body>
        <div id="app">
            <fieldset>
                <legend>Create New</legend>

                <label for="">Name:</label>
                <input type="text" v-model="newPerson.name">

                <label for="">Age:</label>
                <input type="text" v-model="newPerson.age">

                <label for="">Age:</label>
                <select name="" id="" v-model="newPerson.sex">
                    <option value="Male">Male</option>
                    <option value="Female">Female</option>
                </select>
    
                <button @click="createPerson">Create</button>
            </fieldset>
            <table>
                <tr>
                    <th>Name</th>
                    <th>Age</th>
                    <th>Sex</th>
                    <th>Delete</th>
                </tr>
                <tr v-for="person in people">
                    <td>{{person.name}}</td>
                    <td>{{person.age}}</td>
                    <td>{{person.sex}}</td>
                    <td><button @click="deletePerson($index)">Delete</button></td>
                </tr>
            </table>
        </div>
        <script>
            var app = new Vue({
                el: '#app',
                data: {
                    newPerson: {
                        name: '',
                        age: 0,
                        sex: 'Male'
                    },
                    people: [{
                        name: 'tyy',
                        age: 24,
                        sex: 'Male'
                    }, {
                        name: 'syd',
                        age: 24,
                        sex: 'Female'
                    }]
                },
                methods: {
                    createPerson: function(){
                        this.people.push(this.newPerson);
                        this.newPerson = {
                            name: '',
                            age: 0,
                            sex: 'Male'
                        }
                    },
                    deletePerson: function(index){
                        this.people.splice(index, 1);
                    }
                }
            })
        </script>
    </body>
</html>

運行截圖:


參考鏈接

  1. Vue.js——60分鐘快速入門
  2. 介紹Vue.js
最后編輯于
?著作權(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
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來菱农,“玉大人缭付,你說我怎么就攤上這事⊙矗” “怎么了陷猫?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵秫舌,是天一觀的道長。 經(jīng)常有香客問我绣檬,道長足陨,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任娇未,我火速辦了婚禮墨缘,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘零抬。我一直安慰自己镊讼,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布平夜。 她就那樣靜靜地躺著蝶棋,像睡著了一般。 火紅的嫁衣襯著肌膚如雪忽妒。 梳的紋絲不亂的頭發(fā)上玩裙,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天,我揣著相機與錄音段直,去河邊找鬼献酗。 笑死,一個胖子當(dāng)著我的面吹牛坷牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播很澄,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼京闰,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了甩苛?” 一聲冷哼從身側(cè)響起蹂楣,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎讯蒲,沒想到半個月后痊土,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡墨林,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年赁酝,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(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
  • 正文 我出身青樓刽虹,卻偏偏與公主長得像,于是被迫代替她去往敵國和親呢诬。 傳聞我的和親對象是個殘疾皇子涌哲,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,779評論 2 354

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

  • 1.安裝 可以簡單地在頁面引入Vue.js作為獨立版本,Vue即被注冊為全局變量尚镰,可以在頁面使用了阀圾。 如果希望搭建...
    Awey閱讀 11,018評論 4 129
  • 這篇筆記主要包含 Vue 2 不同于 Vue 1 或者特有的內(nèi)容,還有我對于 Vue 1.0 印象不深的內(nèi)容狗唉。關(guān)于...
    云之外閱讀 5,050評論 0 29
  • Vue 實例 屬性和方法 每個 Vue 實例都會代理其 data 對象里所有的屬性:var data = { a:...
    云之外閱讀 2,209評論 0 6
  • 版權(quán)歸作者所有初烘,任何形式轉(zhuǎn)載請聯(lián)系作者。作者:二小姐 入冬以來常常聽到大家傳“磚家”們說今年是最冷冬天分俯。到現(xiàn)在為止...
    小菲菲菲兒閱讀 212評論 0 0
  • 天喪臉肾筐,地哭情,淚雨嘩嘩淋缸剪。大禹治疾數(shù)千年局齿,河道病不輕。 雷公吼橄登,龍鬧心抓歼,風(fēng)狂嘯嘯鳴讥此。小民活來萬艱辛,苦累與誰聽谣妻。...
    松風(fēng)入骨閱讀 281評論 82 68