【筆記】實戰mpvue2.0多端小程序框架——Vue入門


Vue入門 | 慕課網「小慕讀書」官網


一、爲什麼要學習Vue

先看一組數據

  • github star 14w+,位列開發項目第一
  • patreon捐贈$1.5w+/月
  • Chrome DevTools周活用戶90w+

給出三點理由:

  • 最熱門的前端開源框架之一
  • 大幅提升Web開發效率,降低開發門檻
  • 大幅提升Web項目的可維護性

二、Hello World

第一步 在桌面創建index.html文件

touch ~/Desktop/index.html

第二步 填入如下代碼

用你喜歡的編輯器打開這個文件(注意:不要用瀏覽器打開,因爲這樣你無法編輯它),推薦使用Webstorm或者Vscode,寫入如下代碼:

<!DOCTYPE html>
<html>
  <head>
    <title>vue測試</title>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  </head>
  <body>
    <div id="root">{{message}}</div>
    <script>
      new Vue({
        el: '#root',
        data() {
          return {
            message: 'Hello Mpvue!'
          }
        }
      })
    </script>
  </body>
</html>

第三步 使用瀏覽器打開index.html

這時我們會在瀏覽器中看到如下效果: vue_preview 如果你也看到同樣的內容,恭喜你!這說明我們的程序生效了

三、源碼分析

上述代碼基本是Vue可運行的最小case,下面我們就來分析一下這個case的具體執行過程,幫忙大家理解Vue的工作原理(爲了節約篇幅,省略了與Vue無關的內容):

第一步,加載vue.js腳本

<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>

執行這行代碼時,瀏覽器會下載並執行vue.js這個腳本文件,下載地址是:https://cdn.jsdelivr.net/npm/vue/dist/vue.js,大家可以直接打開這個文件,這個文件就是Vue.js源碼經過編譯、打包後生成的最終文件

這裏有兩個非常重要的基礎知識點:

  • 瀏覽器解析html文件的過程是自上而下、逐行解析的
  • 執行script標籤時,瀏覽器會下載,然後執行js腳本,只有這一步完成後纔會開始下一步,因爲如果不完成這一步,下面的代碼中如果使用了該js腳本內容時就會報錯

第二步,生成div

加載完vue.js腳本後瀏覽器繼續執行body中的內容

<div id="root">{{message}}</div>

當瀏覽器執行到上述代碼時,得到的效果如下: vue_preview2 爲什麼會這樣呢?因爲這裏的{{message}}被視爲普通文本來執行了,要驗證這一點很簡單,大家把代碼中這部分代碼刪除即可

第三步,執行script腳本

我們通過結果可以反推下面這段代碼的作用是將界面中的{{message}}替換爲Hello Mpvue!,事實也確實如此!這裏的el: '#root’告訴瀏覽器去查找id爲root的DOM,然後將其中的變量替換爲我們自定義的內容

new Vue({
  el: '#root',
  data() {
    return {
      message: 'Hello Mpvue!'
    }
  }
})

到這裏,我要恭喜你,已經完成了Vue.js的入門學習,由此可見Vue.js並沒有那麼難學!

四、事件

下面我們向界面中增加一個按鈕,代碼如下:

<div id="root">
  {{message}}
  <button>點擊變換文字</button>
</div>

這時雖然可以看到按鈕,但是點擊它是沒有反應的,因爲我們還沒有綁定事件,Vue中綁定點擊事件需要通過@click來實現:

<div id="root">
  {{message}}
  <button @click="handleClick">點擊變換文字</button>
</div>

這裏有一點非常重要,就是button必須爲位於id爲root的div下,vue只會處理該div下的DOM,像下面這樣的代碼是無法綁定成功的!

<div id="root">{{message}}</div>
<!-- 下面這行代碼綁定事件是無效的 -->
<button @click="handleClick">點擊變換文字</button>

這段代碼表示點擊按鈕時,會調用handleClick方法,注意這個方法是需要定義在Vue參數的methods屬性中,完整代碼如下:

<!DOCTYPE html>
<html>
  <head>
    <title>vue測試</title>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  </head>
  <body>
    <div id="root">
      {{message}}
      <button @click="handleClick">點擊變換文字</button>
    </div>
    <script>
      new Vue({
        el: '#root',
        data() {
          return {
            message: 'Hello Mpvue!'
          }
        },
        methods: {
          handleClick() {
            this.message = 'Click worked!'
          }
        }
      })
    </script>
  </body>
</html>

回到瀏覽器中點擊按鈕,可以看到文字從Hello Mpvue!變成了Click worked!

五、條件

下面我們略微修改需求,我們希望點擊按鈕時,文字隱藏,如果文字已經處於隱藏狀態,則進行顯示,要實現這一點,我們需要藉助v-if或v-show指令,先改造DOM:

<div id="root">
  <span v-if="visible">{{message}}</span>
  <button @click="handleClick">點擊隱藏文字</button>
</div>

上述代碼表示,當visible變量爲true時,顯示span標籤,反之則隱藏,下面我們再定義visible變量,並且修改事件:

