Vue的学习(五)

41、vue-router之路由参数的随意设置与伪静态链接地址处理:

访问路径:你的加上#/content/1

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>vue-router之路由参数的随意设置与伪静态链接地址处理</title>
    <script src="./lib/vue.js"></script>
    <script src="./lib/vue-router.js"></script>
</head>
<body>
<div id="app">
    <!--
        router-link: 定义路由的链接的标签
        to: 定义跳转到那个组件
        router-view:展示组件的标签
    -->
    <router-link to="/content">内容</router-link>
    <router-view></router-view>
</div>
<script type="text/x-template" id="content">
    <div>
        id:{{$route.params.id}}
        <br />
        <button @click="show">检测参数</button>
    </div>
</script>
</body>
<script>
    // 定义组件
    const content = {
        template: "#content",
        methods: {
            show() {
                /*this.$route.params):获取路由传过来的变量(所有变量)*/
                console.log(this.$route.params);
                /*获取名为cid的变脸*/
                // console.log(this.$route.params.cid);
            }
        }
    };
    //定义路由器,然后把组件交给路由器
    let routes = [
            /*:cid :定义了一个名为cid的变量*/
            {path: ‘/content/:id‘, component: content}
        ];

    //routes:routes可以写成routes
    // let router = new VueRouter({routes:routes});
    let router = new VueRouter({routes});
    new Vue({
        el: ‘#app‘,
        //把路由器注入主组件中,这样才有效果
        /*
        * 注意:router 与 routes 的区别:
        * router 是一个机制,相当于一个管理者,它来管理路由。
        * routes 是一组路由,把上面的每一条路由组合起来,形成一个数组。
        * route,它是一条路由。
        * */
        //如果 router的名称和router的一样可以直接写成 router 即可
        // router: router
        router
    })
</script>
</html>

42、vue-router之路由参数的验证处理保存路由安全:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>vue-router之路由参数的验证处理保存路由安全</title>
    <script src="./lib/vue.js"></script>
    <script src="./lib/vue-router.js"></script>
</head>
<body>
<div id="app">
    <!--
        router-link: 定义路由的链接的标签
        to: 定义跳转到那个组件
        router-view:展示组件的标签
    -->
    <router-link to="/content">内容</router-link>
    <router-view></router-view>
</div>
<script type="text/x-template" id="content">
    <div>
        id:{{$route.params.id}}
        <br />
        <button @click="show">检测参数</button>
    </div>
</script>
</body>
<script>
    // 定义组件
    const content = {
        template: "#content",
        methods: {
            show() {
                /*this.$route.params):获取路由传过来的变量(所有变量)*/
                console.log(this.$route.params);
                /*获取名为cid的变脸*/
                // console.log(this.$route.params.cid);
            }
        }
    };
    //定义路由器,然后把组件交给路由器
    let routes = [
            /*:id :定义了一个名为id的变量*/
            /*:id(a\d{2}) :表示必须以a开头包含两位数字,比如:a23 */
            {path: ‘/content/:id(a\\d{2})‘, component: content}
        ];

    //routes:routes可以写成routes
    // let router = new VueRouter({routes:routes});
    let router = new VueRouter({routes});
    new Vue({
        el: ‘#app‘,
        //把路由器注入主组件中,这样才有效果
        /*
        * 注意:router 与 routes 的区别:
        * router 是一个机制,相当于一个管理者,它来管理路由。
        * routes 是一组路由,把上面的每一条路由组合起来,形成一个数组。
        * route,它是一条路由。
        * */
        //如果 router的名称和router的一样可以直接写成 router 即可
        // router: router
        router
    })
</script>
</html>

 43、vue-router之路由参数默认值的设置技巧:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>vue-router之路由参数默认值的设置技巧</title>
    <script src="./lib/vue.js"></script>
    <script src="./lib/vue-router.js"></script>
