Vue初步認識與Vue基礎指令
小編:管理員 64閱讀 2022.08.19
- 傳統開發的缺點: 1.DOM操作頻繁,代碼繁雜 2.DOM操作與邏輯代碼混合,可維護性差 3.不同功能區域書寫在一起,可維護性低 4.模塊之間的依賴關系復雜
Vue.js應運而生
官網:
Vue.js核心特性數據驅動視圖https://cn.vuejs.org
- 數據變化會自動更新到對應元素中,無需手動操作 DOM,這種行為稱作單向數據綁定。
單向數據綁定
-
對于輸入框等可輸入元素,可設置雙向數據綁定
- 雙向數據綁定是在數據綁定基礎上,可自動將元素輸入內容更新給數據, 實現數據與元素內容的雙向綁定。
- Vue.js 的數據驅動視圖是基于 MVVM 模型實現的。
-
MVVM (Model – View – ViewModel )是一種軟件開發思想
- Model 層,代表數據
- View 層,代表視圖模板
- ViewModel 層,代表業務邏輯處理代碼
- 基于MVVM 模型實現的數據驅動視圖解放了DOM操作
- View 與 Model 處理分離,降低代碼耦合度
- 但雙向綁定時的 Bug 調試難度增大 (有可能出現在視圖或者數據層)
- 大型項目的 View 與 Model 過多,維護成本高
- 組件化開發,允許我們將網頁功能封裝為自定義HTML標簽,復用時書寫自定義標簽名即可
- 組件不僅可以封裝結構,還可以封裝樣式和邏輯代碼,大大提高了開發效率和可維護性
下載引用:
- 開發版本
https://cn.vuejs.org/js/vue.js
- 生產版本
cdn引入https://cn.vuejs.org/js/vue.min.js
script標簽內部引入
- 最新穩定版:
https://cdn.jsdelivr.net/npm/vue
- 指定版本:
npm安裝https://cdn.jsdelivr.net/npm/vue@2.6.12/dist/vue.js
- 最新穩定版
npm install vue復制
- 指定版本
npm install vue@2.6.12復制Vue.js基礎語法Vue實例
- Vue 實例是通過 Vue 函數創建的對象,是使用 Vue 功能的基礎。
var vm = new Vue({ //選項對象 });復制el選項
- 用于選取一個 DOM 元素作為 Vue 實例的掛載目標
- 只有掛載元素內部才會被 Vue 進行處理,外部為普通 HTML 元素
- 代表 MVVM 中的 View 層(視圖)
- 可以為 CSS 選擇器格式的字符串或HTMLElement 實例,但不能為html 或 body
只能有一個DOM元素
- 掛載完畢后,可以通過vm.$el訪問
- 未設置 el 的 vue 實例,也可以通過 vm.$mount() 進行掛載,參數形式與 el 規則相同。
也支持變量的方式
插值表達式- 掛載元素可以使用 Vue.js 的模板語法,模板中可以通過插值表達式為元素進行動態內容設置,寫法為 {{ }}
-
注意點:
- 插值表達式只能書寫在標簽內容區域,不可以和其他內容混合在一起 比如說不能通過插值表達式進行元素屬性的混合設置
- 內部只能書寫JS表達式,不能書寫JS語句
違反兩個注意點就會報出模板編輯錯誤的提示
data選項- 用于存儲Vue實例需要使用的數據,值為對象類型
- data 中的數據可以通過 vm.$data.數據或 vm.數據 訪問。
-
特點:
- data中的數據是直接可以在視圖中通過插值表達式訪問
- data的數據為響應式數據,發生改變時,視圖會自動更新
-
特殊情況:
- data中存在數組時,索引操作和length操作無法自動更新視圖,可以通過Vue.set()方法替代操作 數組的方法是可以生效的,并且實時更新視圖,比如pop(),push()
Vue.set()方法有三個參數,分別是數組,索引,新內容,用這個辦法可以代替操作,以實時更新視圖
- 用于存儲需要在Vue實例中使用的函數
- methods的方法可以通過vm.方法名 訪問
- 方法中的this為vm實例,可以便捷的訪問vm數據等功能
指令的本質就是HTML自定義屬性 Vue.js的指令就是以v-開頭的自定義屬性
內容處理v-once指令- 使元素內部的插值表達式只生效一次(不隨數據變化更新)
- 元素內容整體替換為指定純文本數據
<body> <div id="app"> <p v-text="100">這是 p 標簽的原始內容</p> <p v-text="content">這是 p 標簽的原始內容</p> <p v-text="content2"></p> </div> <script src="lib/vue.js"></script> <script> var vm = new Vue({ el: '#app', data: { content: '內容文本', content2: '<span>span的內容</span>' } }); </script> </body>復制
顯示結果
v-html指令- 將元素內容整體替換為指定的HTML文本
與v-text的區別就在于可以替換為HTML文本,運行HTML代碼
屬性綁定v-bind- v-bind 指令用于動態綁定 HTML 屬性。
- v-bind簡寫方式:
- v-bind也可以使用表達式,與插值表達式類似
插件表達式和v-bind都不能插入語句
這一類就不行
- 還可以一次綁定多個屬性,通過綁定對象的方式實現
注意不用冒號,而是等號了
Class綁定- class是HTML屬性,可以通過v-bind綁定,并且可以和class屬性共存
錯誤寫法
有兩個類名,一個x一個a,但是a是固定的,cls會動態變化
-
對于 class 綁定, Vue.js 中還提供了特殊處理方式
- 對象綁定
例子
- 數組綁定
大括號內部才是動態表示區域
例子
Style綁定- style 是 HTML 屬性,可以通過 v-bind 進行綁定,并且可以與 style 屬性共存
- 當我們希望給元素綁定多個樣式對象時,可以設置為數組。
- 用于遍歷數據渲染結構,常用的數組與對象均可遍歷
index為數組下的索引值
index為對象下的索引值,key為數據的鍵值
- 除了遍歷數組和對象,還可以對值進行遍歷
運行結果
v-for注意點- 使用 v-for 的同時,應始終指定唯一的 key 屬性,可以提高渲染性能并避免問題。
<body> <div id="app"> <ul> <li v-for="(item, index) in itemList" :key="item.id"> 輸入框{{ item.value }}: <input type="text"> </li> </ul> </div> <script src="lib/vue.js"></script> <script> var vm = new Vue({ el: '#app', data: { arr: [1, 2, 3], itemList: [ { id: 1, value: 2 }, { id: 2, value:3 }, { id:3, value:3 } ] } }) </script> </body>復制
- 通過<template>標簽設置模板占位符?梢詫⒉糠衷鼗蛘邇热葑鳛檎w進行操作
template標簽并不是真正的標簽,生成的結構直接是內部的標簽 template并不是一個真實的元素,所以沒法設置key屬性
<div id="app"> <template v-for="item in obj"> <span>{{ item }}</span> <br> </template> </div>復制
結果
v-show 指令- 用于控制元素顯示與隱藏,適用于顯示隱藏頻繁切換的時候使用
v-show內部的數據也可以通過data設置達到控制的效果 也可以通過條件表達式來控制
<p v-show="false">標簽內容</p> <p v-show="22 > 11">標簽內容</p>復制
-
注意:
- <template>無法使用v-show指令(原因:template不是真正意義上的元素)
- v-show的本質就是元素內部的display屬性是否為true
- 用于根據條件,控制元素的創建與移除
<body> <div id="app"> <p v-if="bool">這是標簽內容</p> <p v-else-if="false">這是第二個p標簽</p> <p v-else-if="false">這是第三個p標簽</p> <p v-else>最后一個p標簽</p> </div> <script src="lib/vue.js"></script> <script> var vm = new Vue({ el: '#app', data: { bool: false } }); </script> </body>復制
v-if 與 v-show的區別就在于show是創建了元素,if是符合條件才創建 v-if 和v-else-if這種組合只要有一個滿足條件就會跳出,后面的不會再創建,跟JavaScript的if原理相同
-
注意事項
- 給使用v-if的同類型元素綁定不同的key
<body> <div id="app"> <div v-if="type==='username'" :key="'username'"> 用戶名輸入框:<input type="text"> </div> <div v-else :key="'email'"> 郵箱輸入框:<input type="text"> </div> </div> <script src="lib/vue.js"></script> <script> var vm = new Vue({ el: '#app', data: { bool: true, type: 'username' } }); </script> </body>復制
- 出于性能考慮,應該避免v-if和v-for應用于同一個標簽 更好的解決辦法:將v-if和v-for分開,比如將v-if放在父元素上
<body> <div id="app"> <ul v-if="true"> <li v-for="item in items">{{item}}</li> </ul> </div> <script src="lib/vue.js"></script> <script> var vm = new Vue({ el: '#app', data: { items: { content1: '內容1', content2: '內容2', content3: '內容3' } } }); </script> </body>復制
相關推薦
- Vue3(二)工程化開發方式做項目 工程化的開發方式這是開發中、大型項目的必備技能,網上資料也很多,這里只是一個簡單的綜合性的介紹。包括vue的全家桶、建立項目的幾種方式、UI庫的簡單使用等?梢院蜕弦黄腸nd方式做項目做一下對比。node.js,npm、cnpm、yarnnode.js執行 npm run serve ,…
- Hibernate Criterion 在查詢方法設計上能夠靈活的依據Criteria的特點來方便地進行查詢條件的組裝.Hibernate設計了CriteriaSpecification作為Criteria的父接口,以下提供了Criteria和DetachedCriteria.Criteria和DetachedCriteria的主要差別在于創建的形式不一樣,Criteria是在線的,所…