常見考題
• 實體屬性基礎
• 指令 directives
• 生命週期 lifecycle
• 元件間的參數傳遞
• Vue 與實體 DOM 的操作
• Composition API (vue3 新增)
________________________________________
Q1:
難度:
為什麼 Vue 實體內的 data 屬性必須要是 function 的形式回傳?
能不能使用 Arrow function ? 為什麼?
```
```
________________________________________
Q2:
難度:
下面這段程式碼是否能正確執行? 如果不行請說明為什麼。
const vm = Vue.createApp({
data () {
return {
$hello: "Hello Vue.js!"
}
}
}).mount('#app');
________________________________________
Q3:
難度:
下面這段程式碼是否能正確執行? 如果不行請說明為什麼。
const vm = Vue.createApp({
template: `<div>{{ greeting }}</div> <div>好棒棒!</div>`,
data () {
return {
greeting: "Hello Vue.js!"
}
}
});
vm.mount('#app');
________________________________________
Q4:
難度:
Vue 實體中, computed 、 methods 以及 watch 之間的差異?
它們分別有什麼特性? 簡單說明什麼時候該用哪個。
________________________________________
Q5:
難度:
試著說明 computed 屬性中, get 與 set 兩個 function 的作用,
以及何時會需要用到它們。
________________________________________
Q6:
難度:
請簡單說明 v-text 與 {{ }} 的差別,如:
<div v-text="text">Hello</div>
<div>{{ text }}</div>
________________________________________
Q7:
難度:
請說明 v-model 的作用,以及背後執行的原理。
________________________________________
Q8
難度:
下面這段程式碼是否能正確執行? 如果不行請說明為什麼,並說明怎麼修改
<transition-group tag="div" name="slide">
<div v-for="(i, idx) in imgList" v-if="idx === currIdx" :key="i">
<img :src="i">
</div>
</transition>
________________________________________
Q9:
難度:
分別說明 Vue v-on 事件處理中,下列修飾子的作用以及適用時機:
• .stop
• .prevent
• .capture
• .self
• .once
• .passive
________________________________________
Q10:
難度:
簡單說明 v-if 與 key 之間的關係,不加上 key 是否會有問題?
如果將 v-for 提供的 index 當作 key 屬性來使用是否 ok ?
________________________________________
Q11 (Vue2.x 限定)
難度:
間單說明 Vue.$set() 或 this.$set() 的作用?
以及什麼時候需要使用這個方法。
________________________________________
Q12
難度:
若我們想在 Vue 實體建立時就 fetch 外部資料,
會選擇在哪個生命週期 hook 呼叫 API ? 為什麼?
________________________________________
Q13
難度:
簡單說明 $nextTick 的作用,並寫出一個簡單範例 demo 什麼時候需要這個。
________________________________________
Q14 Props
難度:
請說明下列兩段程式碼有什麼不同?
<my-component class="className"></my-component>
<my-component :class="className"></my-component>
________________________________________
Q15 Props
難度:
請問下面這段程式碼出了什麼問題? 該如何修正:
const app = Vue.createApp({
data() {
return {
books: [
{
name: '0 陷阱!0 誤解!8 天重新認識 JavaScript!',
author: 'Kuro Hsu'
},
{
name: '008 天絕對看不完的Vue.js 3指南: 重新認識 Vue.js',
author: 'Kuro Hsu'
}
]
}
}
});
app.component('my-component', {
template: `<div class="child-app">
<div>書名: <input type="text" v-model="bookInfo.name"></div>
<div>作者: <input type="text" v-model="bookInfo.author"></div>
</div>`,
props: {
'bookInfo': {
type: Object
}
}
});
app.mount('#app');
________________________________________
Q16
難度:
已知有一列表物件如下,請實作一個樹狀選單:
const bookList = [{
name: 'Git',
childNodes: [{
name: '為你自己學 Git',
url: 'https://www.tenlong.com.tw/products/9789864342662'
}]
},
{
name: '前端開發',
childNodes: [{
name: '金魚都能懂的 CSS 選取器',
url: 'https://www.tenlong.com.tw/products/9789864344994'
},
{
name: '0 陷阱!0 誤解!8 天重新認識 JavaScript!',
url: 'https://www.tenlong.com.tw/products/9789864344130'
},
{
name: '讓 TypeScript 成為你全端開發的 ACE!',
url: 'https://www.tenlong.com.tw/products/9789864344895'
},
]
},
{
name: 'Chatbot',
childNodes: [{
name: '人人可作卡米狗:從零打造自己的 LINE 聊天機器人',
url: 'https://www.tenlong.com.tw/products/9789864342938'
}]
}
];
________________________________________
Q17
難度:
簡單實作一個範例來說明 Vue.js 裡 provide 與 inject 的作用。
________________________________________
Q18 動態元件
難度:
說明 is 屬性,以及 keep-alive 的作用。
________________________________________
Q19 (Vue 3.0 新增)
難度:
簡單說明 Vue Composition API 的特性,
並將這份範例程式以 Composition API 的形式改寫:
https://stackblitz.com/edit/vue-uvtycq?file=src/App.vue
完成版
https://stackblitz.com/edit/vue-ludm7s?file=src/App.vue