前端vue面試題個人總結


1、介紹Vue中的常用的指令

  • v-bind 綁定屬性機制,可以簡寫為:
    • 對象方法 v-bind:class="{'orange': isRipe, 'green': isNotRipe}"
    • 數組方法v-bind:class="[class1, class2]"
    • 行內 v-bind:style="{color: color, fontSize: fontSize+'px' }"
  • v-on 綁定事件機制,可以簡寫為@
  • v-for
  • v-html 以html標簽形式顯示
  • v-text 可以簡寫為{{}}
  • v-if
  • v-show
  • v-model 雙向數據綁定

2、vue中常用的事件修飾符

  • .prevent: 阻止默認事件;如:v-on:submit.prevent阻止默認事件;
  • .stop: 阻止單擊事件冒泡;如:v-on:click.stop阻止事件冒泡;
  • .self: 當事件發生在該元素本身而不是子元素的時候會觸發;
  • .capture: 事件偵聽,事件發生的時候會調用
  • .once 事件只觸發一次

3、談談你對MVVM開發模式的理解

  • MVVM分為Model、View、ViewModel三者。
  • Model 代表數據模型,數據和業務邏輯都在Model層中定義;
  • View 代表UI視圖,負責數據的展示;
  • ViewModel 負責監聽 Model 中數據的改變並且控制視圖的更新,處理用戶交互操作;
  • Model 和 View 並無直接關聯,而是通過 ViewModel 來進行聯系的,Model 和 ViewModel 之間有着雙向數據綁定的聯系。因此當 Model 中的數據改變時會觸發 View 層的刷新,View 中由於用戶交互操作而改變的數據也會在 Model 中同步。
  • 這種模式實現了 Model 和 View 的數據自動同步,因此開發者只需要專注對數據的維護操作即可,而不需要自己操作 DOM。

4、 v-if 和 v-show 有什么區別?

  • v-show

    • v-show是css切換,頻繁切換時用v-show,

    • v-show 僅僅控制元素的顯示方式,將 display 屬性在 block 和 none 來回切換;

    • 當我們需要經常切換某個元素的顯示/隱藏時,使用v-show會更加節省性能上的開銷;

    • v-show對應的值無論是true還是false,對應HTML元素都會存在於瀏覽器的文檔中;

  • v-if

    • v-if=‘false’ v-if是條件渲染,當false的時候不會渲染,

    • v-if是完整的銷毀和重新創建,運行時較少改變時用v-if,而v-if會控制這個 DOM 節點的存在與否。

    • 當只需要一次顯示或隱藏時,使用v-if更加合理。

    • v-if如果是false的話,對應HTML元素直接不在瀏覽器的文檔中了。

5、請詳細說你對vue生命周期的理解?

  • 總共分為8個階段創建前/后,載入前/后,更新前/后,銷毀前/后。
    • beforeCreate----創建前 組件實例更被創建,組件屬性計算之前,數據對象data都為undefined,未初始化。
    • created----創建后 組件實例創建完成,屬性已經綁定,數據對象data已存在,但dom未生成,$el未存在
    • beforeMount---掛載前 vue實例的$el和data都已初始化,掛載之前為虛擬的dom節點,data.message未替換
    • mounted-----掛載后 vue實例掛載完成,data.message成功渲染。
    • beforeUpdate----更新前 當data變化時,會觸發beforeUpdate方法
    • updated----更新后 當data變化時,會觸發updated方法
    • beforeDestory---銷毀前 組件銷毀之前調用
    • destoryed---銷毀后 組件銷毀之后調用,對data的改變不會再觸發周期函數,vue實例已解除事件監聽和dom綁定,但dom結構依然存在

7、vue中<keep-alive>的作用;active-class是哪個組件的屬性?

  • 把切換出去的組件保留在緩存中,可以保留組件的狀態或者避免重新渲染。
  • active-class是vue-router模塊的router-link組件的屬性。

8、計算屬性及和 watch 、methods的區別

  • computed看上去是方法,但是實際上是計算屬性,它會根據你所依賴的數據動態顯示新的計算結果。計算結果會被緩存,computed的值在getter執行后是會緩存的,只有在它依賴的屬性值改變之后,下一次獲取computed的值時才會重新調用對應的getter來計算,

    • computed可以依賴其他computed,甚至是其他組件的data;
    • 依賴於數據,數據更新,處理結果自動更新;
    • 計算屬性內部this指向vm實例;
    • 在組件調用時,直接寫計算屬性名即可;
    • 有get和set兩個選項,常用的是getter方法,獲取數據,也可以使用setter方法改變數據;
  • watch 更像是一個 data 的數據監聽回調,當依賴的 data 的數據變化,執行回調,在方法中會傳入 newVal 和 oldVal。Vue 實例將會在實例化時調用 $watch(),遍歷 watch 對象的每一個屬性。如果你需要在某個數據變化時做一些事情,使用watch。

  • 相較於methods,不管依賴的數據變不變,methods都會重新計算,但是依賴數據不變的時候computed從緩存中獲取,不會重新計算,methods不會。methods是一個方法,它可以接受參數,而computed不能。

10、父子組件之間的傳值通信?

  • 父組件向子組件傳值:

  • 子組件在props中創建一個屬性,用來接收父組件傳過來的值;

  • 在父組件中注冊子組件;

  • 在子組件標簽中添加子組件props中創建的屬性;

  • 把需要傳給子組件的值賦給該屬性

  • 子組件向父組件傳值:

  • 子組件中需要以某種方式(如點擊事件)的方法來觸發一個自定義的事件;

  • 將需要傳的值作為$emit的第二個參數,該值將作為實參傳給響應事件的方法;

  • 在父組件中注冊子組件並在子組件標簽上綁定自定義事件的監聽。

12、非父子組件之間的通信

常用的方法有 EventBus 和 Vuex

  • EventBus 實現非父子組件通信的原理是:

    • 通過實例化一個Vue對象( 比如bus = new Vue() )作為母線,在組件中通過事件將參數傳遞出去( bus.$emit(event, [...args]) ),
    • 然后在其他組件中再通過bus來監聽此事件並接受參數( bus.$on(event, callback) )。
  • Vuex 是什么:

    • Vuex是一個專為Vue.js應用程序開發的狀態管理模式。采用集中式存儲管理應用的所有組件的狀態

    • Vuex是一個狀態管理的插件,可以解決不同組件之間的數據共享和數據持久化。

    • Vuex的用法


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM