经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » JS/JS库/框架 » Vue.js » 查看文章
Blazor和Vue对比学习(进阶.路由导航一):基本使用
来源:cnblogs  作者:functionMC  时间:2022/12/5 8:50:07  对本文有异议

Blazor和Vue都是单文件组件SPA,路由的实现逻辑非常相似,页面路径的改变都是组件的切换,但因为各自语言的特性,在实现方式上有较大差异。

 

一、安装

1、Vue:Router是Vue的一个插件。如果使用Vite脚手架初始化项目,需要手动安装和配置Router插件。如果使用Vue脚手架初始化项目,可以在安装过程中,选择带Vue Router的模板,自动完成Router的安装和配置。Vue脚手架初始化项目的cli命令为【npm init vue@latest】。下面主要简单介绍一下,如何手动安装Router:

  1. //①使用Vite初始化Vue项目,选择vue模板(不用TS,简单点)=================================================
  2. npm init vite@latest
  3. //②完成项目创建后,安装Router========================================================================
  4. npm install vue-router@latest
  5. //③在main.js入口文件中挂载Router插件=================================================================
  6. import { createApp } from 'vue'
  7. import App from './App.vue'
  8. import router from './router'
  9. const app = createApp(App)
  10. app.use(router)
  11. app.mount('#app')
  12. //④在src目录下,新建router文件夹,然后在router目录下,创建路由文件index.js================================
  13. import { createRouter, createWebHistory } from 'vue-router'
  14. import HomeView from '../views/HomeView.vue'
  15. const routes = [
  16. {
  17. path: '/',
  18. component: HomeView
  19. }
  20. ]
  21. const router = createRouter({
  22. history: createWebHistory(),
  23. routes
  24. })
  25. export default router

 

2、Blazor:创建Blazor项目时,可以直接使用路由,不需要安装。

 

 

二、基本使用

1、Vue路由的基本使用:

①在main.js中配置路由映射,并创建和导出路由管理器。

  1. import { createRouter, createWebHistory } from 'vue-router'
  2. import HomeView from '../views/HomeView.vue'
  3. //配置路由映射,是一个对象数组。每个路由都需要映射到一个组件,路由的常用属性为:
  4. //①path属性为路由(小写,多单词时用“-”连接);
  5. //②name属性为路由别名,导航时即可以用path也可以用name;
  6. //③component属性为组件;
  7. //配置组件方式一(静态导入),先import组件文件的组件对象,然后将组件对象赋值给component属性
  8. //配置组件方式二(动态导入),component属性值是一个Lambda表达式,使用import方法导入组件文件。
  9. //使用动态导入,第一次进入页面时,才会加载,懒加载,推荐方式
  10. const routes = [
  11. {
  12. path: '/',
  13. name: 'home',
  14. component: HomeView
  15. },
  16. {
  17. path: '/about',
  18. name: 'about',
  19. component: () => import('../views/AboutView.vue')
  20. }
  21. ]
  22. //配置路由管理器(路由对象),routes是【routes:routes】的简写,就是上面代码创建的路由映射对象
  23. const router = createRouter({
  24. history: createWebHistory(import.meta.env.BASE_URL),
  25. routes
  26. })
  27. //导出路由管理器
  28. export default router

 

②在根组件App.vue中(也是母版页),使用router-view组件布局组件出口(显示组件的区块,相当于一个占位符),使用router-link组件进行导航。

  1. <script setup>
  2. import { RouterLink, RouterView } from 'vue-router'
  3. </script>
  4.  
  5. <template>
  6. <header>
  7. <div class="wrapper">
  8. <nav>
  9. <!--使用 router-link 组件进行导航 -->
  10. <!--通过传递 `to` 来指定链接 -->
  11. <!--使用html的a标签也可以导航,但会刷新页面。RouterLink只会切换组件,但不会刷新页面 -->
  12. <RouterLink to="/">Home</RouterLink>
  13. <RouterLink to="/about">About</RouterLink>
  14. </nav>
  15. </div>
  16. </header>
  17. <!-- RouterView组件为路由出口 -->
  18. <!-- 路由匹配到的组件将渲染在这里 -->
  19. <RouterView />
  20. </template>

 

 

2、Blazor路由的基本使用:

①在根组件App.razor中,进行路由的各项配置。 

  1. <!--在Router组件相当于Vue中的路由管理器,通过它路由到指定组件-->
  2. <!--由于Blazor的路由映射分散到各个组件中进行设置,所以Router要通过反射拿到所有路由映射,AppAssembly属性指定扫描哪些程序集。-->
  3. <!--可以通过【AdditionalAssemblies="new[] { typeof(Component1).Assembly }"】,扫描多个程序集-->
  4. <!--Blazor和Vue设置路由映射的差异是比较大的,Vue集中到路由文件Router/index.js中设置,而Blazor则分散到各个组件中,并通过反射拿到程序集的所有路由映射数据-->
  5. <Router AppAssembly="@typeof(App).Assembly">
  6.  
  7. <!--Found指根据请求路径找到路由映射的组件后,执行RouteView,并传入路由数据。路由数据routeData包括组件、路由参数等信息。-->
  8. <!--RouteView组件指定路由出口所在的位置(母版页中的@Body占位符),并接收路由数据。Blazor页面可单独设置母版页,但如未设置,则使用DefaultLayout设置的默认母版页。-->
  9. <!--FocusOnNavigate设置导航到页面后,焦点设置到哪个页面元素上,如下例会将页面焦点移到h1元素上-->
  10. <Found Context="routeData">
  11. <RouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)" />
  12. <FocusOnNavigate RouteData="@routeData" Selector="h1" />
  13. </Found>
  14. <!--如果未找到请求路径映射的组件,指显示以下指定内容-->
  15. <NotFound>
  16. <PageTitle>Not found</PageTitle>
  17. <!--LayoutView组件指定的母版页,标签的内容渲染到母版页@Body占位符所在的位置-->
  18. <LayoutView Layout="@typeof(MainLayout)">
  19. <p role="alert">Sorry, there's nothing at this address.</p>
  20. </LayoutView>
  21. </NotFound>
  22. </Router>

 

②在页面上,通过@page指令设置路由映射。@page实际上是特性,等价于@attribute [Route(Constants.CounterRoute)]。从中也可以看出,Router组件是通过反射拿到指定程序集的路由映射数据。

  1. <!--Index.razor(本质上是组件)。@page可以设置组件和路由的一对多关系,如下列中的请求路径"/"和"/index"都会导航到Index组件-->
  2. @page "/"
    @page "/index"
  3. <PageTitle>Index</PageTitle>
  4. ......
  5. <!--Counter.razor页面(本质上是组件)-->
  6. @page "/counter"
  7. <PageTitle>Counter</PageTitle>
  8. ......

 

在母版页上(默认母版页为Share/MainLayout.razor),使用@Body指令布局组件出口(显示组件的区块,相当于一个占位符),使用Navlink进行导航

  1. <!--母版页须派生自LayoutComponentBase-->
  2. @inherits LayoutComponentBase
  3. <PageTitle>MainLayout默认母版页</PageTitle>
  4. <div>
  5. <div>
  6. <!--NavLink组件设置导般,除a标签的功能之外,还能够显示活动页-->
  7. <!--当前页为活动页时,才使用nav-link样式-->
  8. <!--Match属性指活动页的判断方式,All指路径与href值完全匹配时才是活动页,而Prefix指只有任一段前缀匹配,就是活动页 -->
  9. <div>
  10. <NavLink class="nav-link" href="" Match="NavLinkMatch.All">Home</NavLink>
  11. </div>
  12. <div>
  13. <NavLink class="nav-link" href="counter" Match="NavLinkMatch.Prefix" target="_blank">Counter</NavLink>
  14. </div>
  15. </div>
  16. <div>
  17. <!--路由出口的占位符,在这个位置显示切换的页面-->
  18. <main>@Body</main>
  19. </div>
  20. </div>

 

原文链接:https://www.cnblogs.com/functionMC/p/16941420.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号