搜尋
首頁web前端js教程vue底層原理與元件通信

這次帶給大家vue底層原理與組件通信,vue底層原理與組件通信的注意事項有哪些,下面就是實戰案例,一起來看一下。

vue的底層原理?

vue元件之間的通訊?

JS中判斷資料型別的方法有幾種?

最常見的判斷方法:typeof

判斷已知物件類型的方法: instanceof

根據物件的constructor判斷: constructor

無敵萬能的方法:jquery.type()

vue與angular的區別?

#1.vue只是mvvm中的view層,只是一個如jquery般的工具庫,而不是框架,而angular而是mvvm框架。
2.vue的雙向邦定是基於ES5 中的3.getter/setter來實現的,而angular而是由自己實作一套模版編譯規則,需要進行所謂的「髒」檢查,vue則不需要。因此,vue在效能上更有效率,但是代價是對於ie9以下的瀏覽器無法支援。
4.vue需要提供一個el物件來實例化,後續的所有作用範圍也是在el物件之下,而angular而是整個html頁面。一個頁面,可以有多個vue實例,而angular好像不是這樣玩的。
5.vue真的很容易上手,學習成本相對低,不過可以參考的資料不是很豐富,官方文件比較簡單,缺少全面的使用案例。高級的用法,需要自己去研究源碼,至少目前是這樣。

說說你對angular髒檢查理解?

在angular中你無法判斷你的數據是否做了更改,所以它設定了一些條件,當你觸發這些條件之後,它就執行一個檢測來遍歷所有的數據,對比你更改的地方,然後執行變化。
這個檢查很不科學。而且效率不高,有很多多餘的地方,所以官方稱為 髒檢查。

active-class是哪個元件的屬性?

vue-router模組的router-link元件。

巢狀路由怎麼定義?

在實際專案中我們會碰到多層嵌套的元件組合而成,但是我們要如何實作巢狀路由呢?因此我們需要在 VueRouter 的參數中使用 children 配置,這樣就可以很好的實作路由嵌套。

index.html,只有一個路由出口

<p> 
  <!-- router-view 路由出口, 路由匹配到的组件将渲染在这里 --> 
  <router-view></router-view> 
</p>

main.js,路由的重定向,就會在頁面一載入的時候,就會將home元件顯示出來,因為重定向指向了home元件,redirect的指向與path的必須一致。 children裡面是子路由,當然子路由裡面還可以繼續嵌套子路由。

import Vue from 'vue' 
import VueRouter from 'vue-router' 
Vue.use(VueRouter) 
//引入两个组件 
import home from "./home.vue" 
import game from "./game.vue" 
//定义路由 
const routes = [ 
  { path: "/", redirect: "/home" },//重定向,指向了home组件 
  { 
    path: "/home", component: home, 
    children: [ 
      { path: "/home/game", component: game } 
    ] 
  } 
] 
//创建路由实例 
const router = new VueRouter({routes}) 
new Vue({ 
  el: '#app', 
  data: { 
  }, 
  methods: { 
  }, 
  router 
})

home.vue,點擊顯示就會將子路由顯示在出來,子路由的出口必須在父路由裡面,否則子路由無法顯示。

<template> 
  <p> 
    </p>
<h3 id="首页">首页</h3> 
    <router-link> 
      <button>显示<tton> 
    </tton></button></router-link> 
    <router-view></router-view> 
   
</template>

game.vue

 <template> 
  <h3 id="游戏">游戏</h3> 
</template>

怎麼定義vue-router的動態路由?怎麼取得傳過來的動態參數?

在router目錄下的index.js檔案中,對path屬性加上/:id。

使用router物件的params.id。

vue-router有哪幾種導航鉤子?

三種,

第一種:是全域導航鉤子:router.beforeEach(to,from,next),作用:跳轉前進行判斷攔截。
第二種:元件內的鉤子
第三種:單獨路由獨享元件

scss是什麼?在vue.cli中的安裝使用步驟是?有哪幾大特性?

css的預編譯。

使用步驟:

第一步:用npm 下三個loader(sass-loader、css-loader、node-sass)

