製作Vue元件
認識Vue元件
通常一個Vue元件分為三個部分
- template區塊(html) - 用來顯示render網頁的部分
- script區塊(js) - 用來撰寫預設的物件、傳進元件的值,或其他js等
- style區塊(css) - 用來調整此元件的CSS
例如:
Hello.vue
<!-- template區塊(html) -->
<template>
<div class="hello"> <!-- 注意: 這裡要跟元件同名 -->
<h1>{{ msg }}</h1>
</div>
</template>
<!-- script區塊(js) -->
<script>
export default {
name: 'hello', // 注意: 這裡要跟元件同名
data () {
return {
msg: 'Welcome to Your Vue.js App'
}
}
}
</script>
<!-- style區塊(css) -->
<style scoped>
h1 {
font-family: '微軟正黑體'
}
</style>
這邊要注意的是,在『template區塊』中,元件的名稱會被寫在<div>
的class中,如<div class="hello">
,而在『script區塊』中,元件名稱也會綁定在name,如:name: 'hello'
,如此一來此元件才能正確運作。
修改及新增元件
- 目標
- 建立兩個元件: home 及 blog
- 建立一個導覽列: home 和 blog 兩個超連結,分別連至兩個元件顯示
步驟
到 src/index.js
import Home from '@/components/Home' //前後的 Hello 都改成 Home
routes: [ { path: '/', name: 'Home', //'Hello' 改成 'Home' component: Home //Hello 改成 Home }, ]
更名 src/components/Hello.vue 改為 src/components/Home.vue
到 src/components/Home.vue
<template> <div class="home"> <!-- "hello" 改為 "home" --> <h1></h1> </div> </template>
export default { name: 'home', //'hello' 改為 'home' data () { return { msg: 'Welcome to Your Vue.js App' } } }
這時候首頁應該又可以正常顯示了,這樣就把元件改為home了 接下來我們再新增一個blog的元件,從src/components/Home.vue複製到src/components/Blog.vue,然後我們調整裡面的文字顯示
export default { name: 'blog', data () { return { msg: 'Hello this is blog' //改成這樣 } } }
再到src/index.js把import補上
import Blog from '@/components/Blog'
然後我們在router新增一個/blog的連結
export default new Router({ routes: [ { path: '/', name: 'Home', component: Home }, { path: '/blog', name: 'Blog', component: Blog } ] })
接下來到一開始template生成的地方,也就是App.vue,加上導覽列
<template> <div id="app"> <!--加入導覽列 start--> <nav> <router-link to="/">Home</router-link> <!--router設定的連結都使用router-link來連--> <router-link to="/blog">blog</router-link> </nav> <!--加入導覽列 end--> <router-view></router-view> <!--router顯示的地方--> </div> </template>
如果寫過rails或laravel的人,這樣應該比較好理解:
<router-view></router-view>
相當於 rails 中的<%= yield %>
<router-view></router-view>
相當於 laravel 中的@yield('content')
現在首頁就有兩個按鈕的導覽列,按下去可以分別前往home及blog,並會在router-view中顯示不同頁面(文字)