vue 传参 微信_vue-router 你可能忽略的知识点

vue-router相信大家都不陌生,并且很多都有实战经验。可能有很多你忽略的一些点。

1、丑陋的hash值

vue-router 默认 hash 模式 —— 使用 URL 的 hash 来模拟一个完整的 URL,于是当 URL 改变时,页面不会重新加载。

const router = new VueRouter({
mode: 'history', 
routes: [...]
})

当你使用 history 模式时,URL 就像正常的 url,例http://yoursite.com/user/id,也好看!但是这种模式需要后端支持,否则就会返回404,所以最好在服务器端加一个覆盖所有情况的候选资源:匹配不到就返回同一个index.html,即你app的依赖页面。

nginx的配置:

location / {
try_files $uri $uri/ /index.html;
}

但是这里有个问题你所有的访问都只会跳转到index.html页面了,这样就没有达到路由的目的了。别担心,看下面的例子

const NotFound = { template: '<p>Page not found</p>' }
const Home = { template: '<p>home page</p>' }
const About = { template: '<p>about page</p>' }
const routes = {  '/': Home,  '/about': About}
new Vue({ el: '#app',  
data: {  currentRoute: window.location.pathname //获取当前地址},computed: {ViewComponent () {    
return routes[this.currentRoute] || NotFound}},render (h) { return h(this.ViewComponent) }
})

这样就会根据当前地址去找到对应的路由跳转。

2、动态路由匹配

(1)路由参数匹配

假设我们有个页面,只是想要根据不同的参数来显示不同的页面,如:/user/foo 和 /user/bar 都将映射到相同的路由,但是根据参数foo/bar来显示不同的页面。

