【vue教程】二. Vue特性原理詳解

目錄

    • 回顧
    • 本章涵蓋知識點
    • Vue 實例和選項
      • 創建 Vue 實例
      • Vue 實例的選項
    • Vue 模板語法
      • 插值表達式
      • 指令
        • v-bind
        • v-model
        • v-on
    • 自定義指令
      • 創建自定義指令
      • 在模板中使用自定義指令
      • 自定義指令的`鉤子函數`
      • 自定義指令的實例演示
    • 指令注冊
      • 局部注冊指令
      • 過濾器
    • 數據綁定和響應式原理
      • 響應式數據綁定示例
      • 響應式原理解析
    • v-model 的自定義實現
      • 自定義`v-model`
      • 擴展知識點
    • 事件處理和表單輸入
      • 事件處理示例
      • 表單輸入綁定
    • 深入數據綁定
      • 對象和數組的更新
        • 更新對象屬性
        • 更新數組
      • 修飾符
        • 使用修飾符
      • 按鍵修飾符
        • 監聽特定按鍵
    • 組件基礎
      • 組件的創建和使用
      • 組件的 props
      • 組件事件
    • 結語

在這里插入圖片描述

回顧

  • 【vue教程】一. 環境搭建與代碼規范配置

在上一篇文章中,我們介紹了 Vue.js 的起源、設計理念、核心特性 已經項目規范化配置 。我們學習了如何搭建 Vue 開發環境,并熟悉了一些常用的 Vue 開發工具和插件

本章涵蓋知識點

  • Vue 實例和選項
  • 模板語法:插值、指令、過濾器
  • 數據綁定和響應式原理
  • 事件處理和表單輸入、v-model 原理
  • 組件基礎

正文開始如果覺得文章對您有幫助,請幫我三連+訂閱,謝謝

Vue 實例和選項

每個 Vue 應用都是從創建一個新的 Vue 實例開始的。Vue 實例是一個包含選項的對象,這些選項包括數據方法生命周期鉤子等。

創建 Vue 實例

var vm = new Vue({el: "#app", // 指定Vue應該綁定到的DOM元素data: {message: "Hello Vue!", // 響應式數據},methods: {sayHello: function () {alert(this.message);},},
});

在這個實例中,el屬性指定了 Vue 將接管哪個 DOM 元素,data屬性包含了 Vue 實例的數據對象,methods屬性包含了 Vue 實例可以調用的方法。

Vue 實例的選項

Vue 實例有多種選項,以下是一些常用的選項:

  • data: 組件的數據對象。
  • methods: 定義組件的方法。
  • computed: 定義計算屬性。
  • watch: 定義偵聽器。
  • props: 子組件的外部數據。
  • el: 指定 Vue 應該綁定到的 DOM 元素。

Vue 模板語法

Vue 的模板語法讓我們能夠聲明式地將數據渲染進 DOM。

插值表達式

插值表達式允許我們把數據插到模板中。

<span>Message: {{ message }}</span>

message數據變化時,頁面上對應的文本也會更新。

指令

指令是 Vue 模板中的特殊標記,帶有前綴v-,用于告訴 Vue 框架需要對 DOM 元素進行一些特殊的處理。

v-bind

用于動態地綁定一個或多個屬性,或一個組件 prop。

<img :src="imageUrl" :alt="imageDescription" />
v-model

在表單輸入和應用狀態之間創建雙向數據綁定。

<input v-model="username" placeholder="Enter your name" />
v-on

監聽 DOM 事件。

<button @click="sayHello">Say Hello</button>

自定義指令

Vue 允許我們通過自定義指令向元素添加自己的功能。自定義指令 可以鉤入到 Vue 的編譯過程中,允許我們對元素進行低層次操作。

創建自定義指令

// 注冊一個全局自定義指令 `v-focus`
Vue.directive("focus", {// 當被綁定的元素插入到DOM時……inserted: function (el) {// 聚焦元素el.focus();},
});

在模板中使用自定義指令

<input v-focus />

自定義指令的鉤子函數

自定義指令有以下幾個鉤子:

  • bind: 只調用一次,指令第一次綁定到元素時調用。
  • inserted: 被綁定元素插入父組件時調用。
  • update: 所在組件的 VNode 更新時調用。
  • componentUpdated: 父組件更新,該鉤子被調用。
  • unbind: 只調用一次,指令與元素解綁時調用。

自定義指令的實例演示

假設我們需要一個指令來控制元素的尺寸,根據數據屬性調整大小:

