1. 程式人生 > >Vue路由巢狀

Vue路由巢狀

<!DOCTYPE html>
<html lang="en">
  <head>
    <title></title>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <script src="./vue.js"></script>
    <!-- 1. 先引入vue-router檔案 -->
    <
script
src="./vue-router.js">
</script> <script src="./axios.js"></script> <style> ul.myul { display: flex; } li.navitem { list-style-type: none; padding: 0 20px; } .product { border: 1px solid blueviolet; }
.index { border: 1px solid pink; } .cookbook { border: 1px solid black; }
</style> </head> <body> <div id="app"> <ul class="myul"> <li class="navitem"><router-link to="/home">首頁</router-link>
</li> <li class="navitem"><router-link to="/product/11">蔬菜</router-link></li> <li class="navitem"><router-link to="/product/22">水果</router-link></li> <li class="navitem"><router-link to="/product/33">肉類</router-link></li> </ul> <router-view></router-view> </div> <script> let myhome = Vue.component('home', { template: '<div class="index">這是首頁</div>' }) let myproduct = Vue.component('product', { template: ` <div class="product"> <p>這是商品分類,該分類的編號是{{$route.params.cid}}</p> <ul> <li v-for="(item, index) in products" :key="index">{{item}}</li> </ul> <button @click='viewbook'>檢視菜譜</button> <router-view></router-view> </div> `, data () { return { products: [] } }, methods: { viewbook() { // 跳轉到菜譜對應的路由規則,注意這裡是$router⭐,這就是程式設計式導航,就是js實現的路由跳轉 this.$router.push({name: 'book'}) } }, watch: { '$route': { handler(to, from) { let cid = to.params.cid console.log(cid); axios.get(`http://192.168.75.84:3000/list/${cid}`) .then(res => { this.products = res.data.products }) }, immediate: true } } }) // 菜譜元件 let cookbook = Vue.component('book', { template: '<div class="cookbook">青椒炒肉/土豆燉牛肉/清水白菜。。。。。</div>' }) let router = new VueRouter({ routes: [ {name: 'index', path: '/home', component: myhome}, // 1. 定義子路由通過children屬性設定,children屬性就是一個一個的物件,物件中也是name/path/component {name: 'productCate', path: '/product/:cid', component: myproduct, children: [ // 在子路由中,path屬性不能加 / {name: 'book', path: 'cook', component: cookbook} ] }, // path: '*' 表示如果匹配不到上面的路由規則,那麼剩下的所有路由規則都走下面這條規則(預設首頁),redirect表示重定向 {name: 'default', path: '*', redirect: {name: 'index'}} ] }) var vm = new Vue({ el: '#app', router, data: { } }) </script> </body> </html>

加個小總結

在這裡插入圖片描述