• vue-day07


    一、路由进阶

    1.命名视图

    有的时候想同时显示多个视图,而不是嵌套显示。比如后台管理系统页面布局

    /src/compoents/Index.vue

    <template>
        <div class="page">
            <!-- 
                具名视图
                只会展示指定的组件内容
                不再根据浏览器地址进行匹配不同的组件 
            -->
            <router-view name="header"></router-view>
            <div class="main">
                <router-view name="nav"></router-view>
                <router-view name="main"></router-view>
            </div>
            <router-view name="bottom"></router-view>
        </div>
    </template>

    /src/router/index.js

    import Index from '../components/Index'
    import Login from '../components/Login'
    import Header from '../components/Header'
    import Main from '../components/Main'
    import Bottom from '../components/Bottom'
    import User from '../components/User'
    import UserInfo from '../components/UserInfo'
    import Nav from '../components/Nav'
    import Profile from '../components/Profile'
    export default new Router({
        mode:'hash',
        // mode:'history',
        //定义路由映射配置表
        routes: [
            {
                path:'/',
                component:Index,
                children:[
                    { 
                        path:'',//path:''表示写了一级路由规则,但是没有二级路由规则
                        // 注意此处是components,不是component
                        components:{
                            // 视图名称:组件名称
                            header:Header,
                            nav:Nav,
                            main:Main,
                            bottom:Bottom
                        }
                    },
                    {
                        path:'user',
                        components:{
                            header:Header,//header视图展示的页面组件
                            nav:Nav,//nav视图展示的页面组件
                            main:User,//右侧展示的页面组件 
                            bottom:Bottom//bottom视图展示的页面组件
                        }
                    },
                    {
                        path:'user/info',
                        name:'xiangqing',
                        components:{
                            header:Header,
                            nav:Nav,
                            main:UserInfo,//右侧展示的页面组件 
                            bottom:Bottom
                        }
                    },
                    {
                        path:'info',
                        components:{
                            header:Header,
                            nav:Nav,
                            main:Profile,//右侧展示的页面组件 
                            bottom:Bottom
                        }
                    }
                ]
            },
            { 
                path:'/login',
                component:Login,
                alias:'/denglu'
            }
        ]
    })

    2.路由懒加载

    component:()=>import('../components/Index')

    3.路由守卫【重点】

    可以对路由访问时,进行验证或者拦截

    to 目标路由规则信息

    from 来源路由规则信息

    next 函数,用来执行默认路由规则/指定的路由规则/终止路由规则返回来源路由规则

    (1)路由独享守卫

    /src/router/index.js中的某一个路由规则

    {
        path:'user',
        // 路由独享守卫
        beforeEnter:function(to,from,next){
            // next();//执行默认路由规则
            // next('/login');//执行指定的路由规则
            // next(false);//终止路由规则返回来源路由规则
            next();
        }
    }

    只有/user这个路由规则会受到影响,其他路由均不受到影响

    (2)组件守卫

    不同的路由规则可以指定到同一个页面组件,所以组件守卫的作用范围要比路由独享守卫要大。

    beforeRouteEnter,它和路由独享守卫的作用一样

    beforeRouteLeave,要进行路由地址切换时,会自动触发

    beforeRouteUpdate,在hash模式下,路由的参数值变化时,会自动触发

    (3)全局守卫

    项目中任意路由规则访问之前或者访问之后都会触发全局守卫的钩子函数。

    /src/router/index.js

    /src/main.js

    全局前置守卫

    beforeEach 所有的路由规则访问之前,自动触发

    afterEach 所有的路由规则访问之后,自动触发,它只有两个参数,一般做一些记录操作

    登录案例示例代码:

    router.beforeEach((to,from,next)=>{
        //验证用户登录状态,如果用户没有登录,则只能访问登录页面
        if(to.fullPath === '/login'){
            next();
        }else{
            var userinfo = localStorage.getItem('userinfo');
            if(userinfo === null){
                next('/login');
            }else{
                next();
            }
        }
    })

    二、样式预处理器-stylus

    1.介绍

    富于表现力、动态的、健壮的 CSS

    特性:

    • 冒号可有可无

    • 分号可有可无

    • 逗号可有可无

    • 括号可有可无

    • 变量

    • 插值(Interpolation)

    • 混合(Mixin)

    • 数学计算

    • 强制类型转换

    • 动态引入

    • 条件表达式

    • 迭代

    • 嵌套选择器

    • 父级引用

    • Variable function calls

    • 词法作用域

    • 内置函数(超过 60 个)

    • 语法内函数(In-language functions)

    • 压缩可选

    • 图像内联可选

    • Stylus 可执行程序

    • 健壮的错误报告

    • 单行和多行注释

    • CSS 字面量

    • 字符转义

    • TextMate 捆绑

    2.安装

    npm i stylus-loader@3.0.2 stylus bootstrap@3 --save

    3.引入

    main.js

    import 'bootstrap/dist/css/bootstrap.css'

    任意页面组件中使用stylus

    <style lang="stylus"></style>

    4.基本使用

    在任意页面组件中使用stylus编写样式代码

    <style lang="stylus" scoped>
        // lang="stylus" 表示使用stylus样式预处理器
        // stylus 可以完美的兼容原生css语法
        // .page{
        //     100vw;
        //     height:100vh;
        // }
        // stylus新特性语法,靠缩进(空格)控制层级
        .page
            width 100vw
            height 100vh
            background-color rgba(0,0,0,0.5)
            position fixed
            .login
                width 500px
                height 300px
                background-color #fff
                margin 100px auto
                border-radius 20px
                h2
                    padding-top 30px
                .btn
                    width 100%
    </style>

    5.变量的使用

    ①在/src/assets创建css目录,并在css目录中创建一个color.styl

    在color.styl文件中编写变量代码

    $bgcolor1 = #2E8B57
    $bgcolor2 = #3CB371
    $bgcolor3 = #BDB76B

    ②在任意页面组件中引入color.styl文件并使用预先定义好的变量

    登录页面

    <style lang="stylus" scoped>
    @import('../../assets/css/color.styl')
    .page
        width 100vw
        height 100vh
        background-color $bgcolor1

    后台管理系统页面布局页面

    <style lang="stylus" scoped>
    @import('../../assets/css/color.styl')
    .page
        width 100vw
        height 100vh
        display flex
        flex-direction column
        .top
            height 50px
            background-color $bgcolor1
        .middle
            flex 1
            display flex
            .nav
                width 120px
                background-color $bgcolor2
                text-align center
                a
                    display block
                    text-decoration none
                    color #fff
                    padding 15px
            .right
                flex 1
        .bottom
            height 40px
            background-color $bgcolor3
    </style>

    6.函数的使用

    第一步:创建fn.styl并编写函数代码,把复用的样式写在函数中

    在/src/assets/css/创建一个fn.styl文件

    在/src/assets/css/index.styl中引入fn.styl

    getpage(){
        width 100vw
        height 100vh
        background-color rgba(0,0,0,0.5)
        position fixed
        left 0
        top 0
    }
    getcontent(){
        width $formwidth
        height $formheight
        background-color #fff
        margin 100px auto
        border-radius $radius
    }

    第二步:在登录页面中使用函数

    /src/compoents/pages/Login.vue

    <style lang="stylus" scoped>
    @import('../../assets/css/index.styl')
        .page
            getpage()
            .login
                getcontent()
                h2
                    padding-top 30px
                .btn
                    width 100%
    </style>

    第三步:在其他页面组件中复用登录页面的样式

    /src/components/view/del.vue

    <style lang="stylus" scoped>
    @import('../../assets/css/index.styl')
        .delitem
            display inline-block
            .page
                getpage()
                .content
                    getcontent()
    </style>
  • 相关阅读:
    获取当前android设备是mips架构还是arm架构
    查看android设备的设备名称
    android源码查看源码的版本
    netcfg android
    linux中解压zip 中文乱码处理
    通过命令行查看当前android系统的版本
    关于Yorhom Yorhom's Game Box
    是英雄就下100层(1)
    Javascript可移动地图的实现Demo演示
    HTML5之游戏DEMO Yorhom's Game Box
  • 原文地址:https://www.cnblogs.com/yu19991126/p/14269596.html
Copyright © 2020-2023  润新知