Vue2.5筆記:Vue中的模版

来源:https://www.cnblogs.com/beevesnoodles/archive/2018/09/29/9722040.html
-Advertisement-
Play Games

我們在上一篇說到如何把 Vue 實例中的數據顯示到視圖中,就會需要用到我們的模版,我們只是簡單的使用了一些,模版其實還有很多其他的特性。今天我們就來看看模版的其他特性。 模版語法 Vue 中的模版是基於 HTML 的模版語法,所有的 Vue 模版都是合法的 HTML ,所以能被遵循規範的瀏覽器和 H ...


我們在上一篇說到如何把 Vue 實例中的數據顯示到視圖中,就會需要用到我們的模版,我們只是簡單的使用了一些,模版其實還有很多其他的特性。今天我們就來看看模版的其他特性。

模版語法

Vue 中的模版是基於 HTML 的模版語法,所有的 Vue 模版都是合法的 HTML ,所以能被遵循規範的瀏覽器和 HTML 解析器解析。這也非常符合 Vue 的易用的特點減少開發者的學習成本。

在底層實現上,Vue 將模版編譯成虛擬 DOM 渲染函數,結合響應式系統,Vue 能夠智能地計算出最少需要重新渲染多少組件,並把 DOM 操作次數減到最少。

但是如果你是 React 的開發者或者你熟悉虛擬 DOM 並且偏愛原生 Javascript,你完全可以不使用模版,而是直接使用渲染函數(render)或者使用 JSX 語法。

<div id="root">
    <h1>超帥的 {{name}}</h1>
</div>
<script>
    var vm = new Vue({
        el: '#root',
        data: {
            name: 'Modeng'
        }
    });
</script>

可以看到我們想要的效果顯示出來了,在這裡我們用到了模版最常見的數據綁定形式 “Mustache”語法 (雙大括弧) 語法,Mustache 標簽將會被數據中相對應的屬性替換,並且綁定的對象的屬性發生了改變,差值處的內容也會響應的改變。

開心一刻:Mustache 的中文意思是鬍子,但是我怎麼看 {{ }} 這個也不像鬍子啊,不知道老外怎麼起的這個名字。

有人可能會想到 Mustache 語法是不是也可以綁定 HTML 元素的屬性呢?

<h1 id="{{id}}"></h1>

其實這裡是不能這麼做的,Mustache 語法不能用來綁定 HTML 元素的屬性,那如果我們需要綁定元素的屬性 Vue 給我們提供了一個指令方法 v-bind利用這個我們可以進行元素屬性的綁定。

上面說到只要修改我們綁定的數據差值綁定的內容也會跟著替換,不過 Vue 中給我們提供了一個指令可以改變這一特性,我們可以通過使用 v-once 指令當數據改變時我們的內容也不會被替換。

表達式

模版中不僅僅可以進行簡單的數據綁定操作,我們還可以在模版中進行簡單的 Javascript 表達式。

<div id="root">
    <h1>超帥的 {{name}} 僅僅只有 {{age + 1}} 歲</h1>
</div>
<script>
    var vm = new Vue({
        el: '#root',
        data: {
            name: 'Modeng',
            age: 14
        }
    });
</script>

這裡支持+、-、*、/四個運算方法;除了運算方法之外,我們還可以使用 三元表達式 我們來看看一個例子

<div id="root">
    <h1>超帥的 {{name}} {{ realAge > 18 ? '不是' : '是' }} 未成年 </h1>

    <h1>超帥的 {{name}} {{ fakeAge > 18 ? '不是' : '是' }} 未成年 </h1>
</div>
<script>
    var vm = new Vue({
        el: '#root',
        data: {
            name: 'Modeng',
            realAge: 14,
            fakeAge: 20
        }
    });
</script>

既然我們用到了三元表達式 我們肯定會想到 if 語句,但是 Vue 只提供我們在模版中使用比較簡單的表達式(單個表達式),如果你的邏輯比較複雜,你不應該在模版中進行,而且應該在我們的實例的方法內進行。

下麵我們繼續看一個例子,我們如何利用它進行字元的反轉效果。

<div id="root">
    <h1>{{ name }} </h1>
    <h1>{{ name.split("").reverse().join("") }} </h1>
