Vue35 路由
1 简介
vue-router是vue的一个插件,专门用来实现SPA应用。SPA也就是单页Web应用,特点是:整个应用只有一个完整的页面,点击页面中的导航链接不会刷新页面,只会做页面的局部更新,数据需要通过ajax请求获取
2 路由的基本使用
先来个简单的示例,点击About和Home路由到不同的额组件,展示组件内容
2.1 安装
注意vue2对应router3,vue3对应router4
npm i vue-router@3 #安装的router3
2.2 配置路由器
在src下创建一个router文件夹,再创建一个index.js
//引入router
import VueRouter from 'vue-router' // 引入组件
import AboutComp from '../pages/AboutComp'
import HomeComp from '../pages/HomeComp' // 创建并暴露一个路由器-路由器里面配置路由
export default new VueRouter({
routes:[
{
path:'/about', //路径,可随便定义-但是要和<router-link>标签里面的to属性对应上
component:AboutComp //组件名
},
{
path:'/home',
component:HomeComp
}
]
})
2.3 main.js配置router到vm
import Vue from 'vue'
import App from './App.vue'
import VueRouter from 'vue-router' // 引入VueRouter
import router from './router' // 引入路由器 Vue.config.productionTip = false Vue.use(VueRouter) // 应用Router插件 new Vue({
el:'#app',
render: h => h(App),
router:router //配置router到vm上
})
2.4 组件使用路由
1)app.vue
使用路由,主要涉及到两个标签<router-link>和<router-view>
1、router-link标签就相当于导航(最后会被解析成一个a标签)
active-class="active":点击的时候高亮
to:点击的时候路由到哪个组件,这里的值和配置路由器里面的路由的path的值要对应
<router-link class="list-group-item"
active-class="active" to="/home">Home</router-link>
2、<router-view>
路由到的组件要显示在哪里,就在哪里写这个标签
<template>
<div>
<div class="row">
<div class="col-xs-offset-2 col-xs-8">
<div class="page-header"><h2>Vue Router Demo</h2></div>
</div>
</div>
<div class="row">
<div class="col-xs-2 col-xs-offset-2">
<div class="list-group">
<!-- Vue中借助router-link标签实现路由的切换 -->
<router-link class="list-group-item"
active-class="active" to="/about">About</router-link>
<hr/>
<router-link class="list-group-item"
active-class="active" to="/home">Home</router-link>
</div>
</div>
<div class="col-xs-6">
<div class="panel">
<div class="panel-body">
<!-- 指定组件的呈现位置 -->
<router-view></router-view>
</div>
</div>
</div>
</div>
</div>
</template> <script>
export default {
name:'App'
}
</script>
2)AboutComp.vue
<template>
<h2>我是About的内容</h2>
</template> <script>
export default {
name:'AboutComp'
}
</script>
3)HomeComp.vue
<template>
<h2>我是Home的内容</h2>
</template> <script>
export default {
name:'HomeComp'
}
</script>
4)注意事项
注意事项:一般我们把路由组件放在src/pages,其它组件放在src/components下面。
2.5 效果
点击About
点击Home
3 路由切换时组件的情况
默认情况下,从一个组件切换到另一个组件,原组件是会被销毁的
当然,也可以通过配置使它不被销毁而是缓存起来(后面会说到)
在AboutComp里面加个destoryed函数
<template>
<h2>我是About的内容</h2>
</template> <script>
export default {
name:'AboutComp',
destroyed() {
console.log('AboutComp正要被销毁')
},
}
</script>
当点击了About,再点击Home时,About的destroyed函数被调用,说明它被销毁了
4 $router和$route
$router是路由器对象,只有一个。$route是路由对象,每个组件都有自己的route对象。
它们里面有很多我们需要的数据。
在app.vue和AboutComp.vue和HomeComp.vue都加上一个mounted函数,打印$router和$route。
1)app.vue
<script>
export default {
name:'App',
mounted() {
console.log('app@' , this.$router)
console.log('app@' , this.$route)
},
}
</script>
2)AboutComp.vue
<script>
export default {
name:'AboutComp',
mounted() {
console.log('AboutComp@' , this.$router)
console.log('AboutComp@' , this.$route)
},
}
</script>
3) HomeComp.vue
<script>
export default {
name:'HomeComp',
mounted() {
console.log('HomeComp@' , this.$router)
console.log('HomeComp@' , this.$route)
},
}
</script>
5 多级路由
如在AboutComp组件加一个子路由NewsComp
5.1 配置;路由器index.js
在about路由里面配置一个属性childrens,它是一个数组,里面又可以写多个路由配置对象(注意childrens里面的对象的path开头不要/)
//引入router
import VueRouter from 'vue-router' // 引入组件
import AboutComp from '../pages/AboutComp'
import HomeComp from '../pages/HomeComp'
import NewsComp from '../pages/NewsComp' // 创建并暴露一个路由器-路由器里面配置路由
export default new VueRouter({
routes:[
{
path:'/about', //路径,可随便定义-但是要和<router-link>标签里面的to属性对应上
component:AboutComp, //组件名
children:[
{
path:'news', //注意,这里不要写/
component:NewsComp
}
]
},
{
path:'/home',
component:HomeComp
}
]
})
5.2 AboutComp.vue
加上router-link和router-view标签
注意:router-link标签里面的to要写完整路径(把父组件的路径也带上)
<template>
<div>
<h2>我是About的内容</h2> <div>
<router-link class="list-group-item"
active-class="active" to="/about/news">News</router-link>
</div> <div class="panel-body">
<!-- 指定组件的呈现位置 -->
<router-view></router-view>
</div>
</div> </template> <script>
export default {
name:'AboutComp',
mounted() {
console.log('AboutComp@' , this.$router)
console.log('AboutComp@' , this.$route)
},
}
</script>
5.3 NewsComp.vue
<template>
<ul>
<li>news001</li>
<li>news002</li>
<li>news003</li>
</ul>
</template> <script>
export default {
name:'NewsComp'
}
</script>
5.4 效果
点击About
点击News
6 命名路由
6.1 简介
上面我们在src/router/index.js配置路由的时候,采用的是path属性。在router-link的to属性采用/path1/path2..来路有跳转。
我们还可以使用name属性来给路由命名,这样子在to属性只需要写成{name:'name的值'}
路由的命名要注意不要重复
6.2 示例
在上面的示例中,我们采用的是path属性,访问News组件需要写成/path1/path2的格式
routes:[
{
path:'/about', //路径,可随便定义-但是要和<router-link>标签里面的to属性对应上
component:AboutComp, //组件名
children:[
{
path:'news', //注意,这里不要写/
component:NewsComp
}
]
},
{
path:'/home',
component:HomeComp
}
]
<router-link class="list-group-item"
active-class="active" to="/about/news">News</router-link>
下面,为News组件的路由命名为newsName
1)index.js
//引入router
import VueRouter from 'vue-router' // 引入组件
import AboutComp from '../pages/AboutComp'
import HomeComp from '../pages/HomeComp'
import NewsComp from '../pages/NewsComp' // 创建并暴露一个路由器-路由器里面配置路由
export default new VueRouter({
routes:[
{
path:'/about', //路径,可随便定义-但是要和<router-link>标签里面的to属性对应上
component:AboutComp, //组件名
children:[
{
name:'newsName', //给路由命名
path:'news', //注意,这里不要写/
component:NewsComp
}
]
},
{
path:'/home',
component:HomeComp
}
]
})
2)AboutComp.vue
注意router-link的to属性写成对象的形式,所以to前面要加上:是的to里面的额内容解析为js代码而不是字符串
<template>
<div>
<h2>我是About的内容</h2> <div>
<router-link class="list-group-item"
active-class="active" :to="{
name:'newsName'
}"
>News</router-link>
</div> <div class="panel-body">
<!-- 指定组件的呈现位置 -->
<router-view></router-view>
</div>
</div> </template> <script>
export default {
name:'AboutComp',
mounted() {
console.log('AboutComp@' , this.$router)
console.log('AboutComp@' , this.$route)
},
}
</script>
3)效果
7 路由传参数
路由可以通过query和params两种方式传递参数
7.1 query传递参数
7.1.1 传递参数
只需要在router-link的to属性的对象里面加上一个query对象,里面key:value传值
:to="{
name:'newsName',
query:{
id:'query传递的第一个参数',
name:'query传递的第二个参数'
}
}"
7.1.2 接收参数
在结束传输的组件通过$route.query获取
$route.query.属性名
$route.query.id
$route.query.name
7.1.3 示例
在上面的基础上,对AboutComp.vue和NewsComp.vue进行修改,从AboutComp.vue传递参数到NewsComp.vue
1)AboutComp.vue
<template>
<div>
<h2>我是About的内容</h2> <div>
<router-link class="list-group-item"
active-class="active" :to="{
name:'newsName',
query:{
'id':'query传递的第一个参数',
'name':'query传递的第二个参数'
}
}"
>News</router-link>
</div> <div class="panel-body">
<!-- 指定组件的呈现位置 -->
<router-view></router-view>
</div>
</div> </template> <script>
export default {
name:'AboutComp',
mounted() {
console.log('AboutComp@' , this.$router)
console.log('AboutComp@' , this.$route)
},
}
</script>
2)NewsComp.vue
<template>
<ul>
<li>{{$route.query.id}}</li>
<li>{{$route.query.name}}</li>
<li>news003</li>
</ul>
</template> <script>
export default {
name:'NewsComp'
}
</script>
3)效果
7.2 params传递参数
注意:params传递参数只能使用name写法不能使用path写法
7.2.1 传递参数
只需要在router-link的to属性的对象里面加上一个params对象,里面key:value传值
:to="{
name:'newsName',
params:{
'id':'query传递的第一个参数',
'name':'query传递的第二个参数'
}
}"
7.2.2 声明接收的参数
在结束的组件的路由配置的path属性声明接收的参数,在path属性的值后面添加/:参数名,可添加多个
path:'news/:参数1名称/:参数2名称', //:xx 用于声明接收param参数
7.2.3 接收参数
在结束传输的组件通过$route.params获取
$route.params.属性名
$route.params.id
$route.params.name
7.1.3 示例
在上面的基础上,对index.js和AboutComp.vue和NewsComp.vue进行修改,从AboutComp.vue传递参数到NewsComp.vue
1)index.js
//引入router
import VueRouter from 'vue-router' // 引入组件
import AboutComp from '../pages/AboutComp'
import HomeComp from '../pages/HomeComp'
import NewsComp from '../pages/NewsComp' // 创建并暴露一个路由器-路由器里面配置路由
export default new VueRouter({
routes:[
{
path:'/about', //路径,可随便定义-但是要和<router-link>标签里面的to属性对应上
component:AboutComp, //组件名
children:[
{
name:'newsName', //给路由命名
path:'news/:id/:name', //:xx 用于声明接收param参数
component:NewsComp
}
]
},
{
path:'/home',
component:HomeComp
}
]
})
2)AboutComp.vue
<template>
<div>
<h2>我是About的内容</h2> <div>
<router-link class="list-group-item"
active-class="active" :to="{
name:'newsName',
params:{
'id':'params传递的第一个参数',
'name':'params传递的第二个参数'
}
}"
>News</router-link>
</div> <div class="panel-body">
<!-- 指定组件的呈现位置 -->
<router-view></router-view>
</div>
</div> </template> <script>
export default {
name:'AboutComp',
mounted() {
console.log('AboutComp@' , this.$router)
console.log('AboutComp@' , this.$route)
},
}
</script>
3)NewsComp.vue
<template>
<ul>
<li>{{$route.params.id}}</li>
<li>{{$route.params.name}}</li>
<li>news003</li>
</ul>
</template> <script>
export default {
name:'NewsComp'
}
</script>
4)效果
8 路由的props配置
它的作用是参数名称映射
8.1 示例
1)index.js
在news组件的路由配置加上了props属性
//引入router
import VueRouter from 'vue-router' // 引入组件
import AboutComp from '../pages/AboutComp'
import HomeComp from '../pages/HomeComp'
import NewsComp from '../pages/NewsComp' // 创建并暴露一个路由器-路由器里面配置路由
export default new VueRouter({
routes:[
{
path:'/about', //路径,可随便定义-但是要和<router-link>标签里面的to属性对应上
component:AboutComp, //组件名
children:[
{
name:'newsName', //给路由命名
path:'news/:id/:name', //:xx 用于声明接收param参数
component:NewsComp,
props($route){ //props属性配置,用于参数映射
return {
id:$route.params.id,
name:$route.params.name
} }
}
]
},
{
path:'/home',
component:HomeComp
}
]
})
2)NewsComp.vue
在NewsComp.vue的props属性中添加在index.js中的props属性映射
这样子就可以通过{{id}} {{name}} 直接访问到传递过来的参数
<template>
<ul>
<li>{{id}}</li>
<li>{{name}}</li>
<li>news003</li>
</ul>
</template> <script>
export default {
name:'NewsComp',
props:['id','name']
}
</script>
对比下
使用props映射前
<li>{{$route.query.id}}</li>
<li>{{$route.query.name}}</li>
使用props映射后
<li>{{id}}</li>
<li>{{name}}</li>
感觉这个属性不是很好用,vc上的属性来源已经很多了,名字容器重复,还不如直接$route去获取
9 replace属性
9.1 浏览器的历史记录简介
当我们点击导航一层层往下路由组件时,可以通过浏览器的后退键回退,回退后,又可以通过前进键前进
浏览器记录历史分为两种,push和replace,默认情况下就是push
9.2 push
push是压栈的模式,每次路由都把新的放到最上面
9.3 replace
replace是用新的替换旧的
9.4 路由的replace属性
1)示例
只需要在<router-link>标签加上属性replace即可开启这个组件的replace模式
在AboutComp的<router-link>标签加上replace属性
<router-link class="list-group-item"
active-class="active" replace :to="{
name:'newsName',
params:{
'id':'params传递的第一个参数',
'name':'params传递的第二个参数'
}
}"
>News</router-link>
那么about跳转到news的时候,news的记录会替换about的记录
2)效果
点击回退,直接回到了最初而不是about组件的内容
10 编程式路由
上面都是采用<router-link>标签来完成的导航,除了它,还可以使用编程式。借助$router来实现
10.1 $router的几个函数介绍
$router.push({}) //代替<router-link>,push模式的,里面传入的对象和router-link的to里面的额对象一样
$router.replace({}) //代替<router-link>,push模式的,里面传入的对象和router-link的to里面的额对象一样
$router.forward() //前进-等同于浏览器的前进键
$router.back() //后退-等同于浏览器的后推键
$router.to(n) //前进或后退 n为数组,正数标识前进几个,负数标识后退几个
10.2 示例
修改AboutComp.vue 使用$router代替<router-link>标签
<template>
<div>
<h2>我是About的内容</h2> <div> <button @click="cli">news </button> </div> <div class="panel-body">
<!-- 指定组件的呈现位置 -->
<router-view></router-view>
</div>
</div> </template> <script>
export default {
name:'AboutComp',
methods: {
cli(){
this.$router.push({
name:'newsName',
params:{
'id':'params传递的第一个参数',
'name':'params传递的第二个参数'
}
})
}
},
}
</script>
11 缓存路由组件
在最开始讲到,有一个组件路由到另一个组件,原组件默认会被销毁,我们可以设置它不被销毁,而是缓存起来
11.1 格式
想要某些组件不被销毁,在这些组件存放的位置<router-view>标签外层加上<keep-alive>标签。那么,这里出现的这些组件会不被销毁
1)某个组件不被销毁
// 缓存一个路由组件
<keep-alive include="News"> // include中写想要缓存的组件名,不写表示全部缓存
<router-view></router-view>
</keep-alive>
2)多个组件不被销毁
// 缓存多个路由组件
<keep-alive :include="['News','Message']">
<router-view></router-view>
</keep-alive>
3)全部组件不被销毁
// 缓存多个路由组件
<keep-alive >
<router-view></router-view>
</keep-alive>
11.2 示例
1)AboutComp.vue
加上<keep-alive>标签
<template>
<div>
<h2>我是About的内容</h2> <div> <button @click="cli">news </button> </div> <keep-alive include="NewsComp">
<router-view></router-view>
</keep-alive> </div> </template> <script>
export default {
name:'AboutComp',
methods: {
cli(){
this.$router.push({
name:'newsName',
params:{
'id':'params传递的第一个参数',
'name':'params传递的第二个参数'
}
})
}
},
}
</script>
2)NewsComp.vue
加上destroyed函数
<template>
<ul>
<li>{{id}}</li>
<li>{{name}}</li>
<li>news003</li>
</ul>
</template> <script>
export default {
name:'NewsComp',
props:['id','name'],
destroyed() {
console.log('news组件销毁')
},
}
</script>
3)效果
点击回退,newscomp的destroyed没有被触发,说明没有销毁
12 路由独有的两个生命函数
12.1 简介
路由独有两个生命函数,分别为activited和deactivited
activited:被 keep-alive 缓存的组件失活时调用
deactivited:被 keep-alive 缓存的组件激活时调用
官方文档:https://v2.cn.vuejs.org/v2/api/
12.2 注意事项
1)activated和deactivated是配合keep-alive一起使用的
2)activated和deactivated没有keep-alive的时候是不会被触发的
3)当keepalive页面缓存,有activated钩子和created钩子函数时,这两个函数会被同时触发,此时可以使用activated代替created,因为created只会触发一次
4)页面被缓存下来的时候,不会触发destroyed生命钩子,取而代之触发的是deactivated钩子
12.3 它的作用
keepalive页面缓存下来的时候,只会调用一次created这个钩子函数,因为已经被缓存下来了,所以我们重新进入这个组件的时候, 就不会触发created钩子了,created这个钩子就是只有页面渲染的时候会触发。那么就可以使用的activated钩子函数。deactivated同样如此,从一个离开的时候,由于缓存destoryed不会触发,那么就可以使用的deactivated钩子函数
12.4 方法格式
<script>
export default {
name:'News',
data(){
return{
opacity:1
}
},
activated(){
console.log('News组件被激活了') },
deactivated(){
console.log('News组件失活了')
}
}
</script>
13 路由守卫
13.1 简介
它的作用是对路由器进行权限控制,可以理解为拦截器类似的东西
它分为三类:全局守卫、独享守卫、组件内守卫
13.2 全局路由守卫
初始化的时候、每次路由切换之前被调用,针对所有路由组件
13.2.1 守卫函数
beforeEach :前置守卫,初始化时、每次路由切换前执行
affterEach :后置守卫,初始化时、每次路由切换后执行
13.2.2 配置格式
在router/index.js配置
//引入router
import VueRouter from 'vue-router' // 引入组件
import AboutComp from '../pages/AboutComp'
import HomeComp from '../pages/HomeComp'
import NewsComp from '../pages/NewsComp' // 创建并暴露一个路由器-路由器里面配置路由
const router = new VueRouter({
routes:[
{
path:'/about', //路径,可随便定义-但是要和<router-link>标签里面的to属性对应上
component:AboutComp, //组件名
children:[
{
name:'newsName', //给路由命名
path:'news/:id/:name', //:xx 用于声明接收param参数
component:NewsComp,
props($route){
return {
id:$route.params.id,
name:$route.params.name
} }
}
]
},
{
path:'/home',
component:HomeComp
}
]
}) // 全局前置路由守卫————初始化的时候、每次路由切换之前被调用
router.beforeEach((to,from,next) => { //to是要去的组件,from是原组件,next是个函数,调用后才会切换到to的组件,否则不切换
console.log('前置路由守卫',to,from)
//逻辑处理
next() //放行 }) // 全局后置路由守卫————初始化的时候被调用、每次路由切换之后被调用
router.afterEach((to,from)=>{
console.log('后置路由守卫',to,from)
//逻辑处理
}) // 导出路由器
export default router
13.2.3 meta.isAuth
在使用全局路由守卫的时候,如果只是部分路由组件需要守卫,那么就可以此使用meta属性
在meta中配置属性isAuth:true,标识这个路由组件需要守卫,这样子,我们在全局守卫的函数就可以通过meta.isAuth去判断哪些需要守卫了
{
name:'newsName', //给路由命名
path:'news/:id/:name', //:xx 用于声明接收param参数
component:NewsComp,
meta:{
isAuth:true
}
}
守卫函数,通过meta.isAuth判断
router.beforeEach((to,from,next) => {
if(to.isAuth){ //判断是否需要守卫
console.log('前置路由守卫',to,from)
//逻辑处理
}
next() //放行
})
完整
//引入router
import VueRouter from 'vue-router' // 引入组件
import AboutComp from '../pages/AboutComp'
import HomeComp from '../pages/HomeComp'
import NewsComp from '../pages/NewsComp' // 创建并暴露一个路由器-路由器里面配置路由
const router = new VueRouter({
routes:[
{
path:'/about', //路径,可随便定义-但是要和<router-link>标签里面的to属性对应上
component:AboutComp, //组件名
children:[
{
name:'newsName', //给路由命名
path:'news/:id/:name', //:xx 用于声明接收param参数
component:NewsComp,
props($route){
return {
id:$route.params.id,
name:$route.params.name
} },
meta:{
isAuth:true
}
}
]
},
{
path:'/home',
component:HomeComp
}
]
}) // 全局前置路由守卫————初始化的时候、每次路由切换之前被调用
router.beforeEach((to,from,next) => { //to是要去的组件,from是原组件,next是个函数,调用后才会切换到to的组件,否则不切换
if(to.isAuth){
console.log('前置路由守卫',to,from)
//逻辑处理
}
next() //放行
}) // 全局后置路由守卫————初始化的时候被调用、每次路由切换之后被调用
router.afterEach((to,from)=>{
console.log('后置路由守卫',to,from)
//逻辑处理
}) // 导出路由器
export default router
13.3 独享路由守卫
指定路由切换之后被调用
13.3.1 守卫函数
beforeEnter :切换路由前触发
13.3.2 配置格式
在NewsComp这个组件里面配置独享路由守卫,那么就只会对它生效
//引入router
import VueRouter from 'vue-router' // 引入组件
import AboutComp from '../pages/AboutComp'
import HomeComp from '../pages/HomeComp'
import NewsComp from '../pages/NewsComp' // 创建并暴露一个路由器-路由器里面配置路由
const router = new VueRouter({
routes:[
{
path:'/about', //路径,可随便定义-但是要和<router-link>标签里面的to属性对应上
component:AboutComp, //组件名
children:[
{
name:'newsName', //给路由命名
path:'news/:id/:name', //:xx 用于声明接收param参数
component:NewsComp,
// 独享守卫,特定路由切换之后被调用
beforeEnter(to,from,next){
console.log('独享路由守卫',to,from)
//逻辑处理
next()
},
props($route){
return {
id:$route.params.id,
name:$route.params.name, } }, }
]
},
{
path:'/home',
component:HomeComp
}
]
}) // 导出路由器
export default router
13.4 组件内路由守卫
13.4.1 守卫函数
beforeRouterEnter :通过路由进入该组件时被调用(非路由进入组件的不会调研)
beforeRouterLeave :通过路由离开该组件时被调用(非路由进入组件的不会调研)
13.4.2 配置格式
和上面两个不同,它是在组件文件里面配置的
<template>
<div>
<h2>我是About的内容</h2> <div> <button @click="cli">news </button> </div> <keep-alive include="NewsComp">
<router-view></router-view>
</keep-alive> </div> </template> <script>
export default {
name:'AboutComp',
methods: {
cli(){
this.$router.push({
name:'newsName',
params:{
'id':'params传递的第一个参数',
'name':'params传递的第二个参数'
}
})
}
},
beforeRouteEnter (to, from, next) {
console.log('About--beforeRouteEnter',to,from)
next() },
// 通过路由规则,离开该组件时被调用
beforeRouteLeave (to, from, next) {
console.log('About--beforeRouteLeave',to,from)
next()
}
}
</script>
Vue35 路由的更多相关文章
- Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数
上一篇:Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数 之前介绍了简单的路由以及传参,这篇文章我们将要学习复杂一些的路由以及传递其他附加参数.一个好的路由系统可以使我们 ...
- Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数
上一篇:Angular2入门系列教程-服务 上一篇文章我们将Angular2的数据服务分离出来,学习了Angular2的依赖注入,这篇文章我们将要学习Angualr2的路由 为了编写样式方便,我们这篇 ...
- nodejs进阶(3)—路由处理
1. url.parse(url)解析 该方法将一个URL字符串转换成对象并返回. url.parse(urlStr, [parseQueryString], [slashesDenoteHost]) ...
- .NetCore MVC中的路由(2)在路由中使用约束
p { margin-bottom: 0.25cm; direction: ltr; color: #000000; line-height: 120%; orphans: 2; widows: 2 ...
- .NetCore MVC中的路由(1)路由配置基础
.NetCore MVC中的路由(1)路由配置基础 0x00 路由在MVC中起到的作用 前段时间一直忙于别的事情,终于搞定了继续学习.NetCore.这次学习的主题是MVC中的路由.路由是所有MVC框 ...
- ASP.NET路由模型解析
大家好,我又来吹牛逼了 ~-_-~ 转载请注明出处:来自吹牛逼之<ASP.NET路由模型解析> 背景:很多人知道Asp.Net中路由怎么用的,却不知道路由模型内部的运行原理,今天我就给大家 ...
- 路由的Resolve机制(需要了解promise)
angular的resovle机制,实际上是应用了promise,在进入特定的路由之前给我们一个做预处理的机会 1.在进入这个路由之前先懒加载对应的 .js $stateProvider .state ...
- Android业务组件化之子模块SubModule的拆分以及它们之间的路由Router实现
前言: 前面分析了APP的现状以及业务组件化的一些探讨(Android业务组件化之现状分析与探讨),以及通信的桥梁Scheme的使用(Android业务组件化之URL Scheme使用),今天重点来聊 ...
- ASP.NET Core的路由[5]:内联路由约束的检验
当某个请求能够被成功路由的前提是它满足某个Route对象设置的路由规则,具体来说,当前请求的URL不仅需要满足路由模板体现的路径模式,请求还需要满足Route对象的所有约束.路由系统采用IRouteC ...
- ASP.NET Core的路由[4]:来认识一下实现路由的RouterMiddleware中间件
虽然ASP.NET Core应用的路由是通过RouterMiddleware这个中间件来完成的,但是具体的路由解析功能都落在指定的Router对象上,不过我们依然有必要以代码实现的角度来介绍一下这个中 ...
随机推荐
- 万万没想到,除了香农计划,Python3.11竟还有这么多性能提升!
众所周知,Python 3.11 版本带来了较大的性能提升,但是,它具体在哪些方面上得到了优化呢?除了著名的"香农计划"外,它还包含哪些与性能相关的优化呢?本文将带你一探究竟! 作 ...
- .NET复习总纲
以下是自己学习遇到比较好的课程和学习网站,如果大家有更好的课程推荐,可以打在评论区或者私聊我,让我也进行学习和补充进文档 一..NET基础 官方文档:https://learn.microsoft.c ...
- golang基础语法学习
1.函数作为一等公民 2.驼峰命名法/大小写决定是否在包外见 3.包名应该是小写的单个单词命名 4. 包名应为其源码的基础名称,如encoding/base64,包名应为base64而不是encodi ...
- 基于python的数学建模---logicstic回归
樱花数据集的Logistic回归 绘制散点图 import matplotlib.pyplot as plt import numpy as np from sklearn.datasets impo ...
- jquery组件解决option选项框的样式自定义方案
记录一下今天工作中遇到的一个需求和自行找到的解决办法 需求: 在原始的select选项框中的增加一个标识.(我想增加一个具有样式的span元素,试了半天在option里无法添加span,更别说具有样式 ...
- 设计链表-LeetCode707 基础题
LeetCode链接:https://leetcode.cn/problems/design-linked-list/ 题目:设计链表的实现.您可以选择使用单链表或双链表.单链表中的节点应该具有两个属 ...
- Dev-Cpp下载与安装
目录 一.介绍 Dev-Cpp 二.下载 Dev-Cpp 1.通过百度网盘下载 2.通过 SourceForge 官网下载 三.安装 Dev-Cpp 写在结尾的话 免责声明 大家好,这里是 main工 ...
- 【大数据课程】高途课程实践-Day01:Python编写Map Reduce函数实现各商品销售量展示(类似wordcount)
〇.概述 1.工具 http://www.dooccn.com/python3/ 在线运行Python代码 2.步骤 (1)⽣成代码测试数据 (2)编写Mapper逻辑 (3)编写Reducer逻辑 ...
- 【Spark】Day03-Spark SQL:DataFrame、DataSet、sql编程与转换、项目实战(区域热门商品)
一.概述 1.介绍 将Spark SQL转换成RDD,然后提交到集群执行[对比hive] 提供2个编程抽象:DataFrame&DataSet 可以使用SQL和DatasetAPI与Spark ...
- 有状态软件如何在 k8s 上快速扩容甚至自动扩容
概述 在传统的虚机/物理机环境里, 如果我们想要对一个有状态应用扩容, 我们需要做哪些步骤? 申请虚机/物理机 安装依赖 下载安装包 按规范配置主机名, hosts 配置网络: 包括域名, DNS, ...