<!DOCTYPE html>
<html>
  <head>
    <title>vue測試</title>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  </head>
  <body>
    <div id="root">
      <span v-if="visible">{{message}}</span>
      <button @click="handleClick">點擊隱藏文字</button>
    </div>
    <script>
      new Vue({
        el: '#root',
        data() {
          return {
            message: 'Hello Mpvue!',
            visible: true
          }
        },
        methods: {
          handleClick() {
            this.visible = !this.visible
          }
        }
      })
    </script>
  </body>
</html>

這裏我們具體做了兩件事:

  • 定義了visible變量,默認爲true,那麼span默認就是顯示狀態
  • 修改了handleClick,當點擊按鈕時對visible取反,也就是說顯示的時候隱藏,隱藏的時候顯示

這裏我們可以將v-if改爲v-show,他們兩者的區別在於v-if隱藏時會移除DOM,而v-show隱藏時僅僅改變DOM的display屬性爲none

六、循環

下面我們繼續增加需求的複雜度,我們希望點擊一次按鈕,就會再出現一行文字,這時字符串已經不能滿足我們的需求了,我們需要創建一個數組來存儲數據,然後通過v-for循環指令來進行顯示,還是先修改DOM:

<div id="root">
  <div v-for="item in data" :key="item">{{message}} - {{item}}</div>
  <button @click="handleClick">點擊添加一行</button>
</div>

v-for使用時需要有兩個注意點:

  • data必須是一個數組或者對象,即可遍歷的元素
  • 使用v-for的DOM需要指定key屬性,並且綁定到一個唯一值

接下來的工作是定義data變量,修改handleClick方法:

<!DOCTYPE html>
<html>
  <head>
    <title>vue測試</title>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  </head>
  <body>
    <div id="root">
      <div v-for="item in data" :key="item">{{message}} - {{item}}</div>
      <button @click="handleClick">點擊添加一行</button>
    </div>
    <script>
      new Vue({
        el: '#root',
        data() {
          return {
            message: 'Hello Mpvue!',
            data: [],
            index: 1,
          }
        },
        methods: {
          handleClick() {
            this.data.push(this.index++)
          }
        }
      })
    </script>
  </body>
</html>

初始狀態下,我們可以看到界面上只有一個按鈕,當點擊按鈕時會添加一行,再次點擊會再增加一行,這是因爲每次點擊時我們都會往data中添加一個元素index,然後將index的值加1,這樣每點擊第一次data中就多一個元素,從而實現了列表展示

七、雙向綁定

下面我們將展示Vue的雙向綁定機制,我們先在界面中添加一個input輸入框,並使用v-model綁定一個變量:

<div id="root">
  <input type="text" v-model="data">
  <div>{{data}}</div>
</div>

完整源碼如下:

<!DOCTYPE html>
<html>
  <head>
    <title>vue測試</title>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  </head>
  <body>
    <div id="root">
      <input type="text" v-model="data">
      <div>{{data}}</div>
    </div>
    <script>
      new Vue({
        el: '#root',
        data() {
          return {
            data: null,
          }
        }
      })
    </script>
  </body>
</html>

在瀏覽器中打開文件檢查效果:我們向input輸入框中輸入一些文本,發現下方的div中的內容會隨着改變,這說明Vue幫我們做了以下工作:

  • 監聽input的輸入變化
  • 將input的輸入變化寫入data變量

八、組件化

數據驅動和組件化是Vue最重要的兩個概念,上面的概念都在演示如何通過數據的方式驅動DOM的變化,下面我們將演示如何通過組件化的方式簡化開發,提高複用,我們先創建一個Message組件:

Vue.component('Message', {
  template: '<div>{{data}}</div>',
  props: {
    data: String
  }
})

創建組件需要通過Vue.component這個靜態方法來實現,第一個參數是組件的名稱,第二個參數是組件的參數:

  • template: 表示組件對應的DOM結構
  • props: 父組件傳入的參數名稱和值類型
    完整源碼如下:
<!DOCTYPE html>
<html>
  <head>
    <title>vue測試</title>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  </head>
  <body>
    <div id="root">
      <Message :data="message"></Message>
    </div>
    <script>
      Vue.component('Message', {
        template: '<div>{{data}}</div>',
        props: {
          data: String
        }
      })
      new Vue({
        el: '#root',
        data() {
          return {
            message: 'Hello Mpvue!'
          }
        }
      })
    </script>
  </body>
</html>

這段代碼雖然很短,但是邏輯還是比較複雜的,下面具體給大家解析執行過程:

  1. 定義組件Message,並且指定了組件的template和props
  2. 實例化Vue對象,初始化了message
  3. DOM中使用了Message組件,此時會將該組件替換爲template中的內容,並接收父組件傳入的data參數,這裏data參數的值爲message
  4. 完成對DOM的渲染

組件是可以嵌套的,也就是說組件中可以繼續嵌套組件,從而實現更高層次的複用!

九、腳手架的使用

安裝cnpm 官網:http://npm.taobao.org/

npm install -g cnpm --registry=https://registry.npm.taobao.org

安裝vue Vue-CLI官網:https://cli.vuejs.org/zh/

cnpm install -g @vue/cli

項目初始化

vue create hello-world

運行項目

cd hello-world
npm run serve

代碼結構

  • index.html:應用的入口文件
  • main.js:主js文件,初次渲染時執行
  • App.vue:根組件,在main.js中加載

十、小結

至此,Vue的基礎部分就給大家講解完了,如果大家還有什麼不清楚的地方可以到問答區與我互動哦

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章