vue脚手架路由快速入门

这里写目录标题

      • 路由 router
      • 路由插件的引用
        • 离线
        • 在线CDN
      • 单独路由使用案例
      • 项目中如何定义路由
        • 1\安装路由
        • 2\创建路由文件router.js以及创建相关文件
        • 3\应用插件main.js
        • 4\实现切换`<router-link></router-link>`
        • 5\展示位置` <router-view></router-view>`
      • 嵌套路由children
      • 路由优先级
      • 动态路由匹配-`*`、`:`
        • 动态路由案例
        • 通配符
        • 路由参数
      • 接收参数/获取地址栏信息`$route`,`$router`
      • 路由传参
        • router-link路由导航方式传参
        • 调用$router实现路由传参
      • 路由的props配置/不使用$route接收参数
        • 方式一 布尔值
        • 方式二 对象
        • 方式三 函数
      • 路由跳转/编程式导航($router)
        • `<router-link>` 标签
        • push()
        • replace()
        • go()
        • .forward()
        • .back()
      • 缓存路由组件keep-alive
      • 重定向redirect
      • 路由别名alias
      • 路由元信息 meta
      • 路由模式 mode(通常用默认的hash模式)
      • 路由基路径 base
      • 路由守卫
        • 全局路由守卫应用场景-权限校验
        • 全局路由守卫应用场景-— 路由跳转时,页面标题随路由变化
      • 自动注册路由require.context

路由 router

router是由Vue官方提供的用于实现组件跳转的插件

路由插件的引用

离线
<script type="text/javascript" src="js/Vue.js" ></script>
<script type="text/javascript" src="js/Vue-router.js"></script>
在线CDN
<script src="https://unpkg.com/Vue/dist/Vue.js"></script>
<script src="https://unpkg.com/Vue-router/dist/Vue-router.js"></script>

单独路由使用案例

<!DOCTYPE html>
<html><head><meta charset="UTF-8"><title></title><style type="text/css">body{padding: 0px;margin: 0px;}ul{list-style: none;}ul li{display: inline; float: left; margin-left: 15px;  margin-bottom: 15px;}ul li a{text-decoration: none; color: white; font-size: 18px; font-weight: bold;}ul li a:hover{color: yellow;}</style><script type="text/javascript" src="js/Vue.js" ></script><script type="text/javascript" src="js/Vue-router.js"></script></head><body><div id="container"><div style="width: 100%; height: 70px; background: #00BFFF;"><table><tr><td><img src="img/logo.png" height="70" style="margin-left:100px;"/></td><td><ul><li><router-link to="/a">首页</router-link></li><li><router-link to="/b">Java</router-link></li><li><router-link to="/c">HTML5</router-link></li><li><router-link to="/d">Python</router-link></li></ul></td></tr></table></div><div style="width: 100%; height: 680px; background: lemonchiffon;"><router-view></router-view></div></div><script type="text/javascript">// Vue的路由旨在为单页面应用开发提供便捷//1.定义链接跳转的模板(组件)const t1 = {template:`<p>index</p>`};const t2 = {template:`<p>Java</p>`};const t3 = {template:`<p>HTML5</p>`};const t4 = {template:`<p>PYTHON</p>`};const myrouter = new VueRouter({routes:[{path:"/a",component:t1},{path:"/b",component:t2},{path:"/c",component:t3},{path:"/d",component:t4}]});var vm = new Vue({el:"#container",router:myrouter});</script></body>
</html>

项目中如何定义路由

1\安装路由
npm install vue-router@3.5.1
对于vue2,我们推荐使用vue-router 3.x版本。若大于4.x,则部分功能无法在vue2中正常引入使用。
2\创建路由文件router.js以及创建相关文件

在这里插入图片描述