</div>
<script>
    var vm = new Vue({
        el: '#root',
        data: {
            name: 'Modeng'
        }
    });
</script>

我們可以看到 Mustache 語法非常的強大,上面的表達式我們只是使用了一個方面,我們還可以進行很多方面的應用。

Vue 中除了使用 Mustache 語法( {{ }} )將數據插入到模版中,我們還可以使用兩個指令 v-textv-html 進行數據到插入。

我們在使用模版的時候不僅僅只有數據的插入有時候我們也會根據一定的條件進行模版渲染,這時候我們就可以用 v-ifv-show,不僅如此我們還會經常進行列表和模版的迴圈我們會用到 v-for 指令。這些在後續的章節中我們會一一說到。

模版的渲染

在文章的一開始我們已經提到,Vue 的模版是基於 HTML 的,我們也可以使用虛擬 DOM 和 JSX 語法。

從上面的圖中我們看到 Vue 的整個模版的渲染過程,首先我們的模版編譯為AST(抽象語法樹),再由 AST 生成渲染函數,由渲染函數結合數據生成 Virtual DOM 樹,之後對Virtual DOM 進行 diffpath之後生成新的 UI

總結

本文主要進行來模版語法的介紹,我們不僅僅可以使用它將數據插入在模版中,還可以進行簡單的表達式的計算。我們也簡單的敘述了模版編譯的整個流程。當然了模版渲染的過程中還有很多的細節我們沒有說明,但是一點也不影響我們對於項目的開發與使用 Vue 如果你對整個渲染的細節非常感興趣也可以自信查閱資料進行瞭解。

本文原創文章發佈於微信公眾號:Modeng。關註並回覆 「前端書籍」百本經典技術書籍免費領取,你懂的!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ionic 是一個 HTML5 應用程式開發框架。 可以使用 HTML、CSS 和 Javascript 構建接近原生體驗的移動應用程式。具有速度快,界面現代化、美觀等特點。下麵一起看一下如何使用 安裝 確保已經安裝node 1. 下載Ionic and Cordova CLI. $ npm ins ...
  • What is Promise? Promise是一個構造函數,接受一個參數(Function),並且該參數接受兩個參數resolve和reject(分別表示非同步操作執行成功後的回調函數、執行失敗後的回調函數) 運行代碼,2秒後輸出“執行完成”。註意,這裡只是new了一個對象,並沒有調用它,所以我們 ...
  • 騰訊防水牆(滑動驗證碼)的簡單使用 https://007.qq.com ...
  • 騰訊地圖點擊地圖創建錨點(且只創建一個)同事創建錨點提示。 qq.maps.event.addListener(marker, 'click', function() { 44 info.open(); 45 info.setContent('單擊標記'); 47... ...
  • 今天分享一下快速使用jQuery+zepto.js的技巧,需要的記得收藏 1.jQuery的引入:本地下載jQuery(後面簡稱jq)的源文件,開發版本使用非min版,線上使用min版,zepto.js類似,同樣的一些基於jq的插件也是如此用法,如果使用requreJs也就是模塊化載入註意插件的依賴 ...
  • 叨叨一會CommonJS Common這個英文單詞的意思,相信大家都認識,我記得有一個片語common knowledge是常識的意思,那麼CommonJS是不是也是類似於常識性的,大家都理解的意思呢?很明顯不是,這個常識一點都不常識。我最初認為commonJS是一個開源的JS庫,就是那種非常方便用 ...
  • webpack的打包依賴於它的一個重要配置文件webpack.config.js,在這個配置文件中就可以指定所有在源代碼編譯過程中的工作了,就一個配置就可以與冗長的Gruntfile或者Gulpfile說再見了。 一個完整的工程項目中的webpack的配置遠遠沒有這麼簡單,隨著工程的構建要求的增加, ...
  • 最近一個月,恍若隔世,天天加班,昨晚終於發版了,今天才喘一口氣。有時候,即便你工作效率再怎麼高,擼碼再怎麼快也無可避免的會加班。不信的話,可以先給你定一個交付時間,然後不斷的給你加需求,就讓你一個人做,偶爾再給你來幾下變更,看你怎麼死?本來做項目,需求、資源、時間就是一個鐵三角,一旦你強行要打破這個 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...