答题思路
- 总分的逻辑
- 结合实际
(1)history和hash模式区别:
-
它们都实现页面的跳转功能(跳转页面)
-
它们的区别体现在3个方面:
a.外观 : history模式的path路径不带#号,hash有#号 b.原理 : hash模式使用onhashchange , history使用pushState , 导致有兼容性差异。hash模式兼容性好(对浏览器的兼容性好,onhashchange) , history的兼容性比hash模式差一些 (底层使用的API是html5的API :pushState ,对浏览器有一定要求) c.项目上线后有区别。history开发的项目,在打包上线之后,需要后端配置来支持,不然就会出现404页面。官网上有介绍
-
我在开发中,没有特殊的要求,一般就用hash(默认值)。如果要修改模式,就改mode:"history"
-
为啥会有404页面?
a.history访问这个地址时 , http://www.xxx.com/find , 后端收到的req.url 是/find , 但是我们是单页面应用程序 , 我们只有一个资源是index.html ,没有资源叫/find , 所以就会报404 b.hash访问这个地址时 , http://www.xxx.com/#/find , 后端收到的req.url 是/ , 有一个资源是index.html ,能正常显示
(2)v-if 和v-show的区别
相同点:
都是控制元素的显示和隐藏
区别:
体现在3个方面
- 原理不同:
v-if 是通过向 DOM 树内创建和销毁来达到元素的显示和隐藏(触发生命周期,挂载前挂载后)
v-show 是通过控制元素的css样式display:none;来达到元素的显示和隐藏
- 应用场景不同
如果元素需要频繁的显示和隐藏则使用v-show
切换不频繁,需要把组件销毁掉则使用v-if (不能和v-for连用)
- v-if 可以配合其他指令来使用
v-if 可以配合的else,if else一起来使用