// 该文件专门用于创建整个应用的路由器
import VueRouter from "vue-router";// 创建一个路由器
const router = new VueRouter({routes: [// {path: '/',name: 'HelloWorld',component: HelloWorld},{path: "/parent", name: "parent", component: () => import("@/components/Parent"),// 注意。除了一级路径其他的级别不加“/”children: [{path: "/childA", name: "childA", component: () => import("@/components/ChildA")},{path: "/childB", name: "childB", component: () => import("@/components/ChildB")}]},]
});export default router;
3\应用插件main.js
// 引入VueRouter
import VueRouter from "vue-router";
// 引入路由文件
import routers from "./router.js";new Vue({el: '#app',render: h => h(App),router: routers
}
4\实现切换<router-link></router-link>

Parent.vue

<template><div><router-link to="/childA">ChildA</router-link><router-link to="/childB">ChildB</router-link><router-view/></div>
</template><script>
export default {name: "Parent"
}
</script><style scoped></style>
5\展示位置 <router-view></router-view>

同上

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

嵌套路由children

在一级路由的组件中显示二级路由

注意

  • 跳转要写完整路径<router-link to="/a/c2">首页-c2</router-link>
  • 子路由不要加“/”,会自动加
import Vue from 'vue'
import Router from 'vue-router'
// import HelloWorld from '@/components/HelloWorld'Vue.use(Router)export default new Router({routes: [// {path: '/',name: 'HelloWorld',component: HelloWorld},{path: "/parent", name: "parent", component: () => import("@/components/Parent"),// 注意。除了一级路径其他的级别不加“/”children: [{path: "/childA", name: "childA", component: () => import("@/components/ChildA")},{path: "/childB", name: "childB", component: () => import("@/components/ChildB")},{path: "/childB/:id", name: "childB", component: () => import("@/components/ChildB")},]},]
})

路由优先级

如果一个路径匹配了多个路由,则按照路由的配置顺序:路由定义的越早优先级就越高。

动态路由匹配-*:

在Vue中,动态路由是指路由的路径参数或查询参数可以根据实际情况动态变化。通过使用动态路由参数,我们可以在路由配置中设置参数,并在对应的组件中通过this.$route对象获取这些参数。

动态路由案例

1、定义路由配置:

const router = new VueRouter({routes: [// 动态路由参数以冒号":“开头   { path: '/user/:id', component: User }]
})

2、在组件中获取动态路由参数:

const User = {template: '<div>User ID: {{ $route.params.id }}</div>',created() {console.log('User ID:', this.$route.params.id)}
}

3、导航到带有动态参数的路由:

// 在Vue实例中,可以使用编程方式进行导航
this.$router.push('/user/123')

在上述例子中,当访问/user/123时,User组件将显示内容“User ID: 123”。通过this.$route.params.id可以访问到路由参数id的值。

通配符

*可以匹配任意路径

例如:

  • /user-* 匹配所有以user-开头的任意路径
  • /* 匹配所有路径
const myrouter = new VueRouter({routes:[{path:"/user-*",component:...},{path:"/*",component:...}]
});

注意如果使用通配符定义路径,需要注意路由声明的顺序

路由参数
  • /a/:id 可以匹配 /a/开头的路径
<div id="container"><li><router-link to="/a/101">首页</router-link></li><router-view></router-view>
</div><script type="text/javascript">const t1 = {template:`<p>index:{{$route.params.id}}</p>`};const myrouter = new VueRouter({routes:[{path:"/a/:id",component:t1}]});var vm = new Vue({el:"#container",router:myrouter});
</script>

接收参数/获取地址栏信息$route,$router

this.$route:当前激活的路由的信息对象。每个对象都是局部的,可以获取当前路由的 path, name, params, query 等属性。

this.$router:全局的 router 实例。通过 vue 根实例中注入 router 实例,然后再注入到每个子组件,从而让整个应用都有路由功能。其中包含了很多属性和对象(比如 history 对象),任何页面也都可以调用其 push(), replace(), go() 等方法。

$route中存在请求信息

$route.query获取请求信息

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

路由传参

router-link路由导航方式传参
<router-link to="/childA?id=123">ChildA</router-link>
<!-- 跳转并携带query参数,to的字符串写法 -->
<div v-for="item in 3"><router-link :to="`/childA?id=${item}`">ChildA-{{ item }}</router-link>
</div>
<!-- 跳转并携带query参数,to的对象写法 -->
<router-link :to="{path: '/childA',query: {id: 456}
}">ChildA
</router-link>
调用$router实现路由传参
// 直接拼接
<button @click="clickHand(123)">path传参</button>
clickHand(id) {this.$router.push({path: `/childA?id=${id}`})
}
// 通过query来传递参数
<button @click="clickQuery()">query传参</button>
clickQuery() {this.$router.push({path: '/childA',query: {id: '789'}})
},
params传参的两种方式
前提:路由配置参数         {path: "/childB/:id", name: "childB", component: () => import("@/components/ChildB")},
第一种方式
<button @click="ClickByName()">params传参</button>
ClickByName() {// 通过路由属性name匹配路由,再根据params传递参数this.$router.push({name: 'childB',params: { // 使用params不能使用path,必须使用nameid: '666'}
})
第二种方式
<router-link :to="{name: 'childB',params: {id: 456}
}">ChildA
</router-link>

路由的props配置/不使用$route接收参数

作用,让路由更方便的接收参数,在代码中的体现就是,this. r o u t e . i d 直接就可以赋值给 i d ,省略 t h i s . route.id直接就可以赋值给id,省略this. route.id直接就可以赋值给id,省略this.route

方式一 布尔值
 {path: "/childA/:id", name: "childA", component: () => import("@/components/ChildA"),props:true},

访问/#/childA/456 把路由收到的所有params参数通过props传给childA组件,然后childA组件就可以接收使用 props:['id'],这时候childA组件就有了一个id=456的变量

方式二 对象
 {path: "/childA/:id", name: "childA", component: () => import("@/components/ChildA"),props:{id:999}},

访问/#/childA/456 直接把{id:999}通过props传给childA组件,然后childA组件就可以接收使用 props:['id'],这时候childA组件就有了一个id=999的变量

这种方式硬编码,实际中不适用

方式三 函数
{path: "/childA/:id", name: "childA", component: () => import("@/components/ChildA"),props(route) {return { id: route.query.id } // route.params.id}
},

props值为函数,该函数返回的对象中每一组key-value都会通过props传给Detail组件

路由跳转/编程式导航($router)

路由跳转分为编程式和声明式。

声明式:

  • 简单来说,就是使用 router-link 组件来导航,通过传入 to 属性指定链接(router-link 默认会被渲染成一个a标签)。

  • 当需要在一个页面中嵌套子路由,并且页面不跳转的时候,这种方式不要太好用啊哈哈哈… 只需要将子页面渲染在 router-view 里面就可以了。

编程式:

  • 采用这种方式就需要导入 VueRouter 并调用了。

具体使用如下

<router-link> 标签
to 属性的使用方式与.push相同
<router-link :to="{ name: 'user', params: { userId: 123 }}">User</router-link>replace —— 点击<router-link> 时默认调用 router.push()方法,增加此属性则调用 router.replace()
<router-link :to="{ path: '/abc'}" replace></router-link>
push()

会向 history 栈添加一个新的记录,地址栏会变化

//1.字符串
this.$router.push("/a");//2.对象
this.$router.push({path:"/a"});//3.命名的路由  name参数指的是定义路由时指定的名字
this.$router.push({name:"r1",params:{id:101}});//4.URL传值,相当于/a?id=101
this.$router.push({path:"/a",query:{id:101}});
replace()

功能与push一致,区别在于replace()不会向history添加新的浏览记录

go()

参数为一个整数,表示在浏览器历史记录中前后/后退多少步 相当于window.history.go(-1)的作用

// 在浏览器记录中前进一步,等同于 history.forward()
router.go(1)// 后退一步记录,等同于 history.back()
router.go(-1)// 前进 3 步记录
router.go(3)// 如果 history 记录不够用,则失败,不会跳转
router.go(-100)
.forward()

前进——跳转到下一路由(若浏览器存在history 记录)

.back()

后退——跳转到上一路由(若浏览器存在history 记录)

缓存路由组件keep-alive

作用:让不展示的路由组件保持挂载,不被销毁。

具体编码:

<keep-alive><router-view></routhr-view>
</keep-alive>

这样当切换组件时,router-view显示的组件的数据都不会变化

重定向redirect

访问/b,重定向到/a

<div id="container"><router-link to="/a">路径A</router-link><router-link to="/b">路径B</router-link><router-view></router-view>
</div>
<script type="text/javascript">const t1 = {template:"<div style='width:400px; height:200px; border:blue 1px solid'>index</div>"};const myrouter = new VueRouter({routes:[{path:"/a",component:t1},{path:"/b",redirect:"/a"}]});var vm = new Vue({el:"#container",router:myrouter});
</script>
  • 根据路由命名重定向
const myrouter = new VueRouter({routes:[{path:"/a",name:"r1",component:t1},{path:"/b",//redirect:"/a"   //根据路由路径重定向redirect:{name:"r1"}  //根据路由命名重定向}]
});

路由别名alias

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

<div id="container"><router-link to="/a">路径A</router-link><router-link to="/wahaha">路径wahaha(别名)</router-link><router-view></router-view>
</div>
<script type="text/javascript">const t1 = {template:"<div style='width:400px; height:200px; border:blue 1px solid'>index</div>"};const myrouter = new VueRouter({routes:[{path:"/a",alias:"/wahaha",component:t1}]});var vm = new Vue({el:"#container",router:myrouter});
</script>

路由元信息 meta

通过meta可以为路由添加更多自定义的配置信息

    {path: 'bar',component: Bar,meta: { requiresAuth: true }}

路由模式 mode(通常用默认的hash模式)

  1. 对于一个url来说,什么是hash值?#及其后面的内容就是hash值。

  2. hash值不会包含在HTTP请求中,即:hash值不会带给服务器。

  3. hash模式:

    1. 地址中永远带着#号,不美观。

    2. 若以后将地址通过第三方手机app分享,若app校验严格,则地址会被标记为不合法。

    3. 兼容性较好。

  4. history模式:

    1. 地址干净,美观。
    2. 兼容性和hash模式相比略差。
    3. 应用部署上线时需要后端人员支持,解决刷新页面服务端404的问题。
const router = new VueRouter({// 不用mode: 'history'时,页面url地址后面会加上一个“#”mode: 'history',routes
})

路由基路径 base

默认值: "/" ,如果整个单页应用服务在 /app/ 下,然后 base 就应该设为 "/app/"

const router = new VueRouter({base:'/app/',routes
})

路由守卫

参数

  • to:要跳转的路由页面的路由信息对象 有to.path to.其他
  • from:跳转前的页面的路由信息对象
  • next:就是去匹配路由然后加载组件,相当于重定向,next()收尾 不传参(路由) 否则死循环

分类

  • 全局路由守卫:每个路由跳转,都会执行

    • router.beforeEach((to, from, next) => {next()
      })
      // afterEach没有next
      router.afterEach((to, from) => {// ...
      })
      
  • 局部路由守卫(路由独享守卫)

    • {path: '/foo',component: Foo,beforeEnter: (to, from, next) => {// ...}
      }
      
  • 组件内的路由守卫:在.vue文件中定义,与vue的生命周期函数同级。

    • // 导航进入该组件的对应路由时调用  
      // 不能获取组件实例 `this`因为当守卫执行前,组件实例还没被创建
      beforeRouteEnter(to, from, next) {//应用场景://如果你想要在进入路由前,根据路由参数或查询参数,做一些初始化操作,例如获取数据或设置组件状态。// 如果你想要在进入路由前,通过路由守卫来验证某些条件,例如用户权限验证
      },// 导航离开该组件的对应路由时调用
      // 可以访问组件实例 `this`
      beforeRouteLeave(to, from, next) {// 使用场景:通常用来禁止用户在还未保存修改前突然离开const answer = window.confirm('修改未保存,确定离开吗?')if (answer) {next()} else {next(false)}
      }
      
全局路由守卫应用场景-权限校验
router.beforeEach((to, from, next) => {// 需鉴权的路由—— 判断路由的meta元数据中,是否requiresAuth为trueif (to.matched.some(record => record.meta.requiresAuth)) {// 判断用户是否已登录if (sessionStorage.getItem('isLogin')) {// 已登录,则跳转到目标路由(需要用户登录的页面)next()} else {// 未登录,跳转到登录页next('/login')}} else {// 公共页面,直接跳转到目标路由next()}
})

meta 元数据

  {path: '/add',name: 'add',component: Add,meta: { requiresAuth: true }},
全局路由守卫应用场景-— 路由跳转时,页面标题随路由变化
router.beforeEach((to, from, next) => {/* 路由跳转时,页面标题随路由变化——将新的页面标题修改为路由名称 */if (to.name) {document.title = to.name+' -- 页面'}next()
})

