• vue之小知识罗列


    一、src文件(程序代码文件)的文件存放位置:

       1.assets文件夹,一般也是放静态资源的(一般是放多个组件公用的静态资源),但是,放在assets文件夹中的资源,在webpack打包的时候会当作一个模块,打包到js文件中去;

        2.components文件夹,一般是防止非路由组件(全局组件);

        3.App.vue 唯一的根组件,Vue中的组件都是 .vue文件;

        4.main.js 程序的入口文件,也是整个程序最先执行的问价;

        5.babel.config.js 配置文件(babel相关的)

        6.package.json文件:认为是项目的身份证,记录项目叫做什么,项目中有哪些依赖,项目怎么运行等;

        7.readme.md是项目运行说明,可以看下怎么运行指令

    二、$router 和  $route 的区别

    * $route 一般用来获取路由信息【路径、query、params等】

    * $router 一般进行编程式导航进行路由跳转[push/replace]

    三、路由跳转的方式:

    * 声明式导航 router-link ,可以进行路由的跳转

    * 编程式导航 push|replace,可以根据路由跳转,他的实质就是一个a标签,

    注意:push 会产生历史记录,可以回退或者前进

    replace 是覆盖不会产生历史记录

    * 编程式导航可以进行一些逻辑校验;

    * 声明式导航能做的,编程式导航都可以做;还能加入业务逻辑

    1.编程式导航路由在跳转的到当前路由(参数不变的情况下),多次执行会抛出vue-router.esm.js?3423:2065 Uncaught (in promise) NavigationDuplicated错误?

    答:--声明式导航没有类似的问题,因为在vue-router底层已经处理了;

    因为在vue-router3.5版本引入了Promise;this.$router.push()返回的是一个Promise对象,需要传入回调函数,捕获失败的时候的错误;

    方法一:this.$router.push({},()=>{},()=>{});

    方法二:重写全局的push | replace 方法

    1. //1.2 重写VueRouter.prototype.push方法
    2. let originPush = VueRouter.prototype.push;
    3. VueRouter.prototype.push = function (location, resolve, reject) {
    4. if (resolve && reject) {
    5. /* call方法和apply方法的区别:
    6. 相同点:都可以调用一次函数,并改变一次函数的上下文,this指向
    7. 不同点:call传参的时候,使用逗号隔开,apply是以数组形式传参
    8. */
    9. originPush.call(this, location, resolve, reject)
    10. } else {
    11. originPush.call(this, location, () => { }, () => { })
    12. }
    13. };
    14. /* 重写replace方法 */
    15. let originReplace = VueRouter.prototype.replace;
    16. VueRouter.prototype.replace = function (location, resolve, reject) {
    17. if (resolve && reject) {
    18. originReplace.call(this, location, resolve, reject)
    19. } else {
    20. originReplace.call(this, location, () => { }, () => { })
    21. }
    22. };

    四、路由传参的问题(面试题)

    1.面试题一:params传参是否可以和path一起使用

    答:params传参得方式,不可以结合path去跳转传参;只可以配合name得方式。进行跳转传参;

    params传参得写法:{name:'',params:{key:value}}

    2.面试题二:如何指定params参数可传可不传?

    答:在路由配置项中,路径占位符后面加上一个 ?

    3.面试题三:如果params如果传参的是空字符串。如何解决?

    答:使用undefined来解决;

    this.$router.push(name:'search',params:{key:''||undefined},query:{k:'jack'});

    使用undefined时,''空字符串的隐式转换是false;

    4.面试题四:路由组件是否可以传递props数据?

    答:可以,

    * 在路由配置时配置props:true;但是只能接收params参数;

    * 在配置路由的props项时,使用箭头函数的形式,返回参数

      props:($route)=>{keyword:$route.params.keyword,k:$route.query.k}

  • 相关阅读:
    汽车以太网协议栈
    开源的java 代码分析库介绍
    一个很少见但很有用的SQL功能
    SQL函数的格式、顺序、流程
    KUKA库卡机器人编程语言是什么?
    Chrome浏览器书签同步配置方法
    成都优优聚为什么值得信任?
    即时通讯场景下安全合规的实践和经验
    吃鸡高手必备!这些技巧帮你提高战斗力!
    【毕业季】平凡的求学生涯,回顾与启程
  • 原文地址:https://blog.csdn.net/weixin_67642008/article/details/126400055