</head>
<body>
<div id="app">
    <!--
        router-link: 定义路由的链接的标签
        to: 定义跳转到那个组件
        router-view:展示组件的标签
    -->
    <router-link to="/content">内容</router-link>
    <router-view></router-view>
</div>
<script type="text/x-template" id="content">
    <div>
        id:{{id}}
        <br />
        <button @click="show">检测参数</button>
    </div>
</script>
</body>
<script>
    // 定义组件
    const content = {
        template: "#content",
        /*子组件的data是一个匿名函数*/
        data() {
            return {
                id: 0
            }
        },
        /*
        * mounted钩子函数的调用时机:
        * 编译好的HTML挂载到页面完成后执行的事件钩子,此钩子函数中一般会
        * 做一些ajax请求获取数据来进行数据初始化
        * 注意:mounted在整个实例中只执行一次
        * */
        mounted() {
            this.id = this.$route.params.id;
            if (!this.id) {
                this.id = 1;
            }
        },
        methods: {
            show() {
                /*this.$route.params):获取路由传过来的变量(所有变量)*/
                console.log(this.$route.params);
                /*获取名为cid的变脸*/
                // console.log(this.$route.params.cid);
            }
        }
    };
    //定义路由器,然后把组件交给路由器
    let routes = [
            /*:id :定义了一个名为id的变量*/
            /*? :表示匹配一个整数或者0个*/
            {path: ‘/content/:id?‘, component: content}
        ];

    //routes:routes可以写成routes
    // let router = new VueRouter({routes:routes});
    let router = new VueRouter({routes});
    new Vue({
        el: ‘#app‘,
        //把路由器注入主组件中,这样才有效果
        /*
        * 注意:router 与 routes 的区别:
        * router 是一个机制,相当于一个管理者,它来管理路由。
        * routes 是一组路由,把上面的每一条路由组合起来,形成一个数组。
        * route,它是一条路由。
        * */
        //如果 router的名称和router的一样可以直接写成 router 即可
        // router: router
        router
    })
</script>
</html>

44、vue-router之实例操作新闻列表单页面应用与路由别名:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>vue-router之实例操作新闻列表单页面应用与路由别名</title>
    <script src="./lib/vue.js"></script>
    <script src="./lib/vue-router.js"></script>
</head>
<body>
<div id="app">
    <router-view></router-view>
</div>
<script type="text/x-template" id="home">
    <div>
        <li v-for="v in news">
            <!--只要要绑定变量,都可用v-bind: 简写 :-->
            <!--
                name:‘content‘:指定名为 content的路由,即‘/content/:id‘
                params:{id:v.id}}:作用是赋值给路由中的 :id 变量
            -->
            <router-link :to="{name:‘content‘,params:{id:v.id}}">{{v.title}}</router-link>
        </li>
    </div>
</script>
<script type="text/x-template" id="content">
    <div>
        <li>{{field.title}} - {{field.id}}</li>
        <p>
            {{field.content}}
        </p>
        <!--
        router-link: 定义路由的链接的标签
        to: 定义跳转到那个组件
        router-view:展示组件的标签
        -->
        <router-link to="/">返回首页</router-link>
    </div>
