Your browser does not support the Canvas element.

VUE 之 路由 VueRouter

1、VueRouter的安装

  1.1、https://unpkg.com/vue-router/dist/vue-router.js下载安装。

  1.2、<script src="./static/vue-router.js"></script>

2、VueRouter的使用

  我们在使用Vue中的属性十,都可以通过$属性名拿到它所对应的对象

  $route  拿到的是一个object对象,里边有所有的信息

  $router 拿到的是一个VueRouter实例化的对象,里边有VueRouter的所有方法。

<script>
        // 1. 在Vue根实例中使用,VueRouter
        Vue.use(VueRouter);

        let Home = {
            template: `
                <div>
                    <h1>这是主页页面</h1>
                </div>
            `
        };

        let Login = {
            template: `
                <div>
                    <h1>这是登录页面</h1>
                </div>
            `
        };

        let Register = {
            template: `
                <div>
                    <h1>这是注册页面</h1>
                </div>
            `
        };

        let App = {
            // 第四步
            // router-link会渲染成a标签,to会变成href属性,to后面是router中定义的路径
            // 第五步
            // router-view是页面内容的渲染出口
            template: `
                <div>
                    <router-link to="/">首页</router-link>
                    <router-link to="/login">登录</router-link>
                    <router-link to="/register">注册</router-link>
  
                    <router-view></router-view>
                </div>
            `,

        };

        // 2. 第二步实例化一个router对象
        // 本质上是将路径和页面内容绑定了对应关系
        let router = new VueRouter({
            routes: [
                {
                    path: '/',
                    component: Home,
                },
                {
                    path: '/login',
                    component: Login,
                },
                {
                    path: '/register',
                    component: Register,
                }
            ]
        });

        new Vue({
            el: "#app",
            template: `<App/>`,
            // 第三步,在根实例中注册router对象
            router: router,        #  固定写法router
            components: {
                App,
            }
        });
    </script>

3、VueRouter的路由命名

template: `
                <div>
                    <router-link :to="{ name: 'home' }">首页</router-link>
                    <router-link :to="{ name: 'login' }">登录</router-link>
                    <router-link :to="{ name: 'register' }">注册</router-link>

                    <router-view></router-view>
                </div>
            `,
        };

# 在router-link中进行命名    :to='{name:'xx'}'
let router = new VueRouter({
routes: [
{
name: 'home',
path: '/',
component: Home,
},
{
name: 'login',
path: '/login',
component: Login,
},
{
name: 'register',
path: '/register',
component: Register,
}
]
});
 

4、VueRouter之参数

 template: `
                <div>
                    <router-link :to="{ name: 'home'}">首页</router-link>
                    <router-link :to="{ name: 'userParams', params: { userId: 1} }">登录</router-link>
                    <router-link :to="{ name: 'userQuery', query: { userId: 2 }  }">注册</router-link>

                    <router-view></router-view>
                </div>
            `,
        };

        // 2. 第二步实例化一个router对象
        // 本质上是将路径和页面内容绑定了对应关系
        let router = new VueRouter({
            routes: [
                {
                    name: 'home',
                    path: '/',
                    component: Home,
                },
                {
                    // xxx/1              如果参数是这种样式,在template中使用params:{userId:1}
                    name: 'userParams',
                    path: '/user/:userId',
                    component: userParams,
                },
                {
                    // xxx/?userId=1      如果参数是带?xx=xx的形式,在template中使用query:{userId:2}
                    name: 'userQuery',
                    path: '/user',
                    component: userQuery,
                }
            ]
        });

 5、VueRouter之子路由

let router = new VueRouter({
            routes: [
                {
                    name: 'home',
                    path: '/',
                    component: Home,
                },
                {
                    name: 'courses',
                    path: '/courses',
                    component: Courses,
                    children: [                                  # 创一个children的数组,里边包含的是子路由的内容
                        {
                            path: 'lightcourses',
                            component: LightCourses
                        },
                        {
                            path: 'degreecourses',
                            component: DegreeCourses
                        },
                    ]
                },
            ]
        });

6、VueRouter之子路由append (将子路由路径拼接到父级路由后边)