Vue.directive("resize", {bind(el, binding) {el.style.width = binding.value.width + "px";el.style.height = binding.value.height + "px";},update(el, binding) {if (binding.oldValue !== binding.value) {el.style.width = binding.value.width + "px";el.style.height = binding.value.height + "px";}},
});

在模板中使用:

<div v-resize="resizeObj"></div>

其中resizeObj是 Vue 實例的數據對象,包含widthheight屬性。

指令注冊

指令不僅可以全局注冊,還可以局部注冊到單個 Vue 實例。

局部注冊指令

new Vue({directives: {focus: {// 指令定義inserted: function (el) {el.focus();},},},
});

在實例的模板中使用:

<input v-focus />

過濾器

過濾器用于在插值表達式中轉換輸出文本。

<p>{{ message | capitalize }}</p>
filters: {capitalize: function (value) {if (!value) return '';value = value.toString();return value.charAt(0).toUpperCase() + value.slice(1);}
}

數據綁定和響應式原理

Vue 的數據綁定是通過響應式系統實現的,該系統確保數據變化時視圖能自動更新。

響應式數據綁定示例

data: {firstName: 'John',lastName: 'Doe'
}

在模板中:

<p>{{ firstName }} {{ lastName }}</p>

firstNamelastName變化時,視圖會自動更新。

響應式原理解析

Vue 使用Object.defineProperty來劫持數據對象的屬性,當屬性值變化時,視圖會自動更新。

v-model 的自定義實現

v-model在 Vue 中通常用于創建數據雙向綁定,它主要是語法糖,背后是:value@input的結合。在組件中,我們可以自定義v-model的行為。

自定義v-model

在組件中,我們可以通過model選項來自定義v-model

Vue.component("child-component", {model: {prop: "customValue", // 指定prop的名稱event: "change", // 指定事件的名稱},props: ["customValue"],methods: {updateValue: function (event) {this.$emit("change", event.target.value); // 觸發事件,并傳入新值},},template: `<input type="text" :value="customValue" @input="updateValue">`,
});

使用自定義v-model的組件:

<child-component v-model="parentValue"></child-component>

在這個示例中,parentValue是父組件中的數據,通過v-modelchild-component組件綁定。組件內部,我們監聽input事件,并在事件發生時,通過$emit觸發一個change事件,并傳遞新的值。

擴展知識點

  • 修飾符v-model可以與修飾符一起使用,如.lazy.number.trim,以控制輸入的更新時機和行為。
  • 不同類型的輸入處理:對于radiocheckboxselect等不同類型的表單元素,Vue 提供了不同的處理方式來確保v-model的雙向綁定能正常工作。

事件處理和表單輸入

Vue 允許我們在模板中直接監聽 DOM 事件,并在 Vue 實例的方法中處理這些事件。

事件處理示例

methods: {sayHello: function () {alert('Hello ' + this.username);}
}

在模板中:

<button @click="sayHello">Say Hello</button>

表單輸入綁定

<input v-model="username" placeholder="Enter your name" />

當用戶在輸入框中輸入時,username的值將自動更新,并且如果username在數據對象中變化,輸入框的內容也會同步更新。

深入數據綁定

Vue 的數據綁定不僅限于簡單的文本展示和表單輸入,它還包括更復雜的場景。

對象和數組的更新

Vue 可以響應式地更新對象和數組,但需要注意使用Vue.set來保持響應性。

更新對象屬性
// 對于新屬性
Vue.set(vm.someObject, "newProperty", 123);
更新數組
// 添加元素
vm.someArray.push(123);
// 刪除元素
vm.someArray.splice(index, 1);

修飾符

Vue 提供了事件處理的修飾符,如.stop.prevent.capture等,來簡化事件處理。

使用修飾符
<button @click.stop="sayHello">Say Hello</button>

按鍵修飾符

Vue 允許你監聽特定的按鍵,如.enter.tab等。

監聽特定按鍵
<input @keyup.enter="onEnter" />

組件基礎

Vue 組件系統是構建大型應用程序的關鍵。組件允許我們通過組合較小的、可復用的部件來構建大型應用程序。

組件的創建和使用

Vue.component("my-component", {template: "<div>A custom component!</div>",
});

在模板中使用:

<my-component></my-component>

組件的 props

組件可以接受外部傳入的數據,這些數據被稱為 props。

Vue.component("child-component", {props: ["greeting"],template: "<p>{{ greeting }}</p>",
});

使用:

<child-component :greeting="'Hello from parent!'"></child-component>

組件事件

組件可以觸發事件,這些事件可以被父組件監聽。

Vue.component("child-component", {template: `<button @click="notifyParent">Click me</button>`,methods: {notifyParent() {this.$emit("notify", "Message from child");},},
});

父組件監聽事件:

<child-component @notify="handleNotification"></child-component>
methods: {handleNotification: function (message) {alert(message);}
}

結語

通過本篇文章,我們全面學習了 Vue 的基礎語法,包括 Vue 實例和選項、模板語法、數據綁定、事件處理、組件系統的基礎,以及過濾器。這些知識點構成了 Vue 應用開發的基礎。在接下來的專欄文章中,我們將繼續深入探索 Vue 的高級特性和最佳實踐。


歡迎在文章下方留言,分享學習 Vue 基礎語法的心得體會,或提出在學習過程中遇到的問題。我將在后續的文章中提供解答和指導。


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/44659.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/44659.shtml
英文地址,請注明出處:http://en.pswp.cn/web/44659.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Oracle邏輯備份

邏輯備份 expdp 備份恢復表空間 創建測試數據 # 創建表空間 create tablespace itpux01 datafile /oradata/fghsdb/itpux01.dbf size 100m autoextend off extent management local autoallocate segment space management auto; create tablespace itpux02 datafile /o…

編程題目積累(day5)

題目&#xff1a; 源數組a&#xff0c;將a中所有元素乘以2之后添加進a&#xff0c;則這個a就叫雙倍數組&#xff0c;給你一個數組a&#xff0c;判斷它是不是雙倍數組&#xff0c;如果是則輸出源數組&#xff0c;不是則輸出空數組。 補充知識&#xff1a; python中枚舉和字典…

OAuth 和 SSO 場景中的 URL 語法解析

OAuth 和 SSO 場景中的 URL 語法解析 在 OAuth 和 SSO (Single Sign-On) 場景中&#xff0c;URL 是一個關鍵組件&#xff0c;用于在客戶端和服務器之間傳遞認證請求和響應。讓我們深入解析這個 URL&#xff1a; https://api.commerce.ondemand.com/occ/oauth/authorize?resp…

【python數據結構精講】雙端隊列

通過總結《流暢的Python》等書中的知識&#xff0c;總結Python中常用工具的方法。 deque&#xff0c;學名雙端隊列。 1. 常用方法 append()&#xff1a;隊列尾部添加appendleft()&#xff1a;隊首添加pop()&#xff1a;移除隊列最后一個元素popleft()&#xff1a;移除隊列第一…

AI算法14-套索回歸算法Lasso Regression | LR

套索回歸算法概述 套索回歸算法簡介 在統計學和機器學習中&#xff0c;套索回歸是一種同時進行特征選擇和正則化&#xff08;數學&#xff09;的回歸分析方法&#xff0c;旨在增強統計模型的預測準確性和可解釋性&#xff0c; 正則化是一種回歸的形式&#xff0c;它將系數估…

并發編程-06之Semaphore

一 Semaphore入門 1.1 什么是Semaphore Semaphore&#xff0c;俗稱信號量&#xff0c;它是操作系統中PV操作的原語在java的實現&#xff0c;它也是基于AbstractQueuedSynchronizer實現的。 Semaphore的功能非常強大&#xff0c;大小為1的信號量就類似于互斥鎖&#xff0c;通過同…

centos部署jar包

第一步&#xff1a; 將IDEA中的項目打包為jar,將這個jar文件放到centos服務器上的目錄里&#xff0c;我在opt新建api目錄&#xff0c;將jar文件放入&#xff0c;如下圖&#xff1a; 第二步&#xff1a; 將需要讀取的配置文件也放入此目錄(其他目錄也可以&#xff0c;和腳本中…

【筆記】記一次讀寫分離之shardingsphere.datasource導致數據源為空錯誤

錯誤&#xff1a; *************************** APPLICATION FAILED TO START *************************** Description: Failed to configure a DataSource: url attribute is not specified and no embedded datasource could be configured. Reason: Failed to determin…

搭建RAG系統就這么簡單:LangChain|RAG是什么?

RAG是什么 “RAG”&#xff08;Retrieval-Augmented Generation&#xff09;是一種結合了檢索&#xff08;Retrieval&#xff09;和生成&#xff08;Generation&#xff09;的人工智能技術&#xff0c;它在大模型中被需要的原因包括&#xff1a; 知識豐富性&#xff1a; 大模…

探索數據結構與算法的奇妙世界 —— Github開源項目推薦《Hello 算法》

在浩瀚的編程與計算機科學領域中&#xff0c;數據結構與算法無疑是每位開發者攀登技術高峰的必經之路。然而&#xff0c;對于初學者而言&#xff0c;這條路往往布滿了荊棘與挑戰。幸運的是&#xff0c;今天我要向大家推薦一個令人振奮的項目——《Hello Algo》&#xff0c;它正…

ubuntu使用kubeadm搭建k8s集群

一、卸載k8s kubeadm reset -f modprobe -r ipip lsmod rm -rf ~/.kube/# 自己選擇性刪除 坑點哦 rm -rf /etc/kubernetes/ rm -rf /etc/systemd/system/kubelet.service.d rm -rf /etc/systemd/system/kubelet.service rm -rf /usr/bin/kube* rm -rf /etc/cni rm -rf /opt/cn…

C# Winform 自定義事件實戰

在C#的WinForms中&#xff0c;自定義事件是一種強大的工具&#xff0c;它允許你創建自己的事件&#xff0c;從而在特定條件下通知訂閱者。自定義事件通常用于封裝業務邏輯&#xff0c;使代碼更加模塊化和易于維護。下面我將通過一個實戰例子來展示如何在WinForms中創建和使用自…

多線程編程中的條件變量及其優化

本套課在線學習視頻&#xff08;網盤地址&#xff0c;保存到網盤即可免費觀看&#xff09;&#xff1a; 鏈接&#xff1a;https://pan.quark.cn/s/7220b198cf00 在多線程編程中&#xff0c;條件變量是一種用于線程間通信和同步的機制。通過使用條件變量&#xff0c;可以有效地…

Prometheus + alermanager + webhook-dingtalk 告警

添加釘釘機器人 1. 部署 alermanager 1.1 下載軟件包 wget https://github.com/prometheus/alertmanager/releases/download/v0.26.0/alertmanager-0.26.0.linux-amd64.tar.gz 網址 &#xff1a;Releases prometheus/alertmanager (github.com) 1.2 解壓軟件包 mkdir -pv …

醫日健集團技術力量體現測試的背后

醫日健集團覆蓋式更新 科技日新月異的時代&#xff0c;醫日健集團始終走在行業的前列。近日&#xff0c;醫日健集團外勤技術人員全面對市場點位投放的數智藥房進行了新系統升級和機器測試&#xff0c;這是醫日健對于科技創新的最新嘗試。 以客戶體驗為核心優化新體驗 醫日健集團…

NCNN源碼學習(1):Mat詳解

前言:最原始的發行版本代碼比較簡潔,我們從2017年ncnn第一次開源的版本閱讀mat的源碼。閱讀源碼味如嚼蠟,下面就開始吧! 目錄 構造函數 內存分配 數據成員 申請和釋放內存 引用計數 輔助函數 填充函數fill 參考 構造函數 ncnn提供了8種構造函數的方式。 // emptyM…

Js 前置,后置補零的原生方法與補字符串 padStart及padEnd

在工作中&#xff0c;遇到了需要將不滿八位的一個字符串進行后補0的操作&#xff0c;所以就在網上學習了關于js原生補充字符串的方法&#xff0c;然后用這篇博客記錄下來。 目錄 前置補充字符串 String.prototype.padStart() 后置補充字符串String.prototype.padEnd() 前置補…

將獨熱碼應用到神經網絡中

引言 接上回&#xff0c;本文繼續說如何用TensorFlow將獨熱編碼應用到一個簡單的神經網絡中&#xff0c;以實現從一段隨機文本到另一段隨機文本的轉換。 步驟一&#xff1a;導入庫 import tensorflow as tf import numpy as np import random import string步驟二&#xff1…

【超音速 專利 CN117710683A】基于分類模型的輕量級工業圖像關鍵點檢測方法

申請號CN202311601629.7公開號&#xff08;公開&#xff09;CN117710683A申請日2023.11.27申請人&#xff08;公開&#xff09;超音速人工智能科技股份有限公司發明人&#xff08;公開&#xff09;張俊峰(總); 楊培文(總); 沈俊羽; 張小村 技術領域 本發明涉及圖像關鍵點檢測…

數據庫MySQL下載安裝

MySQL下載安裝地址如下&#xff1a; MySQL :: Download MySQL Community Server 1、下載界面 2、點擊下載 3、解壓記住目錄 4、配置my.ini文件 未完..