</script>
</body>
<script>
    const data = [
        {id:1,title:‘PHP开源免费框架‘,content:‘这是PHP的内容...‘},
        {id:2,title:‘CMS开源免费框架‘,content:‘这是CMS的内容...‘}
    ];
    // 定义组件
    const home = {
        template: "#home",
        /*子组件的data是一个匿名函数*/
        data() {
            return {
                news: data
            }
        }
    };
    const content = {
        template: "#content",
        /*子组件的data是一个匿名函数*/
        data() {
            return {
                field:{}
            }
        },
        /*
        * mounted钩子函数的调用时机:
        * 编译好的HTML挂载到页面完成后执行的事件钩子,此钩子函数中一般会
        * 做一些ajax请求获取数据来进行数据初始化
        * 注意:mounted在整个实例中只执行一次
        * */
        mounted() {
            let id = this.$route.params.id;
            for (let k=0;k<data.length;k++) {
                if (data[k].id===id) {
                    this.field = data[k];
                }
            }
        }
    };
    //定义路由器,然后把组件交给路由器
    let routes = [
            /*:id :定义了一个名为id的变量*/
            /*路由带有变量的时候给路由一个名称,便于后面的调用*/
            {path: ‘/content/:id‘, component: content,name:‘content‘},
            {path: ‘/‘, component: home}
        ];

    //routes:routes可以写成routes
    // let router = new VueRouter({routes:routes});
    let router = new VueRouter({routes});
    new Vue({
        el: ‘#app‘,
        //把路由器注入主组件中,这样才有效果
        /*
        * 注意:router 与 routes 的区别:
        * router 是一个机制,相当于一个管理者,它来管理路由。
        * routes 是一组路由,把上面的每一条路由组合起来,形成一个数组。
        * route,它是一条路由。
        * */
        //如果 router的名称和router的一样可以直接写成 router 即可
        // router: router
        router
    })
</script>
</html>

45、vue-router之路由嵌套在文章系统中的使用方法:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>vue-router之路由嵌套在文章系统中的使用方法</title>
    <script src="./lib/vue.js"></script>
    <script src="./lib/vue-router.js"></script>
</head>
<body>
<div id="app">
    <router-view></router-view>
</div>
<script type="text/x-template" id="home">
    <div>
        <li v-for="v in news">
            <!--只要要绑定变量,都可用v-bind: 简写 :-->
            <!--
                name:‘content‘:指定名为 content的路由,即‘/content/:id‘
                params:{id:v.id}}:作用是赋值给路由中的 :id 变量
            -->
            <router-link :to="{name:‘content‘,params:{id:v.id}}">{{v.title}}</router-link>
        </li>
        <!--展示其子路由的页面-->
        <router-view></router-view>
    </div>
</script>
<script type="text/x-template" id="content">
    <div>
        <li>{{field.title}} - {{field.id}}</li>
        <p>
            {{field.content}}
        </p>
        <!--
        router-link: 定义路由的链接的标签
        to: 定义跳转到那个组件
        router-view:展示组件的标签
        -->
        <router-link to="/">返回首页</router-link>
    </div>
</script>
</body>
<script>
    const data = [
        {id:1,title:‘PHP开源免费框架‘,content:‘这是PHP的内容...‘},
        {id:2,title:‘CMS开源免费框架‘,content:‘这是CMS的内容...‘}
    ];
    // 定义组件
    const home = {
        template: "#home",
        /*子组件的data是一个匿名函数*/
        data() {
            return {
                news: data
            }
        }
    };
    const content = {
        template: "#content",
        /*子组件的data是一个匿名函数*/
        data() {
            return {
                field:{}
            }
        },
        /*
        * mounted钩子函数的调用时机:
        * 编译好的HTML挂载到页面完成后执行的事件钩子,此钩子函数中一般会
        * 做一些ajax请求获取数据来进行数据初始化
        * 注意:mounted在整个实例中只执行一次
        * */
        mounted() {
            let id = this.$route.params.id;
            for (let k=0;k<data.length;k++) {
                if (data[k].id===id) {
                    this.field = data[k];
                }
            }
        }
    };
    //定义路由器,然后把组件交给路由器
    let routes = [
            /*:id :定义了一个名为id的变量*/
            /*路由带有变量的时候给路由一个名称,便于后面的调用*/
            /*children:定义home的子路由*/
            {path: ‘/‘, component: home,children:[
                    {path: ‘/content/:id‘, component: content,name:‘content‘}
                ]}
        ];

    //routes:routes可以写成routes
    // let router = new VueRouter({routes:routes});
    let router = new VueRouter({routes});
    new Vue({
        el: ‘#app‘,
        //把路由器注入主组件中,这样才有效果
        /*
        * 注意:router 与 routes 的区别:
        * router 是一个机制,相当于一个管理者,它来管理路由。
        * routes 是一组路由,把上面的每一条路由组合起来,形成一个数组。
        * route,它是一条路由。
        * */
        //如果 router的名称和router的一样可以直接写成 router 即可
        // router: router
        router
    })
