Vue - 入門

来源:https://www.cnblogs.com/xw-01/p/18267663
-Advertisement-
Play Games

零:前端目前形勢 前端的發展史 HTML(5)、CSS(3)、JavaScript(ES5、ES6):編寫一個個的頁面 -> 給後端(PHP、Python、Go、Java) -> 後端嵌入模板語法 -> 後端渲染完數據 -> 返回數據給前端 -> 在瀏覽器中查看 Ajax的出現 -> 後臺發送非同步請 ...


零:前端目前形勢

前端的發展史

  1. HTML(5)、CSS(3)、JavaScript(ES5、ES6):編寫一個個的頁面 -> 給後端(PHP、Python、Go、Java) -> 後端嵌入模板語法 -> 後端渲染完數據 -> 返回數據給前端 -> 在瀏覽器中查看

  2. Ajax的出現 -> 後臺發送非同步請求,Render+Ajax混合

  3. 單用Ajax(載入數據,DOM渲染頁面):前後端分離的雛形

  4. Angular框架的出現(1個JS框架):出現了“前端工程化”的概念(前端也是1個工程、1個項目)

  5. ReactVue框架:當下最火的2個前端框架(Vue:國人喜歡用,React:外國人喜歡用)

  6. 移動開發(Android+IOS) + Web(Web+微信小程式+支付寶小程式) + 桌面開發(Windows桌面):前端 -> 大前端

  7. 一套代碼在各個平臺運行(大前端):谷歌Flutter(Dart語言:和Java很像)可以運行在IOS、Android、PC端

  8. 在Vue框架的基礎性上 uni-app一套編碼 編到10個平臺

  9. 在不久的將來 ,前端框架可能會一統天下

詳細的發展史:
https://zhuanlan.zhihu.com/p/337276087?utm_source=wechat_session&utm_medium=social&utm_oi=41967790587904

一:Vue介紹 和 基本使用

1.Vue介紹

Vue (讀音 /vjuː/,類似於 view) 是一套用於構建用戶界面的漸進式框架

與其它大型框架不同的是,Vue 被設計為可以自底向上逐層應用

Vue 的核心庫只關註視圖層,不僅易於上手,還便於與第三方庫或既有項目整合

漸進式框架

可以一點一點地使用它,只用一部分,也可以整個工程都使用它

網站

2.Vue特點

易用

通過 HTML、CSS、JavaScript構建應用

靈活

不斷繁榮的生態系統,可以在一個庫和一套完整框架之間自如伸縮。

高效

  • 20kB min+gzip 運行大小
  • 超快虛擬 DOM
  • 最省心的優化

3.M-V-VM思想

① MVVM介紹

MVVM 是Model-View-ViewModel 的縮寫,它是一種基於前端開發的架構模式,是一種事件驅動編程方式

  • Model :vue對象的data屬性裡面的數據,這裡的數據要顯示到頁面中
  • View :vue中數據要顯示的HTML頁面,在vue中,也稱之為“視圖模板” (HTML+CSS)
  • ViewModel:vue中編寫代碼時的vm對象,它是vue.js的核心,負責連接 View 和 Model數據的中轉,保證視圖和數據的一致性,所以前面代碼中,data裡面的數據被顯示中p標簽中就是vm對象自動完成的(雙向數據綁定:JS中變數變了,HTML中數據也跟著改變)
    image

② MVVM的特性

  • 低耦合視圖(View)可以獨立於Model變化和修改,1個ViewModel可以綁定到不同的View上,當View變化的時候 Model可以不變,當Model變化的時候 View也可以不變
  • 可復用:可以把一些視圖邏輯放在1個ViewModel中,讓很多View重用這端視圖的邏輯(以此減少代碼冗餘)
  • 獨立開發開發人員可以專註於業務邏輯數據的開發(ViewModel),設計人員可以專註於頁面設計
  • 可測試:界面元素是比較難以測試的,而現在的測試可以針對ViewModel來編寫

③ MVVM的邏輯

image

4.組件化開發、單頁面開發

組件化開發