第二步:在build目錄找到webpack.base.config.js,在那個extends屬性中加一個拓展.scss

第三步:還是在同一個文件,配置一個module屬性

第四步:然後在元件的style標籤上加上lang屬性,例如:lang=”scss”

##有哪幾大特性:

1、可以用變量,例如($變數名稱=值);

2、可以用混合器,例如()
3、可以嵌套

mint-ui是什麼?怎麼使用?說出至少三個組件使用方法?

基於vue的前端元件庫。 npm安裝,然後import樣式和js,vue.use(mintUi)全域引入。在單一元件局部引入:import {Toast} 從 ‘mint-ui'。

元件一:Toast(‘登入成功');
元件二:mint-header;
元件三:mint-swiper

v-model是什麼?怎麼使用? vue中標籤怎麼綁定事件?

可以實現雙向綁定,指令(v-class、v-for、v-if、v-show、v-on)。 vue的model層的data屬性。綁定事件:

iframe的優缺點?

iframe也稱為嵌入式框架,嵌入式框架和框架網頁類似,它可以把一個網頁的框架和內容嵌入在現有的網頁中。

優點:

解決載入緩慢的第三方內容如圖示和廣告等的載入問題

Security sandbox

並行載入腳本

方便製作導覽列

缺點:

iframe會阻塞主頁面的Onload事件

即時內容為空,載入也需要時間

沒有語意

簡述一下Sass、Less,且說明區別?

他們是動態的樣式語言,是CSS預處理器,CSS上的一種抽象層。他們是一種特殊的語法/語言而編譯成CSS。

變數符號不一樣,less是@,而Sass是$;

Sass支援條件語句,可以使用if{}else{},for{}循環等等。而Less不支援;

Sass是基於Ruby的,是在服務端處理的,而Less是需要引入less.js來處理Less程式碼輸出Css到瀏覽器

axios是什麼?怎麼使用?描述使用它實現登入功能的流程?

請求後台資源的模組。 npm install axios -S裝好,然後發送的是跨域,需要在設定檔中config/index.js設定。後台如果是Tp5則定義一個資源路由。 js中使用import進來,然後.get或.post。回傳在.then函數中如果成功,失敗則是在.catch函數中

axios tp5進階中,呼叫axios.post(‘api/user')是進行的什麼操作? axios.put(‘api/user/8′)呢?

跨網域,新增使用者操作,更新操作。

vuex是什麼?怎麼使用?哪種功能場景使用它?

vue框架中狀態管理。在main.js引入store,注入。新建了一個目錄store,….. export 。場景有:單頁應用程式中,元件之間的狀態。音樂播放、登入狀態、加入購物車

mvvm框架是什麼?它和其它框架(jquery)的區別是什麼?哪些場景適合?

一個model view viewModel框架,資料模型model,viewModel連接兩個

區別:vue資料驅動,透過資料顯示視圖層而不是節點操作。

場景:資料操作比較多的場景,更便捷

自訂指令(v-check、v-focus)的方法有哪些?它有哪些鉤子函數?還有哪些鉤子函數參數?

全域定義指令:在vue物件的directive方法裡面有兩個參數,一個是指令名稱,另外一個是函數。元件內定義指令:directives

鉤子函數:bind(綁定事件觸發)、inserted(節點插入的時候觸發)、update(元件內相關更新)

鉤子函數參數:el 、binding

說出至少4種vue當中的指令和它的用法?

v-if:判斷是否隱藏;v-for:資料循環出來;v-bind:class:綁定一個屬性;v-model:實作雙向綁定

vue-router是什麼?它有哪些組件?

vue用來寫入路由一個外掛程式。 router-link、router-view

導航鉤子有哪些?它們有哪些參數?

導航鉤子有:

a/全域鉤子和元件內獨享的鉤子。 b/beforeRouteEnter、afterEnter、beforeRouterUpdate、beforeRouteLeave

參數:

有to(去的那個路由)、from(離開的路由)、next(一定要用這個函數才能去到下一個路由,如果不用就攔截)最常用就這幾種

Vue的雙向資料綁定原理是什麼?

vue.js 是採用資料劫持結合發布者-訂閱者模式的方式,透過Object.defineProperty()來劫持各個屬性的setter,getter,在資料變動時發布訊息給訂閱者,觸發對應的監聽回呼。

具體步驟:

第一步:需要observe的資料物件進行遞歸遍歷,包含子屬性物件的屬性,都加上setter和getter
這樣的話,給這個物件的某個值賦值,就會觸發setter,那麼就能監聽到了資料變化

第二步:compile解析模板指令,將模板中的變數替換成數據,然後初始化渲染頁面視圖,並將每個指令對應的節點綁定更新函數,添加監聽數據的訂閱者,一旦數據有變動,收到通知,更新視圖

第三步:Watcher訂閱者是Observer和Compile之間通訊的橋樑,主要做的事情是:
1、在自身實例化時往屬性訂閱器(dep)裡面添加自己
2、自身必須有一個update ()方法
3、待屬性變動dep.notice()通知時,能呼叫自身的update()方法,並觸發Compile中綁定的回調,則功成身退。

第四步:MVVM作為資料綁定的入口,整合Observer、Compile和Watcher三者,透過Observer來監聽自己的model資料變化,透過Compile來解析編譯模板指令,最終利用Watcher搭起Observer和Compile之間的通訊橋樑,達到資料變化-> 視圖更新;視圖互動變化(input) -> 資料model變更的雙向綁定效果。

請詳細說下你對vue生命週期的理解?

總共分為8個階段建立前/後,載入前/後,更新前/後,銷毀前/後

建立前/後: 在beforeCreated階段,vue實例的掛載元素$el和資料物件data都為undefined,尚未初始化。在created階段,vue實例的資料物件data有了,$el還沒有。

載入前/後:在beforeMount階段,vue實例的$el和data都初始化了,但還是掛載之前為虛擬的dom節點,data.message還未替換。在mounted階段,vue實例掛載完成,data.message成功渲染。

更新前/後:當data變更時,會觸發beforeUpdate和updated方法。

銷毀前/後:在執行destroy方法後,對data的改變不會再觸發週期函數,說明此時vue實例已經解除了事件監聽以及和dom的綁定,但是dom結構依然存在

請說下封裝vue 元件的過程?

首先,元件可以提升整個專案的開發效率。能夠把頁面抽象化成多個相對獨立的模組,解決了我們傳統專案開發:效率低、難以維護、重複使用等問題。

然後,使用Vue.extend方法建立一個元件,然後使用Vue.component方法註冊元件。子組件需要數據,可以在props中接受定義。而子元件修改好資料後,想把資料傳遞給父元件。可以採用emit方法。

你是怎麼認識vuex的?

vuex可以理解為一種開發模式或框架。例如PHP有thinkphp,java有spring等。
透過狀態(資料來源)集中管理驅動元件的變化(好比spring的IOC容器對bean進行集中管理)。

應用程式級的狀態集中放在store中;改變狀態的方式是提交mutations,這是個同步的事物;非同步邏輯應該封裝在action中。

vue-loader是什麼?使用它的用途有哪些?

解析.vue檔案的一個載入器,跟template/js/style轉換成js模組。

用途:js可以寫es6、style樣式可以scss或less、template可以加jade等

請說出vue.cli專案中src目錄每個資料夾和檔案的用法?

assets資料夾是放靜態資源;components是放元件;router是定義路由相關的設定;view視圖;app.vue是一個應用主元件;main.js是入口檔案

vue. cli中怎樣使用自訂的組件?有遇到過哪些問題嗎?

第一步:在components目錄新建你的元件檔案(smithButton.vue),script一定要export default {

第二步:在需要用的頁面(元件)中匯入:import smithButton from '../components/smithButton.vue'

第三步:注入到vue的子組件的components屬性上面,components:{smithButton}

第四步:在template視圖view中使用,
問題有:smithButton命名,使用的時候則smith-button。

聊聊你對Vue.js的template編譯的理解?

簡而言之,就是先轉換成AST樹,再得到的render函數回傳VNode(Vue的虛擬DOM節點)

##詳情步驟:

首先,透過compile編譯器把template編譯成AST語法樹(abstract syntax tree 即原始碼的抽象語法結構的樹狀表現形式),compile是createCompiler的回傳值,createCompiler是用以創建編譯器的。另外compile也負責合併option。

然後,AST會經過generate(將AST語法樹轉換成render funtion字串的過程)得到render函數,render的回傳值是VNode,VNode是Vue的虛擬DOM節點,裡面有(標籤名、子節點、文字等等)

vue的歷史記錄

#history 記錄中向前或後退多少步驟

vuejs與angularjs以及react的差別?

1.與AngularJS的差異

相同點:

都支援指令:內建指令和自訂指令。

都支援過濾器:內建過濾器和自訂過濾器。

都支援雙向資料綁定。

都不支援低階瀏覽器。

不同點:

1.AngularJS的學習成本高,例如增加了Dependency Injection特性,而Vue.js本身提供的API都比較簡單、直覺。

2.在效能上,AngularJS依賴對資料做髒檢查,所以Watcher越多越慢。

Vue.js使用基於依賴追蹤的觀察值並且使用非同步佇列更新。所有的數據都是獨立觸發的。

對於龐大的應用來說,這個最佳化差異還是比較明顯的。

2.與React的區別

相同點:

React採用特殊的JSX語法,Vue.js在元件開發中也推崇編寫.vue特殊檔案格式,對文件內容都有一些約定,兩者都需要編譯後再使用。

中心思想相同:一切都是元件,元件實例之間可以嵌套。

都提供合理的鉤子函數,可以讓開發者客製化地去處理需求。

都不內建列數AJAX,Route等功能到核心包,而是以插件的方式載入。

在元件開發中都支援mixins的特性。

不同點:

React依賴Virtual DOM,而Vue.js使用的是DOM模板。 React採用的Virtual DOM會對渲染出來的結果做髒檢查。

Vue.js在範本中提供了指令,過濾器等,可以非常方便,快速地操作DOM。

vue生命週期面試題

#什麼是vue生命週期?

Vue 實例從創建到銷毀的過程,就是生命週期。也就是從開始建立、初始化資料、編譯模板、掛載Dom→渲染、更新→渲染、卸載等一系列過程,我們稱這是 Vue 的生命週期。

vue生命週期的作用是什麼?

它的生命週期中有多個事件鉤子,讓我們在控制整個Vue實例的過程時更容易形成好的邏輯。

vue生命週期總共有幾個階段?

它可以總共分為8個階段:建立前/後, 載入前/後,更新前/後,銷毀前/銷毀後

第一次頁面載入會觸發哪幾個鉤子?

第一次頁面載入時會觸發 beforeCreate, created, beforeMount, mounted 這幾個鉤子

DOM 渲染在 哪個週期就已經完成?

DOM 渲染在 mounted 中就已經完成了

#簡單描述每個週期具體適合哪些場景?

生命週期鉤子的一些使用方法: beforecreate : 可以在這加個loading事件,在載入實例時觸發created : 初始化完成時的事件寫在這裡,如在這結束loading事件,非同步請求也適宜在這裡呼叫mounted : 掛載元素,取得到DOM節點updated : 如果對資料統一處理,在這裡寫上對應函數beforeDestroy : 可以做一個確認停止事件的確認框nextTick : 更新資料後立即操作dom

arguments是一個偽數組,沒有遍歷接口,不能遍歷

cancas和SVG的是什麼以及區別

SVG

SVG 是一種使用XML 來描述2D 圖形的語言。
SVG 是基於 XML,這意味著 SVG DOM 中的每個元素都是可用的。您可以為某個元素附加 JavaScript 事件處理器。
在 SVG 中,每個被繪製的圖形被視為物件。如果 SVG 物件的屬性發生變化,那麼瀏覽器能夠自動重現圖形。

Canvas

Canvas 透過 JavaScript 來繪製 2D 圖形。
Canvas 是逐像素進行渲染的。
在 canvas 中,一旦圖形被繪製完成,它就不會繼續得到瀏覽器的關注。如果其位置發生變化,那麼整個場景也需要重新繪製,包括任何或許已被圖形覆蓋的物件。

Canvas 與SVG 的比較

Canvas

#依賴解析度
不支援事件處理器
弱的文字渲染能力
能夠以.png 或.jpg 格式儲存結果圖片
最適合圖片密集的遊戲,其中的許多物件會被頻繁重繪

SVG

不依賴解析度
支援事件處理器
最適合具有大型渲染區域的應用程式(例如Google地圖)
複雜度高會減慢渲染速度(任何過度使用DOM 的應用程式都不快)
不適合遊戲應用

相信看了本文案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!

推薦閱讀:

nodejs mysql怎麼操作資料庫

如何使用webpack vue環境區域網路

#

以上是vue底層原理與元件通信的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
從C/C到JavaScript:所有工作方式從C/C到JavaScript:所有工作方式Apr 14, 2025 am 12:05 AM

從C/C 轉向JavaScript需要適應動態類型、垃圾回收和異步編程等特點。 1)C/C 是靜態類型語言,需手動管理內存,而JavaScript是動態類型,垃圾回收自動處理。 2)C/C 需編譯成機器碼,JavaScript則為解釋型語言。 3)JavaScript引入閉包、原型鍊和Promise等概念,增強了靈活性和異步編程能力。