</script>
</html>

46、vue-router之使用watch与mounted解决同一组件页面不刷新数据的问题:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>vue-router之使用watch与mounted解决同一组件页面不刷新数据的问题</title>
    <script src="./lib/vue.js"></script>
    <script src="./lib/vue-router.js"></script>
</head>
<body>
<div id="app">
    <router-view></router-view>
</div>
<script type="text/x-template" id="home">
    <div>
        <li v-for="v in news">
            <!--只要要绑定变量,都可用v-bind: 简写 :-->
            <!--
                name:‘content‘:指定名为 content的路由,即‘/content/:id‘
                params:{id:v.id}}:作用是赋值给路由中的 :id 变量
            -->
            <router-link :to="{name:‘content‘,params:{id:v.id}}">{{v.title}}</router-link>
        </li>
        <!--展示其子路由的页面-->
        <router-view></router-view>
    </div>
</script>
<script type="text/x-template" id="content">
    <div>
        <li>{{field.title}} - {{field.id}}</li>
        <p>
            {{field.content}}
        </p>
        <!--
        router-link: 定义路由的链接的标签
        to: 定义跳转到那个组件
        router-view:展示组件的标签
        -->
        <router-link to="/">返回首页</router-link>
    </div>
</script>
</body>
<script>
    const data = [
        {id:1,title:‘PHP开源免费框架‘,content:‘这是PHP的内容...‘},
        {id:2,title:‘CMS开源免费框架‘,content:‘这是CMS的内容...‘}
    ];
    // 定义组件
    const home = {
        template: "#home",
        /*子组件的data是一个匿名函数*/
        data() {
            return {
                news: data
            }
        }
    };
    const content = {
        template: "#content",
        /*子组件的data是一个匿名函数*/
        data() {
            return {
                field:{}
            }
        },
        /*
        * 用 watch 来监听路由,只要路由发生改变就重新加载 content 组件的内容
        * */
        watch: {
          ‘$route‘(to,from) {
              this.load();
          }
        },
        /*
        * mounted钩子函数的调用时机:
        * 编译好的HTML挂载到页面完成后执行的事件钩子,此钩子函数中一般会
        * 做一些ajax请求获取数据来进行数据初始化
        * 注意:mounted在整个实例中只执行一次
        * */
        /*
        * mounted的内容只在组件加载完的时候执行一次,也就是同一个组件只执行一次,不管页面后面的数据改不改变
        * */
        mounted() {
            this.load();
        },
        methods: {
            load() {
                let id = this.$route.params.id;
                for (let k=0;k<data.length;k++) {
                    if (data[k].id===id) {
                        this.field = data[k];
                    }
                }
            }
        }
    };
    //定义路由器,然后把组件交给路由器
    let routes = [
            /*:id :定义了一个名为id的变量*/
            /*路由带有变量的时候给路由一个名称,便于后面的调用*/
            /*children:定义home的子路由*/
            {path: ‘/‘, component: home,children:[
                    {path: ‘/content/:id‘, component: content,name:‘content‘}
                ]}
        ];

    //routes:routes可以写成routes
    // let router = new VueRouter({routes:routes});
    let router = new VueRouter({routes});
    new Vue({
        el: ‘#app‘,
        //把路由器注入主组件中,这样才有效果
        /*
        * 注意:router 与 routes 的区别:
        * router 是一个机制,相当于一个管理者,它来管理路由。
        * routes 是一组路由,把上面的每一条路由组合起来,形成一个数组。
        * route,它是一条路由。
        * */
        //如果 router的名称和router的一样可以直接写成 router 即可
        // router: router
        router
    })
