当前位置: 首页 > Web前端 > vue.js

vue路由vue-router

时间:2023-04-01 02:05:25 vue.js

完整网址http://localhost:80/MzyPractice/chapter10/testb.php?name=Mei&radio=Test#dowel1,传输协议:http,https2,域名:localhost3,端口:默认if不填端口号80使用4.路径:/MzyPractice/chapter10/testb.php。/表示根目录5、查询参数:?name=Mei&radio=Test6。哈希值:#dowel前端路由1.什么是前端路由?是相对于后端路由的概念,是开发SPA单页应用模块的必备核心。本质:路由地址与组件的映射2.好处更好的用户体验,更好的性能3.实现原理Url-basedhash基于html5历史模式apihash:页面不刷新,有访问记录Vue-router官方路由和Vue.js核心深度集成,开发SPA推荐介绍支持hash模式和html5history模式支持嵌套路由支持程序化路由支持路由参数支持命名路由步骤1.安装vue-routernpminstallvue-router--save2.importvue-router,并安装插件importVuefrom'vue'importVueRouterfrom'vue-router'Vue.use(VueRouter)3.配置路由规则,创建路由实体importFoofrom'./views/Foo'import好从'。/views/Good'constrouter=newVueRouter({routes:[//路由规则是一个对象,至少包含路径和组件两个属性{path:'/foo',component:Foo},{path:'/good',component:Good}]})4.关联Vue实例constapp=newVue({router}).$mount('#app')最佳实践1.添加路由规则目录routes2。为了性能,必须使用lazyLoad//src/routes/base.js中的代码如下:exportdefault[{path:'baseLogin',name:'baseLogin',component:()=>import('@/views/base/Login.vue')}];//src/router.js中的代码如下:importbasefrom'@/routes/base.js'constrouter=newVueRouter({routes:[//一条路由规则是一个对象,至少包括path和component两个属性..base]})exportdefaultrouterrouteredirectionconstrouter=newVueRouter({routes:[//路由规则是一个对象,至少包含路径和组件两个属性{path:'/',redirect:'/foo'},{path:'/foo',component:Foo},{path:'/good',component:Good}]})嵌套路由本质:组件中嵌套组件,父组件必须存在嵌套可以显示子组件//路由规则定义constrouter=newVueRouter({routes:[{path:'/user/:id',component:User,children:[{//当/user/:id/profile匹配成功,//UserProfile会渲染到User的path:'profile',component:UserProfile},{//当/user/:id/posts匹配成功//UserPosts会渲染到User的:'posts',组件:UserPosts}]}]})constUser={template:`

User{{$route.params.id}}

`}注释nestedr有什么区别在一个组件中导出和导入另一个组件??1、嵌套路由其实和iframe类似,页面是嵌套页面,子页面可以动态变化。2、组件中使用了子组件,子组件不可更改。只有传递参数才能改变子组件的内部逻辑。动态路由的本质:传递url参数,但不传递查询字符串参数constrouter=newVueRouter({routes:[//动态路径参数以冒号开头{path:'/user/:id',component:User}]})//用户组件获取参数的方法更高效更好的用户体验,所以必须复用组件实例,这又导致了另一个问题:组件实例的生命周期钩子不会被再次调用,所以用watch监听$route来解决constUser={template:'...',watch:{$route(to,from){//响应路由变化...}}}路由导航1、声明式导航跳转2。程序化导航//跳转到路由this.$router.push({path:'/home'})//替换为路由this.$router.replace({path:'/home'})//转发/backthis.$router.go(3)注意事项path不能和param一起使用,param是一个动态路由参数query是一个查询字符串,在路由前可以和path、name一起使用加'/'和notadding尽量不要使用路径导航,最佳实践:使用name来导航命名路由所谓命名路由:在配置路由规则时,为路由规则配置一个name属性constrouter=newVueRouter({routes:[//动态路径parameters以冒号开头{path:'/user/:id',name:'user',component:User}]})namedview相当于一个有多个iframe嵌套的页面,每个iframe都是兄弟关系注意:如果命名视图和嵌套路由同时使用,会很混乱。出口与路由规则的对应关系组件的出口对应页面嵌套的路由规则