Vue渲染數據理解以及Vue指令

来源:https://www.cnblogs.com/lihuijuan/archive/2019/01/23/10279589.html
-Advertisement-
Play Games

一、Vue渲染數據原理 原生JS改變頁面數據,必須要獲取頁面節點,也即是進行DOM操作,jQuery之類的框架只是簡化DOM操作的寫法,實質並沒有改變操作頁面數據的底層原理,DOM操作影響性能(導致瀏覽器的重繪和迴流),Vue是一個mvvm框架(庫),大幅度減少了DOM操作,操作數據如下圖: Vie ...


一、Vue渲染數據原理

原生JS改變頁面數據,必須要獲取頁面節點,也即是進行DOM操作,jQuery之類的框架只是簡化DOM操作的寫法,實質並沒有改變操作頁面數據的底層原理,DOM操作影響性能(導致瀏覽器的重繪和迴流),Vue是一個mvvm框架(庫),大幅度減少了DOM操作,操作數據如下圖:

View也就是頁面,Model是指數據,VM是Vue實例,頁面所需的數據或者方法都定義在vm中

頁面通過Vue實例(vm)來獲取數據,數據改變是通過改變Vue實例中的數據使展示在頁面上的數據發生改變,並不是直接改變頁面上的數據。

註:Vue實例包括根實例(new Vue({}))和組件實例

二、指令:擴展html標簽功能

1、v-model:表單控制項元素上創建雙向數據綁定。它會根據控制項類型自動選取正確的方法來更新元素

v-model 並不關心表單控制項初始化所生成的值。因為它會選擇 Vue 實例數據來作為具體的值。)

對於不同的控制項,v-model會自動綁定到不同的值上

(1)<input type="text" v-model="value" /> v-model綁定的是其 value值;

(2)<input type="checkbox"  v-model="checked" value="test">單個勾選框 v-model綁定的是checked的狀態,即是否勾選上,其值為布爾值;

(3)<input type="checkbox"  value="Jack" v-model="checkedNames">

<input type="checkbox"  value="John" v-model="checkedNames">

<input type="checkbox"  value="John" v-model="checkedNames">多個勾選框,v-model綁定的是勾選上的選項的value值所組成的一個數組;

(4)<input type="radio" value="One" v-model="picked">

<input type="radio"  value="Two" v-model="picked">單選按鈕,v-model綁定是選中的那一項的value值
(5)<select v-model="selected">

<option value="one">A</option>
<option value="two">B</option>
<option value="three">C</option>
</select>  單選列表,若 option中規定了value屬性,v-model綁定的是選中的那一項的value值,若option中沒有規定value屬性,v-model綁定的是選中的那一項的內容

(6)<select v-model="selected" multiple>

<option value="one">A</option>
<option>B</option>
<option value="three">C</option>
</select>多選列表,綁定到數組,與單選列表類似,規定了value值,數組就由所選項的value組成,未規定value值,數組就由所選項的內容組成

(7)<textarea v-model="textarea"></textarea> v-model綁定的是其 value值;

2、v-for列表渲染

<ul>
  <li v-for="item in items">
    {{ item.message }}
  </li>
</ul>

<div v-for="(item, index) in items"></div> <div v-for="(val, key) in object"></div> <div v-for="(val, key, index) in object"></div>

3、v-on:綁定事件(縮寫@)

  <div id="app">
      <div v-on:click="testclick">click</div>
    </div>
    <script>
        new Vue({
            el: "#app",
            methods:{
                testclick: function(){
                    alert(111)
                }
            }
        })
    </script>

註:綁定事件直接在dom上完成,所有的 Vue.js 事件處理方法和表達式都嚴格綁定在當前視圖的 ViewModel 上

常用的一些事件有:click、dbclick、keydown、keyup、mouseover、 mouseout、mousedown........

4、v-bind:綁定屬性(縮寫:)

<!-- 綁定一個屬性 -->
<img v-bind:src="imageSrc">
<!-- 縮寫 -->
<img :src="imageSrc">
<!--在綁定 class 或 style 特性時,支持其它類型的值,如數組或對象-->
<!-- class 綁定 -->
<div :class="{ red: isRed }"></div> <!--這裡的red是類名,isRed是數據名,值為ture或false-->
<div :class="[classA, classB]"></div> <!--這裡的classA/classB都是數據名,他們的值是類名,自動渲染到div上-->
<div :class="[classA, { classB: isB, classC: isC }]"> <!--同上,classA,isB,isC是數據名,classA的數據值,classB,classC是類名,isB,isC的數據值是true/false-->
<!-- style 綁定 -->
<div :style="{ fontSize: size + 'px' }"></div>
<div :style="[styleObjectA, styleObjectB]"></div> <!--styleObjectA是數據名,其結構形如:styleObjectA:{backgroundColor:'red'}複合樣式採用駝峰命名-->
<!-- 沒有參數(屬性名)時,可以綁定到一個包含鍵值對的對象 -->
<div v-bind="{ id: someProp, 'other-attr': otherProp }"></div>
<!-- 通過 prop 修飾符綁定 DOM 屬性 -->
<div v-bind:text-content.prop="text"></div>
<!-- 在綁定 prop 時,prop 必須在子組件中聲明。可以用修飾符指定不同的綁定類型。 “prop” 必須在 my-component 中聲明。 -->
<my-component :prop="someThing"></my-component>
<!-- XLink -->
<svg><a :xlink:special="foo"></a></svg>