</script>
</html>

47、vue-router之通过程序控制路由的跳转:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>vue-router之通过程序控制路由的跳转</title>
    <script src="./lib/vue.js"></script>
    <script src="./lib/vue-router.js"></script>
</head>
<body>
<div id="app">
    <router-view></router-view>
</div>
<script type="text/x-template" id="home">
    <div>
        <li v-for="v in news">
            <!--只要要绑定变量,都可用v-bind: 简写 :-->
            <!--
                .prevent: 阻止 a 标签的默认跳转行为
            -->
            <a href="" @click.prevent="go(v.id)">{{v.title}}</a>
        </li>
    </div>
</script>
<script type="text/x-template" id="content">
    <div>
        <li>{{field.title}} - {{field.id}}</li>
        <p>
            {{field.content}}
        </p>
        <a href="" @click.prevent="back()">返回</a>
    </div>
</script>
</body>
<script>
    const data = [
        {id: 1, title: ‘PHP开源免费框架‘, content: ‘这是PHP的内容...‘},
        {id: 2, title: ‘CMS开源免费框架‘, content: ‘这是CMS的内容...‘}
    ];
    // 定义组件
    const home = {
        template: "#home",
        /*子组件的data是一个匿名函数*/
        data() {
            return {
                news: data
            }
        },
        methods: {
            go(id) {
                //第一种传路径的方式
                //const url = "/content/" + id;
                //第二种传路径的方式
                // const  url = {path:‘/content/‘+id};
                //第三种传路径的方式
                const url = {name:‘content‘,params:{id:id}};
                /*
                * $route:获取参数用的
                * $router:设置路由用的
                * */
                //push会保存历史记录
                this.$router.push(url);
                //replace会替换掉当前的路径
                // this.$router.replace(url);
            }
        }
    };
    const content = {
        template: "#content",
        /*子组件的data是一个匿名函数*/
        data() {
            return {
                field: {}
            }
        },
        /*
        * 用 watch 来监听路由,只要路由发生改变就重新加载 content 组件的内容
        * */
        watch: {
            ‘$route‘(to, from) {
                this.load();
            }
        },
        /*
        * mounted钩子函数的调用时机:
        * 编译好的HTML挂载到页面完成后执行的事件钩子,此钩子函数中一般会
        * 做一些ajax请求获取数据来进行数据初始化
        * 注意:mounted在整个实例中只执行一次
        * */
        /*
        * mounted的内容只在组件加载完的时候执行一次,也就是同一个组件只执行一次,不管页面后面的数据改不改变
        * */
        mounted() {
            this.load();
        },
        methods: {
            load() {
                let id = this.$route.params.id;
                for (let k = 0; k < data.length; k++) {
                    if (data[k].id == id) {
                        this.field = data[k];
                    }
                }
            },
            back() {
                /*
                * 如果这里使用了this.$router.go(-1),则上面的路由跳转
                * 就不能使用this.$router.replace(url),因为这个是替换掉路径的,没有历史记录
                * */
                /*go(-1): 返回上一页去*/
                this.$router.go(-1);
            }
        }
    };
    //定义路由器,然后把组件交给路由器
    let routes = [
        /*:id :定义了一个名为id的变量*/
        /*路由带有变量的时候给路由一个名称,便于后面的调用*/
        {path: ‘/‘, component: home},
        {path: ‘/content/:id‘, component: content, name: ‘content‘}
    ];

    //routes:routes可以写成routes
    // let router = new VueRouter({routes:routes});
    let router = new VueRouter({routes});
    new Vue({
        el: ‘#app‘,
        //把路由器注入主组件中,这样才有效果
        /*
        * 注意:router 与 routes 的区别:
        * router 是一个机制,相当于一个管理者,它来管理路由。
        * routes 是一组路由,把上面的每一条路由组合起来,形成一个数组。
        * route,它是一条路由。
        * */
        //如果 router的名称和router的一样可以直接写成 router 即可
        // router: router
        router
    })