類似於DTL中的include每一個組件的內容都可以被替換和復用
image

單頁面開發

只需要1個頁面,結合組件化開發來替換頁面中的內容

頁面的切換隻是組件的替換,頁面還是只有1個index.html

5.版本

1.X:使用得較少

2.X:普遍使用

3.X:剛出沒多久,只有Beta版

6.引入方式

① CDN的方式引入

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

② 下載後導入

其實就是直接在瀏覽器中打開https://cdn.jsdelivr.net/npm/vue/dist/vue.js, 然後複製下來,創建一個js文件再粘貼進去

<script src="js/vue.js"></script>

7.補充

解釋型的語言是需要解釋器的

js就是一門解釋型語言,只不過js解釋器被集成到了瀏覽器中

所以,在瀏覽器的Console中輸入命令,就和在cmd中輸入python後,進入互動式環境一樣

nodejs:一門後端語言

把chrome的v8引擎(解釋器),安裝到操作系統之上

8.簡單使用

index.html

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>vue的簡單使用</title>
	<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.min.js"></script>
</head>
<body>
<div id="box">
	{ {name} }
</div>
</body>
<script>
	let vm = new Vue({
		el: '#box', // 在box這個div中可以寫 vue的語法
		data: {
			name: 'Hello World'
		}
	})
</script>
</html>

雙向數據綁定測試

vm._data.name='darker'    // 修改js中變數的值
$('#box').text('hahah')    // 修改HTML的div中的值

image

二:模板語法

1.插值語法

語法:{ { 變數、js語法、三目表達式 } }

index.html

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>插值</title>
	<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.min.js"></script>
</head>
<body>
<div id="box">
	<ul>
		<li>字元串:{ {name} }</li>
		<li>數值:{ {age} }</li>
		<li>數組:{ {list1} }</li>
		<li>對象:{ {obj1} }</li>
		<li>字元串:{ {link1} }</li>
		<li>運算:{ {10+20+30+40} }</li>
		<li>三目運算符:{ {10>20?'是':'否'} }</li>
	</ul>
</div>
</body>
<script>
	let vm = new Vue({
		el: '#box', // 在box這個div中可以寫 vue的語法
		data: {
			name: 'Darker', // 字元串
			age: 18, // 數值
			list1: [1,2,3,4],   // 數組
			obj1: {name: 'Darker', age: 19}, // 對象
			link1: '<a href="https://www.baidu.com">百度一下 你就知道</a>'
		}
	})
</script>
</html>

image

三:指令

1.文本指令

指令 釋義
v-html 讓HTML渲染成頁面
v-text 標簽內容顯示js變數對應的值
v-show 放1個布爾值:為真 標簽就顯示;為假 標簽就不顯示
v-if 放1個布爾值:為真 標簽就顯示;為假 標簽就不顯示

v-show 與 v-if 的區別:

  • v-show:標簽還在,只是不顯示了(display: none)
  • v-if:直接操作DOM,刪除/插入 標簽

v-html:讓HTML渲染成頁面

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>v-html</title>
	<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.min.js"></script>
</head>
<body>
<div id="box">
	<ul>
		<li v-html="link1"></li>
	</ul>
</div>
</body>
<script>
	let vm = new Vue({
		el: '#box', // 在box這個div中可以寫 vue的語法
		data: {
			link1: '<a href="https://www.baidu.com">百度一下 你就知道</a>'
		}
	})
</script>
</html>

image

v-text:標簽內容顯示js變數對應的值

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>v-text</title>
	<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.min.js"></script>
</head>
<body>
<div id="box">
	<ul>
		<li v-text="link1"></li>
	</ul>
</div>
</body>
<script>
	let vm = new Vue({
		el: '#box', // 在box這個div中可以寫 vue的語法
		data: {
			link1: '<a href="https://www.baidu.com">百度一下 你就知道</a>',
		}
	})
</script>
</html>

image

v-show:顯示/隱藏內容

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>v-show</title>
	<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.min.js"></script>
