zoukankan      html  css  js  c++  java
  • Vue 路由

    路由 vue-router

    参数 name使用:

    路由配置:
    import Main from './views/Main'
    routes: [
        {
            path: '/main',
            name: 'main',  # 为该路由起名,通过name即可指定该路由
            component: Main
        }
    ] 
    视图使用:
    1):
    <router-link :to="{name: 'main'}">主页</router-link>

    2): this.$router.push({ name:'course-detail', });

    补充 : router-link与系统a标签的区别

    router-link:会被vue渲染成a标签,但是点击这样的a标签不能发生页面的转跳,只会出现组件的替换
    a:也可以完成同样的效果,但是会发生页面的转跳

    路由传参

    第一种:

    router.js

    routes: [
        // ...
        {
            path: '/course/:id/detail',
            name: 'course-detail',
            component: CourseDetail
        },
    ]

    注意:
    // path如果是通过to直接访问,路由必须完全对应
    // :id代表可以完成任意内容匹配,用变量id保存

    跳转.vue

    <template>
        <!-- 1.标签跳转 -->
        <router-link :to="`/course/${course.id}/detail`">{{ course.name }}</router-link>
    </template>
    
    <script>
        // ...
        goDetail() {
            // 2.逻辑跳转
            this.$router.push(`/course/${this.course.id}/detail`);
        }
    </script>

    接收.vue

    created() {
        let id = this.$route.params.id;
    }

    第二种:

    router.js

    routes: [
        // ...
        {
            path: '/course/detail',
            name: 'course-detail',
            component: CourseDetail
        },
    ]

    跳转.vue

    <template>
        <!-- 1.标签跳转 -->
        <router-link :to="{
                name: 'course-detail',
                query: {id: course.id}
            }">{{ course.name }}</router-link>
    </template>
    
    <script>
        // ...
        goDetail() {
            // 2.逻辑跳转
            this.$router.push({
                name: 'course-detail',
                query: {
                    id: this.course.id
                }
            });
        }
    </script>

    接收.vue

    created() {
        let id = this.$route.query.id;
    }

    补充:

    方法 go

    methods: {
       goPage() {
         // 返回上两页
         this.$router.go(-2);
    
        // 前进一页
        this.$router.go(1);          
       }
     }

    跨组件传参的四种方式

    // 1) localStorage:永久存储数据

        this.cTitle && (localStorage.cTitle = this.cTitle);
    // 2) sessionStorage:临时存储数据(刷新页面数据不重置,关闭再重新开启标签页数据重置)
    // 3) cookie:临时或永久存储数据(由过期时间决定)
    // 4) vuex的仓库(store.js):临时存储数据(刷新页面数据重置)

    vuex 方式:

    store.js

    export default new Vuex.Store({
        state: {
            cTitle:'课程页',
            hTitle:'主页'
        },
        mutations: {},
        actions: {}
    })

    SetTitle.vue

    <template>
        <div>
            <Nav></Nav>
            <p>
                修改课程页标题 <input type="text" v-model="cTitle">
                <button @click="changeCTitle">修改</button>
            </p>
            <p>
                修改主页标题 <input type="text" v-model="hTitle">
                <button @click="changeHTitle">修改</button>
            </p>
        </div>
    </template>
    
    <script>
        import Nav from '@/components/Nav'
    
        export default {
            name: "SetTitle",
            components: {
                Nav
            },
            data() {
                return {
                    cTitle: '',
                    hTitle: '',
                }
            },
            methods: {
                changeCTitle() {
                    this.$store.state.cTitle = this.cTitle;
              // this.$store.state.cTitle 就可以拿到vuex仓库中state内的值
              // store是vue实例的成员
    // this.$store.commit('setCTitle', this.cTitle); }, changeHTitle(){ this.hTitle && (localStorage.hTitle = this.hTitle); } } } </script> <style scoped> </style>

    总结:

     在任意组件中给仓库变量赋值

    this.$store.state.title = 'newTitle'
    this.$store.commit('setTitle', 'newTitle')

    在任意组件中取仓库变量的值

    console.log(this.$store.state.title)
  • 相关阅读:
    再谈spark部署搭建和企业级项目接轨的入门经验(博主推荐)
    CSS基础3——使用CSS格式化元素内容的字体
    利用MySQL 的GROUP_CONCAT函数实现聚合乘法
    POJ Octal Fractions(JAVA水过)
    组件接口(API)设计指南-文件夹
    Nginx 因 Selinux 服务导致无法远程訪问
    host字段变复杂了
    hdu 1251 统计难题 初识map
    “那个人样子好怪。”“我也看到了,他好像一条狗。”
    pomelo 协议
  • 原文地址:https://www.cnblogs.com/waller/p/11656966.html
Copyright © 2011-2022 走看看