vue有哪些路由模式,如何区别?
- 主要有Hash
哈希模式(baseUrll#/path)和H5历史记录模式(baseUrl/path); - 哈希模式:# 后⾯ hash 值的变化,不会导致浏览器向服务器发出请求,浏览器不发出请求,就不会刷新⻚⾯。同时通过监听 hashchange 事件可以知道 hash 发⽣了哪些变化,然后根据 hash 变化来实现更新⻚⾯部分内容的操作。
优点:浏览器直接识别为前端页面内跳转,没有额外的前后端通信过程,不对服务端产生额外 压力;缺点:丑陋;不利于搜索引擎优化(SEO=SearchEnginOptimization);(搜索引擎爬虫认 为各path与首页就是同一个页面,在爬完首页信息后就扬长而去)
- H5/历史记录模式:history 模式的实现,主要是 HTML5 标准发布的两个 API, pushState 和 replaceState ,这两个 API 可以改变 url,但是不会发送请求。这样就可以监听 url 变化来实现更新⻚⾯部分内容的操作。
优点:漂亮;利于SEO优化;缺点:形成额外的前后端通信过程,一定程度上降低了性能,给服务端造成一定的额 外负担;
- 区别:
- url 展示上,hash 模式有 "#",history 模式没有
- 刷新⻚⾯时,hash 模式可以正常加载到 hash 值对应的⻚⾯,⽽ history 没有处理的话,会返回404,⼀般需要后端将所有⻚⾯都配置重定向到⾸⻚路由
- 历史记录模式相对来说更主流一些;
- 历史记录模式下服务端需要一点额外配置,以把前端路由打回给前端自己处理,以Nginx为例:
location /{
#看看服务端有没有对应的API
#如果没有则定性为前端路由(一脚践回给/index.html即前端页面本身去处理)
#$uri(即/path)会回到前端的路由表进行前端路由匹配
try_files $uri $uri/ /index.html;
}
ps: history.pushState()和history.replaceState()。这两个API可以在不进行刷新的情况下,操作浏览器的历史记录。唯一不同的是,前者是新增一个历史记录,后者是直接替换当前的历史记录。
v-if和v-show区别
- 当渲染条件不成立时,vif不渲染(DOM压根不存在),vshow不显示(display:none,无论田间如何,都会渲染)
- 适合用vshow的场景:频繁显隐;
- 适合vif的场景:一锤子买卖
v-model双向数据理解
- 对不同表单绑定不同属性并侦听不同事件
- 对于input类型为text的元素和元素绑定value属性并侦听input事件
- 对于input类型为checkbox的元素和input类型为radio的元素绑定checked属性和侦听change事件
- 对于元素绑定value属性和change事件