const User = {
template: '<div>User</div>'
}const router = new VueRouter({
routes: [
// 动态路径参数 以冒号开头{ path: '/user/:id', component: User }]
})

“路径参数”使用冒号 : 标记,当匹配到一个路由时,参数值会被设置到 this.

6f2433b4f6539a346dd37b7fed8f6a86.png

3、同级展示多个视图

有时候想同时 (同级) 展示多个视图,而不是嵌套展示,例如创建一个布局,有 sidebar (侧导航) 和 main (主内容) 两个视图,这时就可以使用命名视图了。如果 router-view 没有设置name名字,那么默认为 default。

<router-view class="view one"></router-view>
<router-view class="view two" name="a"></router-view>
<router-view class="view three" name="b"></router-view>

一个视图使用一个组件渲染,因此对于同个路由,多个视图就需要多个组件。确保正确使用 components 配置 (带上 s):

const router = new VueRouter({
routes: [
{
path: '/',
components: {
default: Foo, //default 默认的router-view名字
a: Bar,
b: Baz
}
}
]
})

4、重定向和别名
“重定向”的意思是,当用户访问 /a时,URL 将会被替换成 /b,然后匹配路由为 /b。 routes 配置来完成,下面例子是从 /a 重定向到 /b:

const router = new VueRouter({
routes: [{ path: '/a', redirect: '/b' }]
})

重定向的目标也可以是一个命名的路由:

const router = new VueRouter({
routes: [{ path: '/a', redirect: { name: 'foo' }}]
})

甚至是一个方法,动态返回重定向目标:

const router = new VueRouter({
routes: [{ path: '/a', redirect: to => {
// 方法接收 目标路由 作为参数
// return 重定向的 字符串路径/路径对象}}]
})

注意导航守卫并没有应用在跳转路由上,而仅仅应用在其目标上。在下面这个例子中,为 /a 路由添加一个 beforeEach 或 beforeLeave 守卫并不会有任何效果。

别名:/a 的别名是 /b,意味着,当用户访问 /b 时,URL 会保持为 /b,但是路由匹配则为 /a,就像用户访问 /a 一样。

const router = new VueRouter({routes: [{ path: '/a', component: A, alias: '/b' }]
})

5、路由组件传参

在组件中使用 route.params可以在组件内使用。因此我们可以根据参数去更新我们的模版。注意:当使用路由参数跳转的时候,原来的组件实例会被复用。(不会销毁再创建,因此组件的生命周期钩子不会再被调用)3、同级展示多个视图有时候想同时(同级)展示多个视图,而不是嵌套展示,例如创建一个布局,有sidebar(侧导航)和main(主内容)两个视图,这时就可以使用命名视图了。如果router−view没有设置name名字,那么默认为default。¨G4G一个视图使用一个组件渲染,因此对于同个路由,多个视图就需要多个组件。确保正确使用components配置(带上s):¨G5G4、重定向和别名“重定向”的意思是,当用户访问/a时,URL将会被替换成/b,然后匹配路由为/b。routes配置来完成,下面例子是从/a重定向到/b:¨G6G重定向的目标也可以是一个命名的路由:¨G7G甚至是一个方法,动态返回重定向目标:¨G8G注意导航守卫并没有应用在跳转路由上,而仅仅应用在其目标上。在下面这个例子中,为/a路由添加一个beforeEach或beforeLeave守卫并不会有任何效果。别名:/a的别名是/b,意味着,当用户访问/b时,URL会保持为/b,但是路由匹配则为/a,就像用户访问/a一样。¨G9G5、路由组件传参在组件中使用route 会使之与其对应路由形成高度耦合,从而使组件只能在某些特定的 URL 上使用,限制了其灵活性。使用 props 将组件和路由解耦。

const User = {props: ['id'],template: '<div>User {{ id }}</div>'
}
const router = new VueRouter({routes: [{ path: '/user/:id', component: User, props: true },// 对于包含命名视图的路由,你必须分别为每个命名视图添加 `props` 选项:{path: '/user/:id',components: { default: User, sidebar: Sidebar },props: { default: true, sidebar: false }}]
})

6、过渡动效

是基本的动态组件,所以我们可以用 组件给它添加一些过渡效果:

<!-- 使用动态的 transition name -->
<transition :name="transitionName">
<router-view></router-view>
</transition>

7、数据获取

有时候,进入某个路由后,需要从服务器获取数据。例如,在渲染用户信息时,你需要从服务器获取用户的数据。我们可以通过两种方式来实现:

导航完成之后获取:先完成导航,然后在接下来的组件生命周期钩子中获取数据。在数据获取期间显示“加载中”之类的指示。created

导航完成之前获取:导航完成前,在路由进入的守卫中获取数据,在数据获取成功后执行导航。beforeRouteEnter

从技术角度讲,两种方式都不错 —— 就看你想要的用户体验是哪种。

8、滚动行为

使用前端路由,当切换到新路由时,想要页面滚到顶部,或者是保持原先的滚动位置,就像重新加载页面那样。 vue-router 能做到,而且更好,它让你可以自定义路由切换时页面如何滚动。

注意: 这个功能只在支持 history.pushState 的浏览器中可用。

当创建一个 Router 实例,你可以提供一个 scrollBehavior 方法:

const router = new VueRouter({
routes: [...],scrollBehavior (to, from, savedPosition) {
// return 期望滚动到哪个的位置}
})

scrollBehavior 方法接收 to 和 from 路由对象。第三个参数 savedPosition 当且仅当 popstate 导航 (通过浏览器的 前进/后退 按钮触发) 时才可用。

// 对于所有路由导航,简单地让页面滚动到顶部。
scrollBehavior (to, from, savedPosition) {
return { x: 0, y: 0 }
}

如果你觉得本文对您有用可扫码关注我的微信公众号,会为您带来更多的精彩内容

14a3270b1293bf8305de3ad21c4d96c9.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/338469.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

适合计算机64位的cad,【1人回答】求一个能适用于CAD2008的纬地,我的电脑是Win7 64位的-3D溜溜网...

回答&#xff1a;下载方法&#xff1a;1、建立临时目录&#xff0c;如 CAD20082、下载AutoCAD2008安装软件&#xff0c;将文件复制到CAD2008目录下。3、将 CAD2008 文件夹中的 zh-cn 文件夹改名为 en-us&#xff1b;4、下载“AutoCAD 2008 64 位补丁包(下载地址&#xff1a;ACA…

C |格式化输出与变量类型

C语言 格式化输出与变量类型 1、格式化输出在PHP里面&#xff0c;我们一般都是用echo和var_dump以及print_r等来输出调试语句&#xff0c;在&#xff23;语言中一般用printf来输出&#xff0c;不过由有点特殊&#xff0c;你需要在输出的时候指定输出的数据类型&#xff1a;#in…

n76e885_新唐N76E003,N76E616烧录,调试各种问题集【坑集】

新唐N76E003&#xff0c;N76E616烧录&#xff0c;调试各种问题集【坑集】芒果 • 2018 年 10 月 24 日这篇博文用来记录学习新唐单片机时遇到的问题以及解决的过程和方法。当然也有各种坑。希望这篇文章有机会能够帮助到遇到到同样问题的朋友。1. **可以和STC单片机一样使用串口…

注解默认继承_默认方法和多重继承

注解默认继承最近卢卡斯JOOQ埃德尔发布和文章有关嵌套类及其使用。 这是一个有趣的话题&#xff0c;他的文章一如既往地有趣并且值得一读。 只有一个简短的声明我无法同意&#xff0c;我们有一个简短的回复链&#xff0c;导致了默认方法&#xff0c;以及为什么不能有类似的东西…

暑期社会实践服务器维护,寒假网络维护社会实践报告

今年由于来学校返校报到的时间比较晚&#xff0c;我早到学校一星期了&#xff0c;就在学校附近的网吧做了一星期的网络维护社会实践&#xff0c;把一星期实践所学到的东西和遇到的问题做个总结&#xff1a;一、网络简介网络按照地域可分为&#xff1a;局域网、城域网与广域网。…

信工干货||C语言输入输出语句

数据输入与输出C语言无I/O语句&#xff0c;I/O操作由函数实现putchar( ) getchar( ) printf( ) scanf( ) puts( ) gets( )#include或#include “stdio.h”数据输出字符输出函数格式&#xff1a;putchar&#xff08;c&#xff09;参数&#xff1a;c为字符型或整型常量、变量或表…

如何设置网件gs108e_Netgear 网件 EAX80 AX6000规格 无线扩展器 开箱拆解评测

前言众所周知&#xff0c;国行网件RAX系列默认中国区&#xff0c;这就导致了路由器的发射功率不会高&#xff0c;所以很多人觉得国行RAX无线路由器信号覆盖不尽如意。为了解决这个问题&#xff0c;本次为大家介绍一款WiFi 6信号扩展器—EAX80(官网链接)&#xff0c;它可以将高强…

maven 可执行 jar_Maven提示:有关可执行jar的所有信息

maven 可执行 jarMaven提示&#xff1a;有关可执行jar的所有信息 可执行jar是分发代码时非常有用的工具。 这意味着&#xff0c;只要将Java安装在客户端计算机上&#xff0c;至少在Windows和Mac上&#xff0c;您的用户只需双击jar即可启动程序。 或者&#xff0c;在命令行上&am…

饥荒海难创建显示专用服务器,饥荒创建世界时一直显示启动服务器 | 手游网游页游攻略大全...

发布时间&#xff1a;2017-08-07TGP版怎么建立服务器呢?各位知道在TGP里如何创建服务器吗?这里给大家带来了TGP版服务器创建开服方法,教大家TGP如何创建服务器,还不会的玩家,一起来了解下吧. >&gt ...标签&#xff1a;攻略发布时间&#xff1a;2015-12-20联机过程中有…

C语言 | 6种常用的转换工具函数盘点

字符串转十六进制代码实现&#xff1a;void StrToHex(char *pbDest, char *pbSrc, int nLen){ char h1,h2; char s1,s2; int i; for (i0; i2; i) { h1 pbSrc[2*i]; h2 pbSrc[2*i1];s1 toupper(h1) - 0x30; //toupper 转换为大写字母 if (s1 > 9) s1…

企业联合体的形式_联合体如何联合?——总包新政下,联合体如何联合?系列三...

以下文字为根据科思顿企业咨询管理(上海)有限公司合伙人胡建于2020年4月10日的网课核心内容摘录&#xff0c;因内容较多&#xff0c;分三个系列发布&#xff0c;包括&#xff1a;系列之一、为什么政策突变&#xff1f;系列之二、联合体是什么&#xff1f;系列之三、联合体如何联…

netflix_学习Netflix管理员–第1部分

netflix最近几天&#xff0c;我一直在与Netflix Governator合作&#xff0c;并尝试使用Governator尝试一个小样本&#xff0c;以将其与Spring Framework的依赖项注入功能集进行比较。 以下内容并不全面&#xff0c;我将在下一系列文章中对此进行扩展。 因此&#xff0c;对于没…

laravel ajax ip,怎么在Laravel中利用AJAX动态刷新部分页面

怎么在Laravel中利用AJAX动态刷新部分页面发布时间&#xff1a;2021-02-17 13:12:43来源&#xff1a;亿速云阅读&#xff1a;119作者&#xff1a;Leah怎么在Laravel中利用AJAX动态刷新部分页面&#xff1f;很多新手对此不是很清楚&#xff0c;为了帮助大家解决这个难题&#xf…

vue2 怎么用vite_Vue2和Vue3开发组件有什么区别

我们一直都有关注和阅读很多关于Vue3的新特性和功能即将到来。但是我们没有一个具体的概念在开发中会有如何的改变和不一样的体验。还有一些童鞋已经开始又慌又抓狂了 -- “又要开始学新的写法了 (ノToT )ノ ~┻┻”。所以这里我使用Vue2和Vue3开发一个简单的表格组件来展示一下…

C语言中实现边沿函数算法及应用,这是抛弃PLC留下的痛!

很多从事PLC编程的朋友都知道&#xff0c;不管是什么品牌的PLC&#xff0c;都有上升沿和下降沿指令。❤那么什么情况下我们才会使用或必须使用边沿信号呢&#xff1f;边沿信号我们又如何获取呢&#xff1f;如图1&#xff0c;任何一个开关信号&#xff08;或数字信号&#xff09…

jboss将war放在那?_将策略插入JBoss Apiman

jboss将war放在那?JBoss apiman项目 本周刚刚发布了1.0.3.Final 。 它主要是一个错误修复版本&#xff0c;仅进行了一些相对较小的改进。 自从我上次写博客以来&#xff0c;其中的一项特殊功能就是对插件的支持。 这些插件可以轻松添加到系统中&#xff0c;以提供其他功能。 …

服务器系统装驱动精灵,云服务器安装驱动精灵

云服务器安装驱动精灵 内容精选换一换您可以选择在云服务器上安装一个或多个应用。如需在云服务器上安装其他应用&#xff0c;请参考如下操作进行添加。暂时仅允许支持VR应用的云服务器安装VR应用。暂时仅允许支持3D应用的云服务器安装3D应用。暂时仅允许支持VR应用的云服务器有…

注入器 过检测_连云港管道检测服务

连云港管道检测服务 管道稀释淤泥施工时应采用专业高压水车将两个检查井注入室内灌水&#xff0c;并使用挖泥机将检查井中的污泥与排污管混合&#xff0c;以稀释污泥为目的. 如果是手工作业应与机械作业配合以不断搅拌污泥&#xff0c;直到将其稀释到水中为止.管道吸污。 公司备…

lock.lock_HibernateCascadeType.LOCK陷阱

lock.lock介绍 引入了Hibernate 显式锁定支持以及Cascade Types之后 &#xff0c;就该分析CascadeType.LOCK行为了。 Hibernate锁定请求触发内部LockEvent 。 关联的DefaultLockEventListener可以将锁定请求级联到锁定实体子级。 由于CascadeType.ALL也包括CascadeType.LOCK …

浅谈面向对象思想下的 C 语言

如何使用OO思维方式面向对象(object Oriented&#xff0c;简称&#xff1a;OO)在于用“找对象”的方式去规划和描述问题。一、怎样“找对象” &#xff08;思维过程&#xff09;“对象”是具有共性的一个群体。以 L298N 控制马达的官方推荐方法为例&#xff0c;控制的共性在于&…