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

vue底層原理與元件通信

Jun 15, 2018 pm 02:16 PM

這次帶給大家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 id="app"> 
  <!-- 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> 
    <h3>首页</h3> 
    <router-link to="/home/game"> 
      <button>显示<tton> 
    </router-link> 
    <router-view></router-view> 
  </p> 
</template>
登入後複製

game.vue

 <template> 
  <h3>游戏</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

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

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何創建和發布自己的JavaScript庫? 如何創建和發布自己的JavaScript庫? Mar 18, 2025 pm 03:12 PM

文章討論了創建,發布和維護JavaScript庫,專注於計劃,開發,測試,文檔和促銷策略。

如何在瀏覽器中優化JavaScript代碼以進行性能? 如何在瀏覽器中優化JavaScript代碼以進行性能? Mar 18, 2025 pm 03:14 PM

本文討論了在瀏覽器中優化JavaScript性能的策略,重點是減少執行時間並最大程度地減少對頁面負載速度的影響。

前端熱敏紙小票打印遇到亂碼問題怎麼辦? 前端熱敏紙小票打印遇到亂碼問題怎麼辦? Apr 04, 2025 pm 02:42 PM

前端熱敏紙小票打印的常見問題與解決方案在前端開發中,小票打印是一個常見的需求。然而,很多開發者在實...

如何使用瀏覽器開發人員工具有效調試JavaScript代碼? 如何使用瀏覽器開發人員工具有效調試JavaScript代碼? Mar 18, 2025 pm 03:16 PM

本文討論了使用瀏覽器開發人員工具的有效JavaScript調試,專注於設置斷點,使用控制台和分析性能。

如何使用源地圖調試縮小JavaScript代碼? 如何使用源地圖調試縮小JavaScript代碼? Mar 18, 2025 pm 03:17 PM

本文說明瞭如何使用源地圖通過將其映射回原始代碼來調試JAVASCRIPT。它討論了啟用源地圖,設置斷點以及使用Chrome DevTools和WebPack之類的工具。

誰得到更多的Python或JavaScript? 誰得到更多的Python或JavaScript? Apr 04, 2025 am 12:09 AM

Python和JavaScript開發者的薪資沒有絕對的高低,具體取決於技能和行業需求。 1.Python在數據科學和機器學習領域可能薪資更高。 2.JavaScript在前端和全棧開發中需求大,薪資也可觀。 3.影響因素包括經驗、地理位置、公司規模和特定技能。

開始使用Chart.js:PIE,DONUT和BUBBLE圖表 開始使用Chart.js:PIE,DONUT和BUBBLE圖表 Mar 15, 2025 am 09:19 AM

本教程將介紹如何使用 Chart.js 創建餅圖、環形圖和氣泡圖。此前,我們已學習了 Chart.js 的四種圖表類型:折線圖和條形圖(教程二),以及雷達圖和極地區域圖(教程三)。 創建餅圖和環形圖 餅圖和環形圖非常適合展示某個整體被劃分為不同部分的比例。例如,可以使用餅圖展示野生動物園中雄獅、雌獅和幼獅的百分比,或不同候選人在選舉中獲得的投票百分比。 餅圖僅適用於比較單個參數或數據集。需要注意的是,餅圖無法繪製值為零的實體,因為餅圖中扇形的角度取決於數據點的數值大小。這意味著任何占比為零的實體

初學者的打字稿,第2部分:基本數據類型 初學者的打字稿,第2部分:基本數據類型 Mar 19, 2025 am 09:10 AM

掌握了入門級TypeScript教程後,您應該能夠在支持TypeScript的IDE中編寫自己的代碼,並將其編譯成JavaScript。本教程將深入探討TypeScript中各種數據類型。 JavaScript擁有七種數據類型:Null、Undefined、Boolean、Number、String、Symbol(ES6引入)和Object。 TypeScript在此基礎上定義了更多類型,本教程將詳細介紹所有這些類型。 Null數據類型 與JavaScript一樣,TypeScript中的null

See all articles