我的 Vue.js 學習日記 (二)

Robi發表於2018-05-02

上節回顧

昨天我把Vue.js學習中介紹篇大致看了一遍,當時其實沒有上傳成功,莫名其妙的草稿也儲存失敗了,變成了半張的殘缺稿,然後到早上到公司隨意點了一下還是沒有成功,也沒太在意,然後…然後莫名其妙就傳上去了???

本篇目標

今天準備把Vue例項篇走一邊
我知道我並不強大,但我想努力變強大。

建立一個Vue例項

一個 Vue 應用由一個通過 new Vue 建立的根 Vue 例項,以及可選的巢狀的、可複用的元件樹組成。

好,我來重複一遍:一個Vue應用應該是一個new Vue根例項(樹根)一堆亂七八糟的元件(樹杈子)組成。

建立Vue例項的基礎格式:連我都覺得太簡單所以不寫了

var data = {
    班級名稱 : `狠一班`,
    班級學生 :
    [
     {姓名 : `我老猛` , 性別 : `女`},
     {姓名 : `我老萌` , 性別 : `男`}   
    ],
    班主任 : `詞窮`
}

var vm = new Vue({
    data : data
})

由此可見data應該就是一個屬性的集合而且各種型別的屬性一鍋燉,嗯…,逗號分割。

至於下面說的修改資料值,還是實際試一下比較好。

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
</head>
<body>
    <div id="app">
        {{message}}
        <br />
        <span v-bind:title="message">
            滑鼠懸停幾秒據說有看頭?
        </span>
        <br />
        <p v-if="seen">Now you see me - 我倫</p>
        <ol>
            <li v-for="todo in todos">
                {{todo.text}}
            </li>
        </ol>
        <button v-on:click="reverseMessage">啥叫逆轉訊息???</button>
        <br />
        <input type="text" v-model="message" />
        <ol>
            <todo-item v-for="item in items"
                       v-bind:todo="item"
                       v-bind:key="item.id">
            </todo-item>
        </ol>
    </div>

    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        Vue.component(`todo-item`, {
            props: [`todo`],
            template: `<li>{{todo.text}}</li>`
        })

        var data = {
            message: `Hello Vue!` + new Date().toLocaleString(),
            seen: true,
            todos: [
                { text: `第一個` },
                { text: `第2個` },
                { text: `第三個` }
            ],
            items: [
                { id: 0, text: `青椒` },
                { id: 1, text: `茄子` },
                { id: 2, text: `蕃茄` }
            ]
        }

        var app = new Vue({
            el: `#app`,
            data: data,
            methods: {
                reverseMessage: function () {
                    this.message = this.message.split(``).reverse().join(``)
                }
            }
        })
    </script>
</body>
</html>

我倫做測試吧,F12Consoledata.seenapp.seen=falsedata.seendata.seen=trueapp.seen
可以看到結果,兩個物件無論修改哪一個,都會影響另外一個,同時改變了頁面上我倫的顯示隱藏。

只有當例項被建立時data中存在的屬性才是響應式

這裡我現在還不知道怎麼在執行時向data中追加屬性物件,所以沒有辦法提供程式碼驗證了…(短時間內沒查出來)不過我記住這個點了。

Object.freeze()

var data = {
    msg : `you have a new message.`,
    num : 3,
    seen : true
}

Object.freeze(data)

var app = new Vue({
    el : `#app`,
    data : data
})

字面意思 – 凍結 ,貌似無法單獨凍結data下的指定屬性,比如:Object.freeze(data.msg),雖然不抱錯,但是還是可以改值的,所以只能以data為單位凍。

data凍結後的結果:F12app.msg = `some other.`會報錯,錯誤挺容易理解的,大概是這屬性是只讀的,然而我們還可以用data.msg = `some other.`,可以看到這裡不會報錯,不過當輸入data.msg列印值時發現並沒有修改其值。

Vue官方有提供一下內建例項屬性與方法,他們都是$開頭,不過都是通過Vue例項.出來的

Vue的生命週期

那圖有些看不懂,先大致記一下生命週期的鉤子的執行順序吧:

從前到後依次是:

beforeCreate -> created -> beforeMount -> mounted -> beforeUpdate -> updated -> beforeDestroy -> destroyed
建立前 -> 建立後 -> 裝載前 -> 裝載後 -> 更新前 -> 更新後 -> 銷燬前 -> 銷燬後

小節

不知不覺又12點了,每天都感覺時間很少,總是不夠用。
今天並沒有些什麼實質性的程式碼,幾乎只是一些理論,而且並不多。
加油吧~

相關文章