</script>
</html>

48、vue-router之命名视图的实例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>vue-router之命名视图的实例</title>
    <style>
        .menu {
            border: solid 2px red;
            background: aqua;
            padding: 100px;
            display: block;
        }
        .news {
            border: solid 2px green;
            background: orange;
            padding: 50px;
            float: left;
            width: 36.3%;
        }
        .slide {
            border: solid 2px gold;
            background: blueviolet;
            padding: 50px;
            float: right;
            width: 50%;
        }
    </style>
    <script src="./lib/vue.js"></script>
    <script src="./lib/vue-router.js"></script>
</head>
<body>
<div id="app">
    <router-view></router-view>
    <router-view name="news"></router-view>
    <router-view name="slide"></router-view>
</div>
<script type="text/x-template" id="menu">
    <div class="menu">
        <a href="http://www.baidu.com">百度</a>
        <a href="https://www.cnblogs.com/chenjianbo/p/9866312.html">Mounted函数</a>
    </div>
</script>
<script type="text/x-template" id="news">
    <div class="news">
        <li v-for="v in news">{{v.title}}</li>
    </div>
</script>
<script type="text/x-template" id="slide">
    <div class="slide">
        <li v-for="v in data">{{v.title}}</li>
    </div>
</script>
</body>
<script>
    // 定义组件
    const menu = {
        template: "#menu"
    };
    const news = {
        template: "#news",
        data() {
            return {
                news: [
                    {title:‘数学分析‘},
                    {title:‘高等代数‘},
                    {title:‘数据模型‘}
                ]
            }
        }
    };
    const slide = {
        template: "#slide",
        data() {
            return {
                data: [
                    {title: ‘今日新闻‘},
                    {title: ‘最新新闻‘},
                    {title: ‘昨日新闻‘}
                ]
            }
        }
    };
    //定义路由器,然后把组件交给路由器
    let routes = [
        {
            /*
            * 在根路径下定义子组件使用 components 定义多个
            * */
            path:‘/‘,components: {
                default: menu,
                news: news,
                slide: slide
            }
        }
    ];

    //routes:routes可以写成routes
    // let router = new VueRouter({routes:routes});
    let router = new VueRouter({routes});
    new Vue({
        el: ‘#app‘,
        //把路由器注入主组件中,这样才有效果
        /*
        * 注意:router 与 routes 的区别:
        * router 是一个机制,相当于一个管理者,它来管理路由。
        * routes 是一组路由,把上面的每一条路由组合起来,形成一个数组。
        * route,它是一条路由。
        * */
        //如果 router的名称和router的一样可以直接写成 router 即可
        // router: router
        router
    })
</script>
</html>

49、vue-router之重定向redirect的使用技巧:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>vue-router之重定向redirect的使用技巧</title>
    <script src="./lib/vue.js"></script>
    <script src="./lib/vue-router.js"></script>
</head>
<body>
<div id="app">
    <router-link to="/">首页</router-link>
    <a href="http://www.baidu.com">百度</a>
    <router-link to="/about">关于我们</router-link>
    <router-view></router-view>
</div>
<script type="text/x-template" id="home">
    <div>
        <li v-for="v in news">
            <!--只要要绑定变量,都可用v-bind: 简写 :-->
            <!--
                .prevent: 阻止 a 标签的默认跳转行为
            -->
            <a href="" @click.prevent="go(v.id)">{{v.title}}</a>
        </li>
    </div>
</script>
<script type="text/x-template" id="content">
    <div>
        <li>{{field.title}} - {{field.id}}</li>
        <p>
            {{field.content}}
        </p>
        <a href="" @click.prevent="back()">返回</a>
    </div>