<script>
        Vue.use(VueRouter);

        let Home = {
            template: `
                <div>
                    <h1>这是首页页面</h1>
                </div>
            `
        };

        let Courses = {
            template: `
                <div>
                    <h1>这是课程页面</h1>
                    <router-link to="lightcourses" append>轻课</router-link>             # 在注册的课程标签下的两个子路由的a标签中 加入append,就可以将路径拼接到父级路由后边
                    <router-link to="degreecourses" append>学位课</router-link>

                    <router-view></router-view>
                </div>
            `
        };

        let LightCourses = {
            template: `
                <div>
                    <h1>这是轻课页面</h1>
                </div>
            `
        };

        let DegreeCourses = {
            template: `
                <div>
                    <h1>这是学位课程页面</h1>
                </div>
            `
        };

        let App = {
            template: `
                <div>
                    <router-link :to="{ name: 'home' }" >首页</router-link>
                    <router-link :to="{ name: 'courses'} " >课程页面</router-link>

                    <router-view></router-view>
                </div>
            `
        };

        let router = new VueRouter({
            routes: [
                {
                    name: 'home',
                    path: '/',
                    component: Home,
                },
                {
                    name: 'courses',
                    path: '/courses',
                    component: Courses,
                    children: [                                    #  chlidren 是子路由与父级路由的关系
                        {
                            path: 'lightcourses',
                            component: LightCourses
                        },
                        {
                            path: 'degreecourses',
                            component: DegreeCourses
                        },
                    ]
                },
            ]
        });

        new Vue({
            el: "#app",
            template: `<App/>`,
            components: {
                App,
            },
            router: router,
        })

    </script>

   不写append:

  写append:

 7、VueRouter之重定向(redirect)

let router = new VueRouter({
            routes: [
                {
                    name: 'home',
                    path: '/',
                    component: Home,
                },
                {
                    name: 'login',
                    path: '/login',
                    component: Login
                },
                {
                    name: 'pay',
                    path: '/pay',
                    redirect: '/login',            # 哪里需要重定向直接加一个redirect:'/路径'
                    component: Pay,
                },
            ]
        });

8、VueRouter之钩子函数

<script>
        // 1. 使用VueRouter
        Vue.use(VueRouter);

        let Home = {
            template: `
                <div>
                    <h1>这是首页页面</h1>
                </div>
            `
        };

        let Login = {
            template: `
                <div>
                    <h1>这是登录页面</h1>
                </div>
            `
        };

        let Pay = {
            template: `
                <div>
                    <h1>这是支付页面</h1>
                </div>
            `
        };

        let App = {
            // router-link会渲染成a标签,to会渲染成href
            // router-view是内容的渲染出口
            template: `
                <div>
                    <router-link :to="{ name: 'home' }">首页</router-link>
                    <router-link :to="{ name: 'login' }">登录</router-link>
                    <router-link :to="{ name: 'pay' }">支付</router-link>

                    <router-view></router-view>
                </div>
            `
        };

        // 2. 创建一个router对象
        // 把a标签的锚点值和页面内容绑定了对应关系
        let router = new VueRouter({
            routes: [                              # 固定写法routes:[数组]
                {
                    name: 'home',
                    path: '/',
                    component: Home,
                },
                {
                    name: 'login',
                    path: '/login',
                    component: Login
                },
                {
                    name: 'pay',
                    path: '/pay',
                    meta: { required_login: true },              # 固定写法用meta:{自定义变量名:true}
                    component: Pay,
                },
            ]
        });

        // 通过router对象的beforeEach(function(to, from, next))
        router.beforeEach(function (to, from, next) {                 # 三个参数:to 表示路由要访问的目的路径     
           console.log("to: ", to);                                             from 表示从哪个路径访问跳转过来的,比如从登陆界面访问支付界面,from就是登陆界面的路径,to 就是支付的路径
           console.log("from: ", from);                         next 表示接下来要去哪儿 ,next()如果里边没有参数,就表示接下来正常执行。
           console.log("next: ", next);
           if ( to.meta.required_login ) {
               next('/login');
           } else {
               next();
           }
        });

        new Vue({
            el: "#app",
            template: `<App/>`,
            components: {
                App,
            },
            // 在根实例中注册router对象
            router: router,
        })

    </script>

9、VuRouter之去掉中间的那些多余的参数

let router = new VueRouter({
            mode: 'history',            # 只需要在router对象中加一个mode:'history',就可以去掉多余的参数,效果如下
            routes: [
                {
                    name: 'home',
                    path: '/',
                    component: Home,
                },
                {
                    name: 'login',
                    path: '/login',
                    component: Login
                },
                {
                    name: 'pay',
                    path: '/pay',
                    meta: { required_login: true },
                    component: Pay,
                },
            ]
        });

 

posted @ 2018-11-12 17:42  一根小菜  阅读(587)  评论(0编辑  收藏  举报
Your browser does not support the Canvas element.