vue项目记录2

27 阅读1分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 3 天,点击查看活动详情

接上篇,有了准备工作,就可以开始定义路由了,这里记录了我写项目时遇到的问题以及老师教的一些重要的点。

定义底部路由

设置登录和搜索时显示,最开始是这样<Footer v-show="$route.path=='/home' || $route.path=='/search'"></Footer>

  • 优化,用meta:在home和search的路由设置里添加meta: { show: true },而登陆注册页面则为false,则原来Footer组件的判断条件更改为<Footer v-show="$route.meta.show"></Footer>

路由的跳转

  • 声明式导航 (router-link:务必要有to属性)
  • 编程式导航 利用的是组件实例的$router.push||replace 更好用,可以书写自己的业务逻辑

面试题:v-show与v-if区别?

  • v-show:通过样式display控制
  • v-if:通过元素上树与下树进行操作

面试题:开发项目的时候,优化手段有哪些?

  1. v-show|v-if
  2. 按需加载

路由传参

  • params参数:属于路径当中的额一部分,路由需要占位,程序就崩了,属于URL当中一部分
  • query参数:不属于路径当中的一部分,路由不需要占位,写法类似于ajax当中queryString /home?k=v&kv=

假设我们要写个param传参,首先路由中路径上要进行占位path: '/search/:keyword'

  • 字符串形式 this.$router.push("/search/"+this.keyword+"?k="+this.keyword.toUpperCase());
  • 模板字符串 this.$router.push(/search/this.keyword?k={this.keyword}?k={this.keyword.toUpperCase()});`
  • 对象 this.router.push({name:"search",param:{keyword:this.keyword},query:{k:this.keyword.toUpperCase()}}); 同时路由中加上name:“search(例如)”

面试题1:路由传递参数(对象写法)path是否可以结合params参数一起使用?

不可以:路由跳转传参时,对象的写法可以是name、path形式,但是需要注意的是,path这种写法不能与params参数一起使用。

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

如果路由要求传递params参数,但是你就不传params参数,那么url就会出问题,比如本来应该是http://localhost:8080/#/search/... 那么此时就变成了http://localhost:8080/#/?k=QWE可以看到甚至连search路径都没了,所以url出了问题。

  • 如何指定?在配置路由的时候,在占位后面加上一个问号path: '/search/:keyword?'问号就代表params参数可传可不传

面试题3:params参数可传可不传,但是如果传递是空串,如何解决?

使用undefined解决,params参数可以传递、不传递(空字符串) this.$router.push({name:"search",params:{keyword:'' || undefined},query:{k:this.keyword.toUpperCase()}});

面试题4:路由组件能不能传递props数据?

可以

// 布尔值写法
props: true
// 对象写法
props: { a: 1, b: 2 },
 // 函数写法:可以params参数,query参数,通过props传递给路由组件
            props: ($route) => {
                    return { keyword: $route.params.keyword, k: $route.query.k };
                }
    //简写 
    props:($route)=>({keyword:$route.params.keyword,k:$route.query.k});

以上就是第一天的学习内容,还是有很多细节不可忽略的。