</script>
</body>
<script>
    const data = [
        {id: 1, title: ‘PHP开源免费框架‘, content: ‘这是PHP的内容...‘},
        {id: 2, title: ‘CMS开源免费框架‘, content: ‘这是CMS的内容...‘},
        {id: 3, title: ‘关于我们‘, content: ‘一个还不知道未来会发生什么的少年,在拼命的学习中....‘}
    ];
    // 定义组件
    const home = {
        template: "#home",
        /*子组件的data是一个匿名函数*/
        data() {
            return {
                news: data
            }
        },
        methods: {
            go(id) {
                //第一种传路径的方式
                //const url = "/content/" + id;
                //第二种传路径的方式
                // const  url = {path:‘/content/‘+id};
                //第三种传路径的方式
                const url = {name:‘content‘,params:{id:id}};
                /*
                * $route:获取参数用的
                * $router:设置路由用的
                * */
                //push会保存历史记录
                this.$router.push(url);
                //replace会替换掉当前的路径
                // this.$router.replace(url);
            }
        }
    };
    const content = {
        template: "#content",
        /*子组件的data是一个匿名函数*/
        data() {
            return {
                field: {}
            }
        },
        /*
        * 用 watch 来监听路由,只要路由发生改变就重新加载 content 组件的内容
        * */
        watch: {
            ‘$route‘(to, from) {
                this.load();
            }
        },
        /*
        * mounted钩子函数的调用时机:
        * 编译好的HTML挂载到页面完成后执行的事件钩子,此钩子函数中一般会
        * 做一些ajax请求获取数据来进行数据初始化
        * 注意:mounted在整个实例中只执行一次
        * */
        /*
        * mounted的内容只在组件加载完的时候执行一次,也就是同一个组件只执行一次,不管页面后面的数据改不改变
        * */
        mounted() {
            this.load();
        },
        methods: {
            load() {
                let id = this.$route.params.id;
                for (let k = 0; k < data.length; k++) {
                    if (data[k].id == id) {
                        this.field = data[k];
                    }
                }
            },
            back() {
                /*
                * 如果这里使用了this.$router.go(-1),则上面的路由跳转
                * 就不能使用this.$router.replace(url),因为这个是替换掉路径的,没有历史记录
                * */
                /*go(-1): 返回上一页去*/
                this.$router.go(-1);
            }
        }
    };
    //定义路由器,然后把组件交给路由器
    let routes = [
        /*:id :定义了一个名为id的变量*/
        /*路由带有变量的时候给路由一个名称,便于后面的调用*/
        {path: ‘/‘, component: home},
        {path: ‘/content/:id‘, component: content, name: ‘content‘},
        {path: ‘/about‘, redirect:{name:‘content‘,params:{id:3}}}
    ];

    //routes:routes可以写成routes
    // let router = new VueRouter({routes:routes});
    let router = new VueRouter({routes});
    new Vue({
        el: ‘#app‘,
        //把路由器注入主组件中,这样才有效果
        /*
        * 注意:router 与 routes 的区别:
        * router 是一个机制,相当于一个管理者,它来管理路由。
        * routes 是一组路由,把上面的每一条路由组合起来,形成一个数组。
        * route,它是一条路由。
        * */
        //如果 router的名称和router的一样可以直接写成 router 即可
        // router: router
        router
    })
</script>
</html>

50、vue-router之使用路由别名定制:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>vue-router之使用路由别名定制</title>
    <script src="./lib/vue.js"></script>
    <script src="./lib/vue-router.js"></script>
</head>
<body>
<div id="app">
    <router-link to="/">首页</router-link>
    <a href="http://www.baidu.com">百度</a>
    <router-link to="/about">关于我们</router-link>
    <router-view></router-view>
