Vue.js常見問題

来源:https://www.cnblogs.com/yuyezhizhi/archive/2019/05/23/10910581.html
-Advertisement-
Play Games

v-show與v-if的區別 1.v-show只是css級別的display屬性none和block之間的切換。而v-if 是“真正”的條件渲染,因為它會確保在切換過程中條件塊內的事件監聽器和子組件適當地被銷毀和重建 2.v-show一般用在操作比較頻繁的地方,v-if用在運行時條件很少改變的地方。 ...


v-show與v-if的區別

1.v-show只是css級別的display屬性none和block之間的切換。而v-if 是“真正”的條件渲染,因為它會確保在切換過程中條件塊內的事件監聽器和子組件適當地被銷毀和重建

2.v-show一般用在操作比較頻繁的地方,v-if用在運行時條件很少改變的地方。

3.v-if="false"時,內部組件不會渲染,可以利用這個合理渲染重要的內容。或者和v-else,v-else-if一起使用。

 

定class的數組用法

一般綁定class對象的用法如下

<div v-bind:class="{ active: isActive }"></div>

當isActive為true時,class="active"

你可以在對象中傳入更多屬性來動態切換多個 class,v-bind:class可以和普通的class共存

<div 

class=”static“

v-bind:class="{ active: isActive,text-danger:hasError }">

</div>

data{

isActive:true,

hasError:false

}

那渲染結果為<div class="static active"></div>

數組的用法

<div v-bind:class="[ activeClass,errorClass ]"></div>

data{

activeClass:'active',

errorClass:'text-danger'

}

渲染為

<div class="active text-danger">

 

想根據條件切換數組中的class

可以用三元表達式:

<div v-bind:class=[isActive?activeClass:'',errorClass]>

這樣會始終添加errorClass,只有當isActive為true時添加activeClass

在數組語法中也可以使用對象語法:

<div v-bind:class=[{active:isActive},errorClass]>


計算屬性和watch的區別

計算屬性是自動監聽,依賴值的變化,從而動態返回內容。

如果我們還需要動態值,那就用計算屬性;需要知道值改變之後執行的邏輯,就用watch

補充:

1.computed是一個對象的時候,有get和set兩個選項。

2.methons是一個方法,可以接受參數,computed可以緩存。

3.computed可以依賴其他的computed,甚至是其他組件的data。

4.watch是一個對象的時候,有handler(執行的函數),deep(是否深度),immediate(是否立即執行)等常用選項。

事件修飾符

<!--ctrl按下時觸發,即使Alt或Shift被一同按下也會觸發-->

<button @click.ctrl="onClick">B</button>

<!-- 有且只有ctrl被按下時觸發-->

<button @click.ctrl.exact="onClick">B</button>

<!-- 沒有任何修飾符被按下時觸發-->

<button @click.exact="onClick">B</button>

 

<!-- 阻止單擊事件繼續傳播 --> <a v-on:click.stop="doThis"></a>

<!-- 提交事件不再重載頁面 --> <form v-on:submit.prevent="onSubmit"></form>

 

<!-- 添加事件監聽器時使用事件捕獲模式 --> <!-- 即元素自身觸發的事件先在此處理,然後才交由內部元素進行處理 --> <div v-on:click.capture="doThis">...</div>

<!-- 只當在 event.target 是當前元素自身時觸發處理函數 --> <!-- 即事件不是從內部元素觸發的 --> <div v-on:click.self="doThat">...</div>

 

<!-- 點擊事件將只會觸發一次 --> <a v-on:click.once="doThis"></a>

<!-- 滾動事件的預設行為 (即滾動行為) 將會立即觸發 --> <!-- 而不會等待 `onScroll` 完成 --> <!-- 這其中包含 `event.preventDefault()` 的情況 --> <div v-on:scroll.passive="onScroll">...</div>

 

組件中的data為什麼是函數

因為組件使用來複用的,JS里對象是引用關係,這樣作用域沒有隔離

而new Vue的實例是不會被覆用的,因此不存在引用對象的問題。

