项目准备 day09

本文深入探讨Vue.js的基础与进阶知识,包括:1) 渲染机制,解释了Vue如何通过`render`函数创建组件,以及runtime-only和full-build的区别;2) Vue CLI的配置选项,如`outputDir`、`lintOnSave`和自定义`webpack`配置;3) Vue Router的使用,涵盖元信息、路由懒加载和滚动行为,并详细阐述了路由守卫的全局与局部应用。
摘要由CSDN通过智能技术生成

1.vue_base

方法:render:h=>h(组件对象)

    render:function(createElement){return createElement("普通标签名称","标签内容")}

    render:function(createElement){return 组件对象}

        所有带runtime的vue源码版本 都是只有运行时的! 没有能力解析template配置

        所有bu带runtime的vue源码版本 是包含运行时&编译器的 有能力解析template配置

2.vue_cli

1)脚手架配置

outputDir:""      生产环境构建的目录名称

lintOnSave:false     是否在开发环境下通过 eslint-loader 在每次保存时 lint 代码

    "warning"/true:控制台只会弹出eslint的错误信息!不会影响项目的阅读!

    error: 控制台弹出eslint的错误信息!会影响项目的阅读!  项目启动时也会做eslint检验

    default: 控制台弹出eslint的错误信息!会影响项目的阅读! 项目启动时不会做eslint检验

    false: 关闭检验!

configureWebpack:{}   写原生的webpack配置

devServer:{}    所有开发服务器的配置

2)包的查找机制

  vue脚手架中找包有两种规则:

    1) 配别名

        resolve: {

            alias: {

              vue$: 'vue/dist/vue.runtime.esm.js'

            }

        }

        找别名对应的文件!!!!!

    2) 没有配别名

       去node_modules找对应的包

       找到包之后 找包的package.json文件.module字段

       找到包之后 找包的package.json文件.main字段

       如果以后两个字段都没有 或者 是无效路径

       则找当前包底下的index.js文件

       则找当前包底下的index.json文件

3)vue.config.js

const path = require("path")
function reslove(dir){
    return path.join(__dirname,dir)
}

module.exports = {
    lintOnSave:false,
    //写原生的webpack配置
    configureWebpack:{
        resolve: {
            alias: {
                components:reslove("src/components"),
                pages:reslove("src/pages"),
                router:reslove("src/router"),
                routes:reslove("src/routes"),
            }
        }
    }
}

3.vue_router

1)元信息

meta:{}  配置路由相关的信息,比name功能强大,是一个对象

使用:this.$route.meta.属性名

//定义--> routes
    {path:"/404",component: notFind,meta:{name:"404"}},


//使用
    <div v-if="$route.meta.name !== `404`">

2)路由懒加载

当切换普通路由时,路由会重新加载,此时可以用路由的缓存来实现路由的懒加载

普通定义
// import a from "pages/a.vue"
// import b from "pages/b.vue"
// import notFind from "pages/404/404.vue"

路由懒加载
const a = ()=> import(/* webpackChunkName: "v-a" */"pages/a.vue")
const b = ()=> import(/* webpackChunkName: "v-b" */"pages/b.vue")
const notFind = ()=> import(/* webpackChunkName: "404" */"pages/404/404.vue")

路由懒加载的要求就是: component得是一个函数 这个函数要返回一个promise 这个promise所持有的值得的组件对象!

/* webpackChunkName: "v-a" */--> 自定义路由切换时的名字

3)路由滚动行为

export default new VueRouter({
    routes,
    mode:"history",
    scrollBehavior (to, from, savedPosition) {
        return {x:0,y:0}
    }
})

4)路由守卫

全局路由守卫   在router中定义

//全局路由守卫  前置守卫
router.beforeEach((to,from,next)=>{
    console.log("全局前置守卫",from,to);

    //不管什么路由 都要 跳转到404
    /*if(to.meta.name !== "404"){
        // next("/404")
        next({
            path:"/404"
        })
    }else {
        next()
    }*/

    next()
})

//全局路由守卫  解析守卫
router.beforeResolve((to,from,next)=>{
    console.log("全局解析守卫",from,to);
    next()
})

//全局路由守卫 后置守卫
router.afterEach((to, from) => {
    console.log("全局后置守卫");
})

路由级别的守卫   在routes中定义

    {
        path:"/b",
        component:b,
        beforeEnter: (to, from, next) => {
            console.log("b路由独享级别的守卫",from,to);
            next()
        }
    },

组件级别的路由守卫    在组件中定义

            //组件级别的路由守卫
        beforeRouteEnter(to, from, next) {
            // 在渲染该组件的对应路由被 confirm 前调用
            // 不!能!获取组件实例 `this`
            // 因为当守卫执行前,组件实例还没被创建

            console.log("b组件独享的路由守卫 进入状态",from,to,this);
            next((vm)=>{
                console.log("b.next.()=>{}",vm)
            })
        },
        beforeRouteUpdate(to, from, next) {
            // 在当前路由改变,但是该组件被复用时调用
            // 举例来说,对于一个带有动态参数的路径 /foo/:id,在 /foo/1 和 /foo/2 之间跳转的时候,
            // 由于会渲染同样的 Foo 组件,因此组件实例会被复用。而这个钩子就会在这个情况下被调用。
            // 可以访问组件实例 `this`
            console.log("b组件独享的路由守卫 复用状态",from,to);
            next()
        },

        beforeRouteLeave(to, from, next) {
            // 导航离开该组件的对应路由时调用
            // 可以访问组件实例 `this`
            console.log("a组件独享的路由守卫  离开状态",from,to);
            next()
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值