JavaScript引擎:比較實施JavaScript引擎:比較實施Apr 13, 2025 am 12:05 AM

不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。

超越瀏覽器:現實世界中的JavaScript超越瀏覽器:現實世界中的JavaScriptApr 12, 2025 am 12:06 AM

JavaScript在現實世界中的應用包括服務器端編程、移動應用開發和物聯網控制:1.通過Node.js實現服務器端編程,適用於高並發請求處理。 2.通過ReactNative進行移動應用開發,支持跨平台部署。 3.通過Johnny-Five庫用於物聯網設備控制,適用於硬件交互。

使用Next.js(後端集成)構建多租戶SaaS應用程序使用Next.js(後端集成)構建多租戶SaaS應用程序Apr 11, 2025 am 08:23 AM

我使用您的日常技術工具構建了功能性的多租戶SaaS應用程序(一個Edtech應用程序),您可以做同樣的事情。 首先,什麼是多租戶SaaS應用程序? 多租戶SaaS應用程序可讓您從唱歌中為多個客戶提供服務

如何使用Next.js(前端集成)構建多租戶SaaS應用程序如何使用Next.js(前端集成)構建多租戶SaaS應用程序Apr 11, 2025 am 08:22 AM

本文展示了與許可證確保的後端的前端集成,並使用Next.js構建功能性Edtech SaaS應用程序。 前端獲取用戶權限以控制UI的可見性並確保API要求遵守角色庫