Keep-alive內置組件


Props:

1.include 字元串或正則表達式,匹配的組件會被緩存

2.exclude 與上面相反

3.max。數字,最大可以緩存多少組件實例。

用法:

<keep-alive>包裹動態組件時,會緩存不活動的組件實例,而不是銷毀他們,和<transition>一樣,它是一個抽象組件,不會渲染出一個DOM元素,也不會出現在父組件鏈中。

當組件在<keep-alive>內被切換,它的activated和 deactivate 這兩個生命周期鉤子函數將會被對應執行。

主要用於保留組件狀態或避免重新渲染。

<!-- 基本 -->

<keep-alive> <component :is="view"></component> </keep-alive>

<!-- 多個條件判斷的子組件 -->

<keep-alive> <comp-a v-if="a > 1"></comp-a> <comp-b v-else></comp-b> </keep-alive>

<!-- 和 `<transition>` 一起使用 -->

<transition> <keep-alive> <component :is="view"></component> </keep-alive> </transition>

註意:<keep-alive>是用在其一個直屬的子組件被開關的情形。如果你在其中有v-for則不會工作。如果有上述的多個條件性的子元素,<keep-alive>要求同時只有一個子元素被渲染。

Vuex中mutations和actions的區別

actions可以執行非同步,actions調用mutations,而mutations來修改store。

Render函數

類型:(createElement: () => VNode) => VNode

詳細:字元串模板的代替方案,允許你發揮 JavaScript 最大的編程能力。該渲染函數接收一個 createElement 方法作為第一個參數用來創建 VNode。如果組件是一個函數組件,渲染函數還會接收一個額外的 context 參數,為沒有實例的函數組件提供上下文信息。

怎麼理解單向數據流

父組件時通過prop把數據傳遞到子組件的,但是這個prop只能由父組件修改,子組件修改會報錯。子組件想修改時,只能通過$emit派發一個自定義事件,父組件接到後,由父組件修改。

生命周期

主要有8個階段

①beforeCreate:在實例初始化之後,數據觀測 (data observer) 和 event/watcher 事件配置之前被調用。

②created:在實例創建完成後被立即調用。在這一步,實例已完成以下的配置:數據觀測 (data observer),屬性和方法的運算,watch/event 事件回調。然而,掛載階段還沒開始,$el 屬性目前不可見。

③beforeMount:在掛載開始之前被調用:相關的 render 函數首次被調用。該鉤子在伺服器端渲染期間不被調用。

④mounted:el 被新創建的 vm.$el 替換,並掛載到實例上去之後調用該鉤子。如果 root 實例掛載了一個文檔內元素,當 mounted 被調用時 vm.$el 也在文檔內。

註意 mounted 不會承諾所有的子組件也都一起被掛載。如果你希望等到整個視圖都渲染完畢,可以用 vm.$nextTick 替換掉 mounted:mounted: function () { this.$nextTick(function () { // Code that will run only after the // entire view has been rendered }) } 該鉤子在伺服器端渲染期間不被調用。

⑤beforeUpdate:數據更新時調用,發生在虛擬 DOM 打補丁之前。這裡適合在更新之前訪問現有的 DOM,比如手動移除已添加的事件監聽器。

該鉤子在伺服器端渲染期間不被調用,因為只有初次渲染會在服務端進行。

⑥updated:由於數據更改導致的虛擬 DOM 重新渲染和打補丁,在這之後會調用該鉤子。

當這個鉤子被調用時,組件 DOM 已經更新,所以你現在可以執行依賴於 DOM 的操作。然而在大多數情況下,你應該避免在此期間更改狀態。如果要相應狀態改變,通常最好使用計算屬性或 watcher 取而代之。

註意 updated 不會承諾所有的子組件也都一起被重繪。如果你希望等到整個視圖都重繪完畢,可以用 vm.$nextTick 替換掉 updated:updated: function () { this.$nextTick(function () { // Code that will run only after the // entire view has been re-rendered }) }該鉤子在伺服器端渲染期間不被調用。

⑦beforeDestroy:實例銷毀之前調用。在這一步,實例仍然完全可用。該鉤子在伺服器端渲染期間不被調用。

⑧Destoryed:Vue 實例銷毀後調用。調用後,Vue 實例指示的所有東西都會解綁定,所有的事件監聽器會被移除,所有的子實例也會被銷毀。該鉤子在伺服器端渲染期間不被調用。

組件間的通信

1.父向子傳遞數據是通過props,子向父通過events(emits)

2.通過父鏈子鏈也可以(parent/$children)

3.ref也可以訪問組件實例,provide/inject API

4.兄弟通信通過Bus和Vuex

5.跨級通信通過Bus和Vuex 和provide/inject API

路由的跳轉方式

1.通過<router-link to="home">,router-linker標簽渲染為<a>標簽,在template中的跳轉都是用這種。

2.另一種是邊城式導航,也就是通過JS跳轉,比如router.push('/home')。

Vue.js 2.x 雙向綁定原理

核心的API是通過Object.defineProperty()來劫持各個屬性的setter/getter,在數據變動時發佈消息給訂閱者,觸發相應的監聽回調,這就是為什麼不支持IE8的原因。

MVVM與MVC有什麼區別

MVVM模式是由經典的軟體架構MVC衍生來的。當View(視圖層)變化時,會自動更新到ViewModel(視圖模型)。反之亦然。View和ViewModel之間通過雙向綁定(data-binding)建立聯繫,於MVC不同的是,他沒有Controller層,而是演變為ViewModel。

ViewModel通過雙向綁定數據把View層和Model層連接起來,而View和Model之間的同步工作是由Vue.js完成的,我們不需要手動操作DOM,只需要維護好數據狀態。


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

-Advertisement-
Play Games
更多相關文章
  • 封裝的一般套路 AJAX封裝步驟 1.寫出 AJAX 發送請求與接收響應的模板 2.寫一個空函數然後將這個模板放進去 3.最後根據變化量抽象參數,以及使用返回值 回調函數 回調:將函數作為參數傳遞,就好比是將一件事情交給另一個人做(也可以理解為委托) 在這個例子中,ajax非同步請求由於函數內部包含返 ...
  • 這兩天研究了一下topjui的可編輯表格edatagrid,想在每一列的後面根據返回的數據判斷是使用 combobox 還是 numberbox,期間遇到了一些坑,下麵實現代碼,需要的朋友可以參考一下。 json數據 html js 頁面刷新的的時候顯示如下圖,是正常的 可是你一旦編輯完的時候它就又 ...
  • 前言 本篇博文出至於我的 倉庫: "web study" ,如果你覺得對你有幫助歡迎star,你們的點贊是我持續更新的動力,謝謝! 非同步編程在前端開發中尤為常見,從最早的 ,到後來的各種封裝 ,再到 事件觸發的回調,無不涉及非同步編程。今天咱們來聊聊 中新提出的非同步解決方案: 和`async/awai ...
  • ztree ...
  • 離線緩存 application cache 1. 什麼是離線緩存: 離線緩存可以將站點的一些文件緩存到本地,它是瀏覽器自己的一種機制,將需要的文件緩存下來,以便後期即使沒有連接網路,被緩存的頁面也可以展示。 例子:比如我們在手機或電腦上訪問一個網頁,下一次訪問即使不連網也可以訪問,因為當我們第一次 ...
  • 1、一般做法 一般我們會把所有的` ...
  • 一、後臺nginx環境搭建 web點數據採集後臺配置nginx:https://blog.csdn.net/weixin_37490221/article/details/80894827 下載數據源:wget -O lua-nginx-module-0.10.0.tar.gz https://gi ...
  • 為了引出本文的主題,先看看這個問題,最快水平垂直居中一個元素的方法是什麼? 水平垂直居中也算是 CSS 領域最為常見的一個問題了,不同場景下的方法也各不相同,各有優劣。嗯,下麵這種應該算是最便捷的了: 上面的 display: flex 替換成 display: inline-flex | grid ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...