</div>
<script type="text/x-template" id="home">
    <div>
        <li v-for="v in news">
            <!--只要要绑定变量,都可用v-bind: 简写 :-->
            <!--
                .prevent: 阻止 a 标签的默认跳转行为
            -->
            <a href="" @click.prevent="go(v.id)">{{v.title}}</a>
        </li>
    </div>
</script>
<script type="text/x-template" id="content">
    <div>
        <li>{{field.title}} - {{field.id}}</li>
        <p>
            {{field.content}}
        </p>
        <a href="" @click.prevent="back()">返回</a>
    </div>
</script>
</body>
<script>
    const data = [
        {id: 1, title: ‘PHP开源免费框架‘, content: ‘这是PHP的内容...‘},
        {id: 2, title: ‘CMS开源免费框架‘, content: ‘这是CMS的内容...‘},
        {id: 3, title: ‘关于我们‘, content: ‘一个还不知道未来会发生什么的少年,在拼命的学习中....‘}
    ];
    // 定义组件
    const home = {
        template: "#home",
        /*子组件的data是一个匿名函数*/
        data() {
            return {
                news: data
            }
        },
        methods: {
            go(id) {
                //第一种传路径的方式
                //const url = "/content/" + id;
                //第二种传路径的方式
                // const  url = {path:‘/content/‘+id};
                //第三种传路径的方式
                const url = {name:‘content‘,params:{id:id}};
                /*
                * $route:获取参数用的
                * $router:设置路由用的
                * */
                //push会保存历史记录
                this.$router.push(url);
                //replace会替换掉当前的路径
                // this.$router.replace(url);
            }
        }
    };
    const content = {
        template: "#content",
        /*子组件的data是一个匿名函数*/
        data() {
            return {
                field: {}
            }
        },
        /*
        * 用 watch 来监听路由,只要路由发生改变就重新加载 content 组件的内容
        * */
        watch: {
            ‘$route‘(to, from) {
                this.load();
            }
        },
        /*
        * mounted钩子函数的调用时机:
        * 编译好的HTML挂载到页面完成后执行的事件钩子,此钩子函数中一般会
        * 做一些ajax请求获取数据来进行数据初始化
        * 注意:mounted在整个实例中只执行一次
        * */
        /*
        * mounted的内容只在组件加载完的时候执行一次,也就是同一个组件只执行一次,不管页面后面的数据改不改变
        * */
        mounted() {
            this.load();
        },
        methods: {
            load() {
                let id = this.$route.params.id;
                for (let k = 0; k < data.length; k++) {
                    if (data[k].id == id) {
                        this.field = data[k];
                    }
                }
            },
            back() {
                /*
                * 如果这里使用了this.$router.go(-1),则上面的路由跳转
                * 就不能使用this.$router.replace(url),因为这个是替换掉路径的,没有历史记录
                * */
                /*go(-1): 返回上一页去*/
                this.$router.go(-1);
            }
        }
    };
    //定义路由器,然后把组件交给路由器
    let routes = [
        /*:id :定义了一个名为id的变量*/
        /*路由带有变量的时候给路由一个名称,便于后面的调用*/
        {path: ‘/‘, component: home},
        {path: ‘/content/:id‘, component: content, name: ‘content‘},
        /*alias: 定义路由的别名,是一个数组,所以可以定义多个别名*/
        {path: ‘/content/3‘, alias:[‘/about‘]}
    ];

    //routes:routes可以写成routes
    // let router = new VueRouter({routes:routes});
    let router = new VueRouter({routes});
    new Vue({
        el: ‘#app‘,
        //把路由器注入主组件中,这样才有效果
        /*
        * 注意:router 与 routes 的区别:
        * router 是一个机制,相当于一个管理者,它来管理路由。
        * routes 是一组路由,把上面的每一条路由组合起来,形成一个数组。
        * route,它是一条路由。
        * */
        //如果 router的名称和router的一样可以直接写成 router 即可
        // router: router
        router
    })
</script>
</html>

相关推荐