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.2 重写VueRouter.prototype.push方法
let originPush = VueRouter.prototype.push;
VueRouter.prototype.push = function (location, resolve, reject) {
  if (resolve && reject) {
    /* call方法和apply方法的区别:
      相同点:都可以调用一次函数,并改变一次函数的上下文,this指向
      不同点:call传参的时候,使用逗号隔开,apply是以数组形式传参
    */
    originPush.call(this, location, resolve, reject)
  } else {
    originPush.call(this, location, () => { }, () => { })
  }
};
/* 重写replace方法 */
let originReplace = VueRouter.prototype.replace;
VueRouter.prototype.replace = function (location, resolve, reject) {
  if (resolve && reject) {
    originReplace.call(this, location, resolve, reject)
  } else {
    originReplace.call(this, location, () => { }, () => { })
  }
};

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

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}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值