antd vue 树更新数据后不展开_很全面的vue面试题总结
VUE面試題
v-show 與 v-if 區別
綁定 class 的數組用法
- 對象方法 v-bind:class="{'orange': isRipe, 'green': isNotRipe}"
- 數組方法 v-bind:class="[class1, class2]"
- 行內 v-bind:style="{color: color, fontSize: fontSize+'px' }"
計算屬性和 watch 的區別
計算屬性是自動監聽依賴值的變化,從而動態返回內容,監聽是一個過程,在監聽的值變化時,可以觸發一個回調,并做一些事情。 所以區別來源于用法,只是需要動態值,那就用計算屬性;需要知道值的改變后執行業務邏輯,才用 watch,用反或混用雖然可行,但都是不正確的用法。
說出一下區別會加分
computed 是一個對象時,它有哪些選項? computed 和 methods 有什么區別? computed 是否能依賴其它組件的數據? watch 是一個對象時,它有哪些選項?
handler deep 是否深度 immeditate 是否立即執行
總結
當有一些數據需要隨著另外一些數據變化時,建議使用computed。 當有一個通用的響應數據變化的時候,要執行一些業務邏輯或異步操作的時候建議使用watcher
事件修飾符
- 綁定一個原生的click事件, 加native,
- 其他事件修飾符
- stop prevent self
- 組合鍵 click.ctrl.exact 只有ctrl被按下的時候才觸發
組件中 data 為什么是函數
為什么組件中的 data 必須是一個函數,然后 return 一個對象,而 new Vue 實例里,data 可以直接是一個對象?因為組件是用來復用的,JS 里對象是引用關系,這樣作用域沒有隔離,而 new Vue 的實例,是不會被復用的,因此不存在引用對象的問題。
keep-alive
http://cn.vuejs.org/v2/guide/co…
自定義組件的語法糖 v-model 是怎樣實現的
http://www.cnblogs.com/attacking-c…
根據官方文檔介紹,v-model本質上就是語法糖,即利用v-model綁定數據后,其實就是既綁定了數據,又添加了一個input事件監聽,如下:
怎樣理解單向數據流
這個概念出現在組件通信。父組件是通過 prop 把數據傳遞到子組件的,但是這個 prop 只能由父組件修改,子組件不能修改,否則會報錯。子組件想修改時,只能通過 $emit 派發一個自定義事件,父組件接收到后,由父組件修改。 一般來說,對于子組件想要更改父組件狀態的場景,可以有兩種方案: 在子組件的 data 中拷貝一份 prop,data 是可以修改的,但 prop 不能:
export default {props: {value: String},data () {return {currentValue: this.value}} } 復制代碼如果是對 prop 值的轉換,可以使用計算屬性:
export default {props: ['size'],computed: {normalizedSize: function () {return this.size.trim().toLowerCase();}} } 復制代碼生命周期
- 創建前后 beforeCreate/created
- 在beforeCreate 階段,vue實例的掛載元素el和數據對象data都為undefined,還未初始化。在created階段,vue實例的數據對象有了,el還沒有。
- 載入前后 beforeMount/mounted
- 在beforeMount階段,vue實例的$el和data都初始化了,但還是掛載之前未虛擬的DOM節點,data尚未替換。 在mounted階段,vue實例掛載完成,data成功渲染。
- 更新前后 beforeUpdate/updated
- 當data變化時,會觸發beforeUpdate和updated方法。這兩個不常用,不推薦使用。
- 銷毀前后beforeDestory/destoryed
- beforeDestory是在vue實例銷毀前觸發,一般在這里要通過removeEventListener解除手動綁定的事件。實例銷毀后,觸發的destroyed。
組件間的通信
路由的跳轉方式
一般有兩種
Vue.js 2.x 雙向綁定原理
這個問題幾乎是面試必問的,回答也是有深有淺。基本上要知道核心的 API 是通過 Object.defineProperty() 來劫持各個屬性的setter / getter,在數據變動時發布消息給訂閱者,觸發相應的監聽回調,這也是為什么 Vue.js 2.x 不支持 IE8 的原因(IE 8 不支持此 API,且無法通過 polyfill 實現)。 http://cn.vuejs.org/v2/guide/re…
什么是 MVVM,與 MVC 有什么區別
http://www.ruanyifeng.com/blog/2015/0…
nextTick()
在下次 DOM 更新循環結束之后執行延遲回調。在修改數據之后,立即使用這個回調函數,獲取更新后的 DOM。
// 修改數據 vm.msg = 'Hello' // DOM 還未更新 Vue.nextTick(function () {// DOM 更新 }) 復制代碼vue的原理
http://segmentfault.com/a/119000001…
我們可以做到數據的雙向綁定:
var obj = {}; Object.defineProperty(obj,'hello',{get:function(){//我們在這里攔截到了數據console.log("get方法被調用");},set:function(newValue){//改變數據的值,攔截下來額console.log("set方法被調用");document.getElementById('test').value = newValue;document.getElementById('test1').innerHTML = newValue;} }); //obj.hello; //obj.hello = '123'; document.getElementById('test').addEventListener('input',function(e){obj.hello = e.target.value;//觸發它的set方法 }) 復制代碼理解Vue中的Render渲染函數
http://www.cnblogs.com/tugenhua070…
VUE一般使用template來創建HTML,然后在有的時候,我們需要使用javascript來創建html,這時候我們需要使用render函數。
render函數return一個createElement組件中的子元素存儲在組件實列中 $slots.default 中。
return createElement('h1', this.title); createElement返回的是包含的信息會告訴VUE頁面上需要渲染什么樣的節點及其子節點。我們稱這樣的節點為虛擬DOM,可以簡寫為VNode。
createElement 參數
{String | Object | Function} 復制代碼一個HTML標簽字符串,組件選項對象,或者一個返回值類型為String/Object的函數。該參數是 必須的
子節點
子節點,可選,String 或 Array
Vue.component('anchored-heading', {render: function (createElement) {return createElement('h' + this.level, // 標簽名稱this.$slots.default // 由子節點構成的數組)},props: {level: {type: Number,required: true}} }) 復制代碼slot插槽
http://www.jianshu.com/p/31674b727…
http://vue.docschina.org/v2/guide/co…
單個插槽
當子組件模板只有一個沒有屬性的插槽時,父組件傳入的整個內容片段將插入到插槽所在的 DOM 位置,并替換掉插槽標簽本身。
最初在 標簽中的任何內容都被視為備用內容。備用內容在子組件的作用域內編譯,并且只有在宿主元素為空,且沒有要插入的內容時才顯示備用內容。
命名插槽
solt元素可以用一個特殊的特性name來進一步配置如何分發內容。多個插槽可以有不同的名字。 這樣可以將父組件模板中 slot 位置,和子組件 slot 元素產生關聯,便于插槽內容對應傳遞
作用域插槽scoped slots
可以訪問組件內部數據的可復用插槽(reusable slot) 在父級中,具有特殊特性 slot-scope 的<template> 元素必須存在,表示它是作用域插槽的模板。slot-scope 的值將被用作一個臨時變量名,此變量接收從子組件傳遞過來的 prop 對象。
如果喜歡,給個贊啦~
總結
以上是生活随笔為你收集整理的antd vue 树更新数据后不展开_很全面的vue面试题总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: webpack devserver配置_
- 下一篇: python coding_Python