<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          【Vue.js 入門到實(shí)戰(zhàn)教程】01-Vue.js 數(shù)據(jù)綁定的基本實(shí)現(xiàn)和代碼分析

          共 2489字,需瀏覽 5分鐘

           ·

          2020-11-19 03:42

          來源 |?https://xueyuanjun.com/post/21912


          本系列教程涵蓋 Vue 基礎(chǔ)語(yǔ)法、組件開發(fā)、代碼測(cè)試、以及如何基于 Vue + 后端 API 接口構(gòu)建單頁(yè)面應(yīng)用,希望通過這個(gè)系列的學(xué)習(xí),可以幫助你快速上手 Vue.js 開發(fā)。

          從 MVVM 聊起

          Vue.js 是一個(gè)簡(jiǎn)單、小巧的漸進(jìn)式 JavaScript 框架,提供了現(xiàn)代 Web 開發(fā)中常用的高級(jí)功能:

          • 解耦視圖和數(shù)據(jù)

          • 可復(fù)用的組件

          • 前端路由

          • 狀態(tài)管理

          • 虛擬 DOM

          接下來,學(xué)院君將圍繞這些功能來給大家介紹 Vue.js 的基本語(yǔ)法和使用。

          Vue.js 是一個(gè)典型的 MVVM(Model-View-ViewModel)模型框架,MVVM 由 MVC 演化而來(相關(guān)細(xì)節(jié)可參考 MVC,MVP 和 MVVM 的圖示):View 的變動(dòng),會(huì)自動(dòng)更新到 ViewModel,反之亦然,這種機(jī)制叫做雙向綁定。

          這也是 Vue.js 相較于傳統(tǒng) JavaScript DOM 編程的優(yōu)勢(shì),通過這種數(shù)據(jù)雙向綁定,我們可以輕松實(shí)現(xiàn)視圖與數(shù)據(jù)的解耦:

          接下來,我們就從數(shù)據(jù)綁定開始,探索 Vue.js 框架的使用。

          注:本系列教程依然基于 Vue 2.x,使用的代碼編輯器是 IntelliJ IDEA,你可以按照自己的喜好選擇代碼編輯器,比如 WebStorm、PhpStorm、VS Code、Sublime Text 等。IntelliJ IDEA 和 PhpStorm 都集成了 WebStorm 的所有功能,并且 IntelliJ IDEA 還可以通過插件集成 PhpStorm、GoLand、PyCharm 的所有功能,所以 IntelliJ IDEA 是 JetBrains 全家桶里面的全能王,可以同時(shí)作為 Java、JavaScript、PHP、Go、Python 的代碼編輯器。

          數(shù)據(jù)綁定的基本實(shí)現(xiàn)

          我們新建一個(gè) vue_learning 項(xiàng)目,在該項(xiàng)目下新建一個(gè) basic 目錄用于存放 Vue 基本語(yǔ)法的演示代碼。

          在 basic 目錄下新建一個(gè)名為 hello 的 HTML 5 文件:

          傳統(tǒng) DOM 編程

          我們先通過傳統(tǒng) DOM 編程的方式編寫一段設(shè)置輸入框文本的代碼如下:

          <html lang="en"><head>    <meta charset="UTF-8">    <title>數(shù)據(jù)綁定演示title>head><body><div id="app">    <input type="text" id="name" placeholder="你的名字">div><script>    let data = {        name: "學(xué)院君"    }    document.querySelector('#name').value = data.name;script>body>html>

          點(diǎn)擊右上角的瀏覽器圖標(biāo)預(yù)覽:

          ?可以看到通過 JavaScript 代碼將模型數(shù)據(jù)寫入到了視圖層的 INPUT 輸入框。

          如果我們想要修改輸入框中的文本,并且實(shí)現(xiàn)輸入框中的文本數(shù)據(jù)與模型數(shù)據(jù)(data.name)的同步,需要再編寫一段異步事件監(jiān)聽代碼,非常繁瑣,而如果使用 Vue.js 的數(shù)據(jù)綁定機(jī)制,則可以輕松實(shí)現(xiàn)這種數(shù)據(jù)同步。

          引入 Vue.js 框架

          下面,我們就引入 Vue.js 來實(shí)現(xiàn)這種數(shù)據(jù)同步,修改上述代碼實(shí)現(xiàn)如下:

          <html lang="en"><head>    <meta charset="UTF-8">    <title>數(shù)據(jù)綁定演示title>    <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js">script>head><body><div id="app">    <input type="text" v-model="name" placeholder="你的名字">    <p>你好呀,{{ name }}p>div><script>    let data = {        name: "學(xué)院君"    }    new Vue({        el: '#app',        data: data    })script>body>html>

          為了驗(yàn)證數(shù)據(jù)是雙向同步的,我們?cè)谳斎肟蛳旅嫣砑右欢未a,用于獲取模型數(shù)據(jù)(data.name)并顯示出來。

          再次點(diǎn)擊代碼編輯區(qū)域右上角的瀏覽器圖片預(yù)覽,可以看到相同的結(jié)果:

          我們修改輸入框中的文本,可以看到下面歡迎文本中的用戶名隨之變化:

          可以看到,我們不用編寫任何額外的事件監(jiān)聽和處理代碼,就可以通過 Vue.js 框架自身提供的數(shù)據(jù)綁定機(jī)制輕松實(shí)現(xiàn)視圖層和模型層數(shù)據(jù)的雙向同步。

          源碼分析

          下面,我們來簡(jiǎn)單分析下這段代碼。

          和其他 JavaScript 框架一樣,要在 HTML 頁(yè)面中使用 Vue.js,首先需要引入對(duì)應(yīng)的框架代碼,這里我們通過官方提供的 CDN 資源引入最新版的 Vue.js 框架:

          接下來,要使用 Vue.js 進(jìn)行 MVVM 編程,還要選擇特定的 div 容器,并將其轉(zhuǎn)化為 Vue 實(shí)例,這里我們選擇的是 div#app 這個(gè)元素,然后通過外部定義的 data 變量作為模型數(shù)據(jù)對(duì)這個(gè) Vue 實(shí)例進(jìn)行初始化:

          new Vue({    el: '#app',    data: data})

          你也可以直接在 Vue 對(duì)象實(shí)例上定義這個(gè)模型數(shù)據(jù):

          new Vue({    el: '#app',    data: {        name: "學(xué)院君"    }})

          這樣一來,我們就可以在 Vue 實(shí)例對(duì)應(yīng)的視圖組件中綁定模型數(shù)據(jù)進(jìn)行渲染了:

          <div id="app">    <input type="text" v-model="name" placeholder="你的名字">    <p>你好呀,{{ name }}p>div>

          在這段視圖代碼中,我們?cè)?input 輸入框上使用 v-model 屬性聲明數(shù)據(jù)綁定,屬性值對(duì)應(yīng)特定的模型數(shù)據(jù)名(data. 前綴省略),這樣一來,我們對(duì)模型數(shù)據(jù)的修改就可以同步到輸入框,同時(shí)在輸入框中的修改也可以同步到模型數(shù)據(jù),從而實(shí)現(xiàn)了雙線綁定。

          如果不是通過屬性進(jìn)行綁定,就像下面這段代碼:

          <p>你好呀,{{ name }}p>

          需要通過?{{}}?對(duì)模型數(shù)據(jù)進(jìn)行包裹,該定界符可以解析 Vue 實(shí)例中的模型數(shù)據(jù)(同樣不能包含 data. 前綴)。

          需要注意的是,只有被轉(zhuǎn)化為 Vue 實(shí)例的 HTML 容器中才能進(jìn)行模型數(shù)據(jù)的綁定,如我們?cè)噲D在該容器之外進(jìn)行這種綁定,則不會(huì)生效:

          <div id="app">    <input type="text" v-model="name" placeholder="你的名字">    <p>你好呀,{{ name }}p>div><input type="text" v-model="name" placeholder="你的名字"><p>你好呀,{{ name }}p>

          最后,我們從 MVVM 的視角來看待這段代碼,Model、View、ViewModel 分別對(duì)應(yīng)如下代碼區(qū)塊:

          本文完~


          瀏覽 42
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲熟女 综合 | 大香蕉婷婷丁香五月 | 99re最新视频在线 | 日韩高清一区在线 | 激情丁香婷婷 |