關於props的綁定:用於父組件向子組件傳值

在父組件中,使用子組件時,<Child v-bind:data="data"/>,通過v-bind把子組件需要的數據傳遞給子組件;

在子組件中通過props來接受傳過來的數據,常用寫法:props:['data',......]/props:{data:dataType,.....} 

註意::value="1"和value="1"的區別:

:value="1"會按照Js語法來解析 ""中的值,在這裡是整數;value="1"輸出就是一個字元串

再比如 ::value="[1,2,3]"中[1,2,3]就是一個數組;value="[1,2,3]"中的[1,2,3]就是一個字元串

5、v-show根據表達式的真假切換元素的display的屬性值

表達式為真,display:block;表達式為假,display:none

6、v-once數據只綁定一次,只渲染元素和組件一次。隨後的重新渲染,元素/組件及其所有的子節點將被視為靜態內容並跳過。

<!-- 單個元素 -->
<span v-once>This will never change: {{msg}}</span>
<!-- 有子元素 -->
<div v-once>
  <h1>comment</h1>
  <p>{{msg}}</p>
</div>
<!-- 組件 -->
<my-component v-once :comment="msg"></my-component>
<!-- v-for 指令-->
<ul>
  <li v-for="i in list" v-once>{{i}}</li>
</ul>

7、v-html 更新元素的 innerHTML 。註意:內容按普通 HTML 插入 - 不會作為 Vue 模板進行編譯

<!--rawHtml將會按照HTML的格式 插入到span中-->
<span v-html="rawHtml"></span>

8、v-text更新元素的 textContent

<span v-text="msg"></span>
<!-- 和下麵的一樣 -->
<span>{{msg}}</span>

 9、v-if、v-else根據表達式的值的真假條件渲染元素

<div v-if="Math.random() > 0.5">
  Sorry
</div>
<div v-else>
  Not sorry
</div>

 


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

-Advertisement-
Play Games
更多相關文章
  • 在有些時候我們需要他人來連接我們的資料庫,這個時候我們需要用我們本地的IP地址來連接,在連接的過程中可能會出現找不到網路路徑提示40,53的錯誤 解決方案: 1.打開配置管理器 2.點開網路配置,點擊協議,查找TCP/IP 協議 點擊右鍵 打開屬性 3.出現對話框之後,點擊IP地址,修改 "IP3的 ...
  • 資料庫: 結構化查詢語言(Structured Query Language)簡稱SQL; 資料庫管理系統(Database Management System)簡稱DBMS; 資料庫管理員(Database Administration)簡稱DBA,功能是確保DBMS的正常高效運行; 資料庫分體驗 ...
  • INSERT INTO SELECT語句 語句形式為:Insert into Table2(field1,field2,...) select value1,value2,... from Table1 或者:Insert into Table2 select * from Table1 註意:(1 ...
  • 結果: ...
  • 成功安裝Oracle 11g資料庫後,你會發現自己電腦運行速度會變慢,配置較低的電腦甚至出現非常卡的狀況,通過禁止非必須開啟的Oracle服務可以提升電腦的運行速度。那麼,具體該怎麼做呢? 按照win7 64位環境下Oracle 11g R2安裝詳解中的方法成功安裝Oracle 11g後,共有7個服 ...
  • 一、簡單的音頻播放 【項目準備】 ①一個視頻文件,視頻文件的位置 >在res下新建文件夾row >將視頻放入row文件夾中 ②一般音頻播放是不需要一直停留在界面的,所以音頻播放應該放在service中,即使界面被回收,也一直在播放。 【項目結構】 【界面代碼】 【MainActivity.class ...
  • JQ :even選擇器代表著選擇偶數行 JQ :odd 代表選擇奇數行 ...
  • 項目組織結構 ajax數據請求的封裝和api介面的模塊化管理 第三方庫按需載入 利用less的深度選擇器優雅覆蓋當前頁面UI庫組件的樣式 webpack實時打包進度 vue組件中選項的順序 路由的懶載入 路由模塊拆分化管理 項目組織結構 清晰的項目結構能讓別人開發進來更容易理解,當然,每個人都有一定 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...