自动注册路由require.context

import Vue from 'vue'
import Router from 'vue-router'Vue.use(Router)// 查询指定文件夹下的vue页面,自动注册路由
// require.context(directory,useSubdirectories,regExp) 
// directory:表示检索的目录
// useSubdirectories:表示是否检索子文件夹
// regExp:匹配文件的正则表达式,一般是文件名
const contextInfo = require.context('../components/', true, /.vue$/);
let routerAry = []
contextInfo.keys().forEach(fileName => {const pathConfig = contextInfo(fileName)routerAry.push({path:"/" + fileName.substring(2,fileName.length-4),// pathConfig.default的内容,是指定的vue页面的default模块内容,等同于: () => import('xxxx')component: pathConfig.default})
})const routerList = [{path: "/Parent", name: "parent", component: () => import("@/components/Parent"),},
]
const newRouterAry = routerList.concat(routerAry)export default new Router({routes:newRouterAry
})

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

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

相关文章

在线绘制哑铃图(dumbbell chart)展示基因拷贝数变异(CNV)

导读&#xff1a; 哑铃图的名称来源于其形状&#xff0c;它看起来像一个哑铃&#xff0c;有两个圆形的“重量”在两端&#xff0c;通过一根“杆”连接。常用于展示两个或多个数据集之间的差异。本文介绍了如何使用哑铃图展示基因的拷贝数变异。 Journal of Translational Medi…

UDP简单聊天室创建

目录 一. 服务端模块实现 二. 处理聊天消息模块实现 三. 调用服务端模块实现 四. 客户端模块实现 五. 效果展示 本文介绍了如何用UDP创建一个简单的聊天室。 一. 服务端模块实现 服务端仍然沿用我们前面的思想&#xff08;高内聚低耦合&#xff09;&#xf…

C语言小tip之函数递归

hello&#xff0c;各位小伙伴们今天我们来学习一下函数递归。 什么是函数递归呢&#xff1f;简单来说就是函数自己来调用自己。函数递归的主要思想是把大事化小&#xff0c;递归包含两层方面&#xff1a;1、递推 2、回归 在使用函数递归的时候要注意包含两个限制条件&#…

Linux 软硬连接

1. 硬链接 实际上并不是通过文件名来找到磁盘上的文件&#xff0c;而是通过inode。在linux中可以让多个文件名对应于同一个 inode&#xff0c;而这种方式就是建立硬链接。硬链接是文件系统中的一种链接类型&#xff0c;它创建了文件的一个额外的目录项&#xff0c;但不占用额外…

全流程SWAP农业模型数据制备、敏感性分析及气候变化影响实践技术应用

SWAP模型是由荷兰瓦赫宁根大学开发的先进农作物模型&#xff0c;它综合考虑了土壤-水分-大气以及植被间的相互作用&#xff1b;是一种描述作物生长过程的一种机理性作物生长模型。它不但运用Richard方程&#xff0c;使其能够精确的模拟土壤中水分的运动&#xff0c;而且耦合了W…

EmguCV学习笔记 C# 7.1 角点检测

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问…

Ubuntu22.04安装 docker和docker-compose环境

Docker简介 Docker 是一个开源的应用容器引擎&#xff0c;它使开发者能够打包他们的应用以及依赖包到一个可移植的容器中&#xff0c;然后发布到任何流行的 Linux 机器上&#xff0c;也可以实现虚拟化。容器是完全使用沙箱机制&#xff0c;相互之间不会有任何接口&#xff08;…

蓝色炫酷碎粒子HTML5导航源码

源码介绍 蓝色炫酷碎粒子HTML5导航源码&#xff0c;源码由HTMLCSSJS组成&#xff0c;记事本打开源码文件可以进行内容文字之类的修改&#xff0c;双击html文件可以本地运行效果&#xff0c;也可以上传到服务器里面&#xff0c;重定向这个界面 效果预览 源码获取 蓝色炫酷碎粒…

Halcon提取边缘线段lines_gauss 算子

Halcon提取边缘线段lines_gauss 算子 edges_color_sub_pix和edges_sub_pix两个算子使用边缘滤波器进行边缘检测。还有一个常用的算子lines_gauss算子&#xff0c;也可以用于提取边缘线段&#xff0c;它的鲁棒性非常好&#xff0c;提取出的线段类型是亚像素精度的XLD轮廓。其原…

LLM训练、精调与加速:大型语言模型的高效开发与应用策略

创作不易&#xff0c;您的关注、点赞、收藏和转发是我坚持下去的动力&#xff01; 大家有技术交流指导、论文及技术文档写作指导、项目开发合作的需求可以私信联系我 LLM&#xff08;大型语言模型&#xff09;的训练、精调和加速是当前人工智能研究和应用中的重要话题。下面将…

JVM垃圾判定算法

垃圾收集技术是Java的一堵高墙。Java堆内存中存放着几乎所有的对象实例&#xff0c;垃圾收集器在对堆内存进行回收前&#xff0c;第一件事情就是要确定这些对象中哪些还存活&#xff0c;哪些已经死去&#xff08;即不可能再被任何途径使用的对象&#xff09;。也就是判定垃圾。…

【学习笔记】卫星通信NTN 3GPP标准化进展分析(五)- 3GPP Release19 研究计划

一、引言&#xff1a; 本文来自3GPP Joern Krause, 3GPP MCC (May 14,2024) Non-Terrestrial Networks (NTN) (3gpp.org) 本文总结了NTN标准化进程以及后续的研究计划&#xff0c;是学习NTN协议的入门。 【学习笔记】卫星通信NTN 3GPP标准化进展分析&#xff08;一&#xff…

第二证券:大洗牌!头部券商营收、净利集体下滑

前十券商营收团体下滑&#xff0c;银河证券跌幅最小 新股IPO数量锐减129家至44家&#xff0c;国内证券市场股票基金交易量日均规划 同比下降 6.83%……关于证券公司而言&#xff0c;本年上半年可谓多重要素叠加冲击&#xff0c;成果下滑难以避免。于大多数证券公司而言&#x…

Vue(三)内置指令v-text、html、cloak、once、pre;自定义指令的三种方式、Vue生命周期

文章目录 1. 内置指令1.1 v-text、v-html指令1.2 v-cloak指令1.3 v-once指令1.4 v-pre指令 2. 自定义指令(directives)2.1 函数式2.2 对象式2.3 注意点 3. 生命周期3.1 挂载流程3.2 更新流程3.3 销毁流程 1. 内置指令 1.1 v-text、v-html指令 v-text与v-html都是向所在的节点…

EPLAN中部件库的导入和使用方法

EPLAN中部件库的导入和使用方法 如下图所示,点击工具-----部件------管理, 在弹出的窗口中点击附加------导入, 找到自己需要导入的文件,后缀名为EDZ,点击打开, 如下图所示,勾选"更新已有数据集并添加新建数据集",点击确定, 如下图所示,正在导

为什么一些行业刚起步就白热化竞争-例如机器人行业?

部分从事机器人行业的从业者交流就是特别卷。 明明是一个刚起飞的行业为何竞争如此残酷&#xff1f; 抛开降本增效的商业逻辑不谈。 只从一个侧面去观察-供需。 从事脑力劳动的机器人-处理文档 从事体力劳动的机器人-打螺丝 交流 机器人时代什么时候到来&#xff1f; 相似…

编译器基础介绍

随着深度学习的不断发展&#xff0c;AI 模型结构在快速演化&#xff0c;底层计算硬件技术更是层出不穷&#xff0c;对于广大开发者来说不仅要考虑如何在复杂多变的场景下有效的将算力发挥出来&#xff0c;还要应对 AI 框架的持续迭代。AI 编译器就成了应对以上问题广受关注的技…

论文翻译:Scaling Instruction-Finetuned Language Models

Scaling Instruction-Finetuned Language Models https://www.jmlr.org/papers/volume25/23-0870/23-0870.pdf 指令微调语言模型 文章目录 指令微调语言模型摘要1. 引言2. Flan微调2.1 微调数据2.2 微调过程2.3 评估协议 3. 扩展到5400亿参数和1836个任务4. 带有思维链注释的微…

HMI触屏网关-VISION如何与Modbus TCP从机通信

上文&#xff1a;HMI触屏网关-VISION如何与Modbus RTU从机通信-CSDN博客 1. 硬件连接 Modbus TCP协议采用网口通信的方式&#xff0c;因此&#xff0c;只需要保证网关的LAN口IP和Modbus TCP从机的IP在同一网段即可。 Modbus TCP从机参数说明&#xff1a; 2. VISION创建Modbu…

LaViT:这也行,微软提出直接用上一层的注意力权重生成当前层的注意力权重 | CVPR 2024

Less-Attention Vision Transformer利用了在多头自注意力&#xff08;MHSA&#xff09;块中计算的依赖关系&#xff0c;通过重复使用先前MSA块的注意力来绕过注意力计算&#xff0c;还额外增加了一个简单的保持对角性的损失函数&#xff0c;旨在促进注意力矩阵在表示标记之间关…