</head>
<body>
<div id="box">
	<h3>案例:控制項通過按鈕來控制顯示和小事</h3>
	<button @click="handleClick()">點我</button>
	<br>
	<div v-show="isShow">isShow</div>
</div>
</body>
<script>
	let vm = new Vue({
		el: '#box',
		data: {
			isShow: true,
		},
		methods: {
			handleClick(){
			  this.isShow = !this.isShow    // this指的是當前的vue對象
			},
		}
	})
</script>
</html>

image

v-if:顯示/刪除內容

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>v-if</title>
	<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.min.js"></script>
</head>
<body>
<div id="box">
	<h3>案例:控制項通過按鈕來控制顯示和消失</h3>
	<button @click="handleClick()">點我</button>
	<br>
	<div v-if="isCreated">isCreated</div>
</div>
</body>
<script>
	let vm = new Vue({
		el: '#box',
		data: {
			isCreated:true
		},
		methods: {
			handleClick(){
			  this.isCreated = !this.isCreated    // this指的是當前的vue對象
			},
		}
	})
</script>
</html>

image

2.事件指令

指令 釋義
v-on 觸發事件(不推薦)
@ 觸發事件(推薦)
@event 觸發event事件(可以是其他任意事件

v-on:click可以縮寫成@click

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>事件指令</title>
	<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.min.js"></script>
</head>
<body>
<div id="box">
	<button v-on:click="handleClick1">點我1</button>
	<!-- 下麵這個用的多 -->
	<button @click="handleClick2">點我2</button>
	<!-- 如果不傳參數,是沒有區別的 -->
	<button @click="handleClick3()">點我3-1(帶括弧)</button>
	<!-- 如果要傳參數 -->
	<button @click="handleClick3(1,22,333)">點我3-2(帶括弧+參數)</button>
	<!-- 傳入事件 -->
	<button @click="handleClick4($event)">點我4(帶事件參數)</button>
</div>
</body>
<script>
	let vm = new Vue({
		el: '#box',
		data: {
		},
		methods: {
			handleClick1() {
				console.log('點我1')
			},
			handleClick2() {
				console.log('點我2')
			},
			handleClick3(a,b,c) {
				console.log(a,b,c)
			},
			handleClick4(event) {
				console.log(event)
			},
		}
	})
</script>
</html>

image

3.屬性指令

指令 釋義
v-bind 直接寫js的變數或語法(不推薦)
: 直接寫js的變數或語法(推薦)

v-bind:class='js變數'可以縮寫成:class='js變數'

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>屬性指令</title>
	<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.min.js"></script>
	<style>
		.red {
			color: rgba(255, 104, 104, 0.7);
		}
		.purple {
			color: rgba(104, 104, 255, 0.7);
		}
	</style>
</head>
<body>
<div id="box">
	<img v-bind:src="url" alt="" height="100">
	<br>
	<button @click="handleClick">點我變色</button>
	<div :class="isActive?'red':'purple'">
		<h1>我是一個div</h1>
	</div>
</div>
</body>
<script>
	let vm = new Vue({
		el: '#box',
		data: {
			url: 'https://ss0.bdstatic.com/70cFvHSh_Q1YnxGkpoWK1HF6hhy/it/u=205441424,1768829584&fm=26&gp=0.jpg',
			change: 'red',
			isActive: true
		},
		methods: {
			handleClick() {
				this.isActive = !this.isActive
			},
		}
	})
</script>
</html>

image

四:Style 和 Class

數據的綁定

語法:

:屬性名='js變數/js語法'

  • :class='js變數、字元串、js數組'
    class:三目運算符、數組、對象

  • :style='js變數、字元串、js數組'
    style:三目運算符、數組[{backgreound: ‘red’},]、對象

      <!DOCTYPE html>
      <html lang="en">
      <head>
      	<meta charset="UTF-8">
      	<title>Style 和 Class</title>
      	<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.min.js"></script>
      	<style>
      		.red {
      			color: rgba(255, 104, 104, 0.7);
      		}
      		.font-20 {
      			font-size: 20px;
      		}
      		.be-bold {
      			font-weight: bold;
      		}
      	</style>
      </head>
      <body>
      <div id="box">
      	<p>我是一個普通的p標簽</p>
      	<div :class="class_obj">
      		<p>我是一個不普通的p標簽1</p>
      	</div>
      	<button @click="handleClick">點擊放大字體</button>
      	<div :style="style_obj">
      		<p>我是一個不普通的p標簽2</p>
      	</div>
      </div>
      </body>
      <script>
      	let vm = new Vue({
      		el: '#box',
      		data: {
      			// class_obj: 'red',    // 放1個是字元串
      			class_obj: ['red', 'font-20', 'be-bold'],    // 放2個是數組
      			// class_obj: { red:true, be-bold:false},    // 也可以放對象
      			// 數組.push()   從尾部添加1個元素
      			// 數組.pop()    刪除最後1個元素 並返回
      			// 對象的寫法
      			style_obj: {
      				color: 'red',
      				fontSize: '20px'
      			}
      			// style_obj: [{background:'red'}, {fontSize:'20px'}]
      		},
      		methods: {
      			handleClick(){
      				this.style_obj['fontSize']='30px'
      			}
      		}
      	})
      </script>
      </html>
    

下方試驗的命令

vm.class_obj.pop()
vm.class_obj.pop()
vm.class_obj.pop()
vm.class_obj.push('be-bold')
vm.class_obj.push('red')
vm.class_obj.push('font-20')

image


image


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

-Advertisement-
Play Games
更多相關文章
  • OpenGrok是一個源碼搜索及交叉引用查詢引擎,OpenGrok的引入可以幫助我們更好地在浩如煙海的源碼里找到自己需要的那坨代碼。 ...
  • 影響護眼的因素 藍光 目前手機大多已經實現硬體低藍光,而且藍光也可以通過護眼模式輕易剋服。 偏振光 偏振光指振動方向與傳播方向不對稱的光,主要分為圓偏振光與線偏振光兩種。 線偏振光測試方法為:透過偏振片看屏幕,旋轉偏振片,若存在某個角度屏幕發出的光線無法透過偏振片,則是線偏振光。一些墨鏡鏡片、相機的 ...
  • 一、初始化 -(JXCategoryTitleView *)categoryView{ if (!_categoryView) { _categoryView = [[JXCategoryTitleView alloc] init]; _categoryView.delegate = self; _ ...
  • 摘要:文章闡述了Nuxt3中Nitro生命周期鉤子的使用,如nitro:config自定義配置、nitro:init註冊構建鉤子、nitro:build:before/after調整構建設置及處理公共資產、prerender:routes擴展預渲染路由、build:error捕獲構建錯誤,通過示例代... ...
  • ‍ 寫在開頭 點贊 + 收藏 學會 後端:密碼得走密文哇! 我:base64?md5? 後端:這次不行哇,新來的測試不好糊弄呢!必須要國密sm2加密捏 我: 好吧,看我的。 我這邊使用的是sm-crypto,當然也有很多優秀的庫如:forge,我在業務上搭配jszip做過上傳zi ...
  • 今天我們來學習一個有意思的多行文本輸入打字效果,像是這樣: 這個效果其實本身並非特別困難,實現的方式也很多,在本文中,我們更多的會聚焦於整個多行打字效果最後的動態游標的實現。 也就是如何在文本不斷變長,在不確定行數的情況下,讓文字的最末行右側處,一直有一個不斷閃爍的游標效果: 單行文本打字效果 在此 ...
  • ★ 將File對象轉換為URL的兩種方式 方式一. URL.createObjectURL(object) 返回了一個DOMString包含了一個對象URL,該URL可用於指定源 object的內容。其參數為用於創建 URL 的File 對象、Blob 對象或者 MediaSource 對象。​ 方 ...
  • JavaScript 是一種弱類型語言,開發者經常需要判斷變數的數據類型。本文介紹了 typeof、instanceof、Object.prototype.toString.call 等常用的判斷方法,並討論了 typeof null 返回 object 的歷史原因。此外,還涵蓋瞭如何判斷箭頭函數、... ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...