JavaScript:探索網絡語言的多功能性JavaScript:探索網絡語言的多功能性Apr 11, 2025 am 12:01 AM

JavaScript是現代Web開發的核心語言,因其多樣性和靈活性而廣泛應用。 1)前端開發:通過DOM操作和現代框架(如React、Vue.js、Angular)構建動態網頁和單頁面應用。 2)服務器端開發:Node.js利用非阻塞I/O模型處理高並發和實時應用。 3)移動和桌面應用開發:通過ReactNative和Electron實現跨平台開發,提高開發效率。

JavaScript的演變:當前的趨勢和未來前景JavaScript的演變:當前的趨勢和未來前景Apr 10, 2025 am 09:33 AM

JavaScript的最新趨勢包括TypeScript的崛起、現代框架和庫的流行以及WebAssembly的應用。未來前景涵蓋更強大的類型系統、服務器端JavaScript的發展、人工智能和機器學習的擴展以及物聯網和邊緣計算的潛力。

神秘的JavaScript:它的作用以及為什麼重要神秘的JavaScript:它的作用以及為什麼重要Apr 09, 2025 am 12:07 AM

JavaScript是現代Web開發的基石,它的主要功能包括事件驅動編程、動態內容生成和異步編程。 1)事件驅動編程允許網頁根據用戶操作動態變化。 2)動態內容生成使得頁面內容可以根據條件調整。 3)異步編程確保用戶界面不被阻塞。 JavaScript廣泛應用於網頁交互、單頁面應用和服務器端開發,極大地提升了用戶體驗和跨平台開發的靈活性。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中