VUE04--{路由}

2018-08-13  本文已影响6人  MickeyMcneil

1.路由

    <!-- 1.引入路由文件 -->
    <script src="./lib/vue-router.js"></script>
</head>
<body>
    <div id="app">
        <!-- 7.设置跳转,router-link(渲染成a标签),to属性(渲染成href) -->
        <ul>
            <li><router-link to="/index">首页</router-link></li>
            <li><router-link to="/product">产品</router-link></li>
        </ul>
        <!-- 6.通过router-view挖坑,路径匹配的组件会渲染在坑里 -->
        <router-view></router-view>
    </div>
    <script>
        // 2.准备路由需要的组件
        var index = Vue.component("index", {
            template: `<div>我是首页</div>`
        })
        var product = Vue.component("product", {
            template: `<div>我是商品页</div>`
        })
        // 3.创建路由对象,在里面配置路由规则
        var router = new VueRouter({
            // 4.通过routes配置路由规则,routes(数组),其中放对象,每个对象包含name(路由规则的名称)/path(路径)/component(路径对应的组件)
            routes: [
                {name: 'index', path: '/index', component: index},
                {name: 'product', path: '/product', component: product}
            ]
        })
        var vm = new Vue({
            el: "#app",
            // 5.在vue实例中注入路由,这样整个应用就可以使用路由
            router: router,
        })
    </script>

注意
1.routes、routes、routes,防范拼写错误。

2.监听路由参数

    <div id="app">
        <!-- 设置跳转-->
        <ul>
            <li><router-link to="/index">首页</router-link></li>
            <li><router-link to="/product/233">产品</router-link></li>
            <li><router-link to="/product/244">产品</router-link></li>
            <li><router-link to="/product/255">产品</router-link></li>
        </ul>
        <!-- 挖坑渲染 -->
        <router-view></router-view>
    </div>
    <script>
        // 准备组件
        var index = Vue.component("index", {
            template: `<div>我是首页</div>`
        })
        var product = Vue.component("product", {
            template: `
                <div>
                    <div>我是商品页,商品编号是{{$route.params.id}}</div>
                    <p>{{allProduct}}</p>
                </div>
            `,
            data () {
                return {
                    allProduct: "",
                }
            },
            mounted () {
                // 2.在js中获取路由参数,通过this.$route.params.参数名
                console.log(this.$route.params.id);
                console.log(this.$route);
            },
            watch: {
                // 3.to表示你要去的路由对象,from表示你从哪个路由对象来
                "$route" (to, from) {
                    console.log(to);
                    console.log(from);
                    if (to.params.id === '233') {
                        this.allProduct = "233对应的商品";
                    } else if (to.params.id === '244') {
                        this.allProduct = "244对应的商品";
                    } else {
                        this.allProduct = "255对应的商品";
                    }
                }
            }
        })
        // 创建路由对象
        var router = new VueRouter({
            // 配置路由规则
            routes: [
                {name: 'index', path: '/index', component: index},
                // 1.路由加参数的方法 :参数名
                {name: 'product', path: '/product/:id', component: product}
            ]
        })
        var vm = new Vue({
            el: "#app",
            // 实例注入
            router: router,
        })
    </script>

3.嵌套路由、编程式导航

    <div id="app">
        <!-- 设置跳转-->
        <div>
            <router-link to="/product">产品</router-link>
        </div>
        <!-- 挖坑渲染 -->
        <router-view></router-view>
    </div>
    <script>
        // 2.准备子路由组件
        var toys = Vue.component("toys", {
            template: `<div>我是玩具</div>`
        })
        var product = Vue.component("product", {
            // 3.给子路由挖坑
            template: `
                <div>
                    <div>我是商品页</div>
                    <button @click="jumpTo">查看</button>
                    <router-view></router-view>
                </div>
            `,
            methods: {
                jumpTo() {
                    // 4.使用子路由
                    this.$router.push({ name: "toys" });
                    console.log(this.$router);
                }
            },
        })
        // 创建路由对象
        var router = new VueRouter({
            // 配置路由规则
            routes: [
                {
                    name: 'product', path: '/product/', component: product,
                    // 1.定义子路由
                    children: [
                        { name: 'toys', path: '/toys', component: toys }
                    ]
                }
            ]
        })
        var vm = new Vue({
            el: "#app",
            // 实例注入
            router: router,
        })
    </script>

4.路由重定向

    <div id="app">
        <!-- 设置跳转-->
        <div>
            <router-link to="/product">产品</router-link>
        </div>
        <!-- 挖坑渲染 -->
        <router-view></router-view>
    </div>
    <script>
        var product = Vue.component("product", {
            template: `
                <div>
                   我是商品页
                </div>
            `,
        })
        // 创建路由对象
        var router = new VueRouter({
            // 配置路由规则
            routes: [
                {name: 'product', path: '/product/', component: product},
                // 1.路由重定向
                {name: 'default', path: '*', redirect: '/product'},
            ]
        })
        var vm = new Vue({
            el: "#app",
            // 实例注入
            router: router,
        })
    </script>
上一篇下一篇

猜你喜欢

热点阅读