秦皇岛建设厅网站/seo薪资水平

秦皇岛建设厅网站,seo薪资水平,怎么做网站版面,烟台卓通网络科技有限公司一、路由简介 1、什么是路由? - 定义:路由就是根据不同的 URL 地址展示不同的内容或页面。 - 通俗理解:路由就像是一个地图,我们要去不同的地方,需要通过不同的路线进行导航。 2、路由的作用 - 单页应用程序…

一、路由简介

1、什么是路由?

-   定义:路由就是根据不同的 URL 地址展示不同的内容或页面。

-   通俗理解:路由就像是一个地图,我们要去不同的地方,需要通过不同的路线进行导航。

2、路由的作用

-   单页应用程序(SPA)中,路由可以实现不同视图之间的无刷新切换,提升用户体验;

-   路由还可以实现页面的认证和权限控制,保护用户的隐私和安全;

-   路由还可以利用浏览器的前进与后退,帮助用户更好地回到之前访问过的页面

二、路由重定向

重定向的作用:将一个路由重定向到另一个路由上

router.js文件:

// 导入路由创建的相关方法

import {createRouter,createWebHashHistory} from 'vue-router'

// 导入vue组件

import Home from '../components/Home.vue'

import List from '../components/List.vue'

import Add from '../components/Add.vue'

import Update from '../components/Update.vue'

// 创建路由对象,声明路由规则

const router = createRouter({

    history: createWebHashHistory(),

    routes:[

        {

            path:'/',

            components:{

                default:Home,

                homeView:Home

            }      

        },

        {

            path:'/list',

            components:{

                listView : List

            }

        },

        {

            path:'/showAll',

            // 重定向

            redirect :'/list'

        },

        {

            path:'/add',

            components:{

                addView:Add

            }

        },

        {

            path:'/update',

            components:{

                updateView:Update

            }  

        },

    ]

})

// 对外暴露路由对象

export default router;

 

+ App.vue

```html

<script setup>

</script>

<template>

    <div>

      <h1>App页面</h1>

      <hr/>

        <!-- 路由的连接 -->

        <router-link to="/">home</router-link> <br>

        <router-link to="/list">list</router-link> <br>

        <router-link to="/showAll">showAll</router-link> <br>

        <router-link to="/add">add</router-link> <br>

        <router-link to="/update">update</router-link> <br>

      <hr/>

      <!-- 路由连接对应视图的展示位置 -->

      <hr>

      默认展示位置:<router-view></router-view>

      <hr>

      Home视图展示:<router-view name="homeView"></router-view>

      <hr>

      List视图展示:<router-view name="listView"></router-view>

      <hr>

      Add视图展示:<router-view name="addView"></router-view>

      <hr>

      Update视图展示:<router-view name="updateView"></router-view>

    </div>

</template>

<style scoped>

</style>

三、编程式路由

普通路由(声明式路由)

`<router-link to="/list">list页</router-link>  `这种路由,to中的内容目前是固定的,点击后只能切换/list对象组件

> 编程式路由

+ 通过useRouter,动态决定向那个组件切换的路由

+ 这里的 `useRouter` 方法返回的是一个 router 对象,你可以用它来做如导航到新页面、返回上一页面等操作。

+ App.vue

``` html

<script setup type="module">

  import {useRouter} from 'vue-router'

  import {ref} from 'vue'

  //创建动态路由对象

  let router = useRouter()

  let  routePath =ref('')

  let  showList= ()=>{

      // 编程式路由

      // 直接push一个路径

      router.push('/list')

      // 或者push一个带有path属性的对象

      //router.push({path:'/list'})

  }

</script>

<template>

    <div>

      <h1>App页面</h1>

      <hr/>

        <!-- 路由的连接 -->

        <router-link to="/">home</router-link> <br>

        <router-link to="/list">list</router-link> <br>

        <router-link to="/showAll">showAll</router-link> <br>

        <router-link to="/add">add</router-link> <br>

        <router-link to="/update">update</router-link> <br>

//以上to后固定了访问路径的都是声明式路由,不能动态修改

        <!-- 动态输入路径,点击按钮,触发单击事件的函数,在函数中通过编程式路由切换页面 -->

        <button @click="showList()">showList</button> <br>

      <hr/>

      <!-- 路由连接对应视图的展示位置 -->

      <hr>

      默认展示位置:<router-view></router-view>

      <hr>

      Home视图展示:<router-view name="homeView"></router-view>

      <hr>

      List视图展示:<router-view name="listView"></router-view>

      <hr>

      Add视图展示:<router-view name="addView"></router-view>

      <hr>

      Update视图展示:<router-view name="updateView"></router-view>

    </div>

</template>

<style scoped>

</style>

四、路由传参

1、路径参数

 在路径中使用一个动态字段来实现,我们称之为路径参数

    + 例如: 查看数据详情  `/showDetail/1`  ,`1`就是要查看详情的id,可以动态添值!

2、键值对参数

类似于get请求通过url传参,数据是键值对形式的

    例如:  查看数据详情`/showDetail?hid=1`,`hid=1`就是要传递的键值对参数

     在 Vue 3 和 Vue Router 4 中,可以使用  `useRoute` 这个函数从 Vue 的组合式 API 中获取路由对象。

    +  `useRoute` 方法返回的是当前的 route 对象,你可以用它来获取关于当前路由的信息,如当前的路径、查询参数等。

对比:useRouter方法返回的是一个router对象,可以用于导航新页面和返回上一个页面。

> 案例需求 : 切换到ShowDetail.vue组件时,向该组件通过路由传递参数

修改App.vue文件

``` html

<script setup type="module">

  import {useRouter} from 'vue-router'

  //创建动态路由对象

  let router = useRouter()

  //动态路由路径传参方法

  let showDetail= (id,language)=>{

      // 尝试使用拼接字符串方式传递路径参数

      //router.push(`showDetail/${id}/${languange}`)

      /*路径参数,需要使用params  */

      router.push({name:"showDetail",params:{id:id,language:language}})

  }

  let showDetail2= (id,language)=>{

      /*uri键值对参数,需要使用query */

      router.push({path:"/showDetail2",query:{id:id,language:language}})

  }

</script>

<template>

    <div>

      <h1>App页面</h1>

      <hr/>

      <!-- 路径参数   -->

      <router-link to="/showDetail/1/JAVA">showDetail路径传参显示JAVA</router-link>

      <button @click="showDetail(1,'JAVA')">showDetail动态路由路径传参显示JAVA</button>

      <hr/>

      <!-- 键值对参数 -->

      <router-link v-bind:to="{path:'/showDetail2',query:{id:1,language:'Java'}}">showDetail2键值对传参显示JAVA</router-link>

      <button @click="showDetail2(1,'JAVA')">showDetail2动态路由键值对传参显示JAVA</button>

      <hr>

      showDetail视图展示:<router-view name="showDetailView"></router-view>

      <hr>

      showDetail2视图展示:<router-view name="showDetailView2"></router-view>

    </div>

</template>

<style scoped>

</style>

```

+ 修改router.js增加路径参数占位符

``` javascript

// 导入路由创建的相关方法

import {createRouter,createWebHashHistory} from 'vue-router'

// 导入vue组件

import ShowDetail from '../components/ShowDetail.vue'

import ShowDetail2 from '../components/ShowDetail2.vue'

// 创建路由对象,声明路由规则

const router = createRouter({

    history: createWebHashHistory(),

    routes:[

       

        {

            /* 此处:id  :language作为路径的占位符 */

            path:'/showDetail/:id/:language',

            /* 动态路由传参时,根据该名字找到该路由 */

            name:'showDetail',

            components:{

                showDetailView:ShowDetail

            }  

        },

        {

            path:'/showDetail2',

            components:{

                showDetailView2:ShowDetail2

            }  

        },

    ]

})

// 对外暴露路由对象

export default router;

 

 

 

+ ShowDetail.vue 通过useRoute获取路径参数

``` html

<script setup type="module">

    import{useRoute} from 'vue-router'

    import { onUpdated,ref } from 'vue';

    // 获取当前的route对象

    let route =useRoute()

    let languageId = ref(0)

    let languageName = ref('')

    //  借助更新时生命周期,将数据更新进入响应式对象

    onUpdated (()=>{

        // 获取对象中的参数

        languageId.value=route.params.id

        languageName.value=route.params.language

        console.log(languageId.value)

        console.log(languageName.value)

    })

   

</script>

<template>

    <div>

        <h1>ShowDetail页面</h1>

        <h3>编号{{route.params.id}}:{{route.params.language}}是世界上最好的语言</h3>

        <h3>编号{{languageId}}:{{languageName}}是世界上最好的语言</h3>

    </div>

</template>

<style scoped>

</style>

```

-   ShowDetail2.vue通过useRoute获取键值对参数

```html

<script setup type="module">

    import{useRoute} from 'vue-router'

    import { onUpdated,ref } from 'vue';

    // 获取当前的route对象

    let route =useRoute()

    let languageId = ref(0)

    let languageName = ref('')

    //  借助更新时生命周期,将数据更新进入响应式对象

    onUpdated (()=>{

        // 获取对象中的参数(通过query获取参数,此时参数是key-value形式的)

        console.log(route.query)

        console.log(languageId.value)

        console.log(languageName.value)

        languageId.value=route.query.id

        languageName.value=route.query.language

       

    })

   

</script>

<template>

    <div>

        <h1>ShowDetail2页面</h1>

        <h3>编号{{route.query.id}}:{{route.query.language}}是世界上最好的语言</h3>

        <h3>编号{{languageId}}:{{languageName}}是世界上最好的语言</h3>

    </div>

</template>

<style scoped>

</style>

五、路由守卫

在 Vue 3 中,路由守卫是用于在路由切换期间进行一些特定任务的回调函数。路由守卫可以用于许多任务,例如验证用户是否已登录、在路由切换前提供确认提示、请求数据等。Vue 3 为路由守卫提供了全面的支持,并提供了以下几种类型的路由守卫:

1.  全局前置守卫:在路由切换前被调用,可以用于验证用户是否已登录、中断导航、请求数据等。

2.  全局后置守卫:在路由切换之后被调用,可以用于处理数据、操作 DOM 、记录日志等。

3.  守卫代码的位置: 在router.js中

//全局前置路由守卫

router.beforeEach( (to,from,next) => {

    //to 是目标地包装对象  .path属性可以获取地址

    //from 是来源地包装对象 .path属性可以获取地址

      next是方法,不调用默认拦截! next() 放行,直接到达目标组件

    next('/地址')可以转发到其他地址,到达目标组件前会再次经过前置路由守卫

    console.log(to.path,from.path,next)

    //需要判断,注意避免无限重定向,所以一般需要写在分支条件下。

    if(to.path == '/index'){

        next()

    }else{

        next('/index')

    }

   

} )

//全局后置路由守卫

router.afterEach((to, from) => {

    console.log(`Navigate from ${from.path} to ${to.path}`);

});

> 登录案例,登录以后才可以进入home,否则必须进入login

+ 定义Login.vue

```html

<script setup>

    import {ref} from 'vue'

    import {useRouter} from 'vue-router'

    let username =ref('')

    let password =ref('')

    let router = useRouter();

    let login = () =>{

        console.log(username.value,password.value)

        if(username.value == 'root' & password.value == '123456'){

            router.push({path:'/home',query:{'username':username.value}})

            //登录成功利用前端存储机制,存储账号!

            localStorage.setItem('username',username.value)

            //sessionStorage.setItem('username',username)

        }else{

            alert('登录失败,账号或者密码错误!');

        }

    }

</script>

<template>

   

    <div>

        账号: <input type="text" v-model="username" placeholder="请输入账号!"><br>

        密码: <input type="password" v-model="password" placeholder="请输入密码!"><br>

        <button @click="login()">登录</button>

    </div>

</template>

<style scoped>

</style>

```

+ 定义Home.vue

```html

<script setup>

 import {ref} from 'vue'

 import {useRoute,useRouter} from 'vue-router'

 let route =useRoute()

 let router = useRouter()

 //  并不是每次进入home页时,都有用户名参数传入

 //let username = route.query.username

 let username =window.localStorage.getItem('username');

 let logout= ()=>{

    // 清除localStorge中的username

    //window.sessionStorage.removeItem('username')

    window.localStorage.removeItem('username')

    // 动态路由到登录页

    router.push("/login")

 }

</script>

<template>

    <div>

        <h1>Home页面</h1>

        <h3>欢迎{{username}}登录</h3>

        <button @click="logout">退出登录</button>

    </div>

</template>

<style scoped>

</style>

```

+ App.vue

```html

<script setup type="module">

 

</script>

<template>

    <div>

     

      <router-view></router-view>

     

    </div>

</template>

<style scoped>

</style>

```

+ 定义routers.js

``` javascript

// 导入路由创建的相关方法

import {createRouter,createWebHashHistory} from 'vue-router'

// 导入vue组件

import Home from '../components/Home.vue'

import Login from '../components/login.vue'

// 创建路由对象,声明路由规则

const router = createRouter({

    history: createWebHashHistory(),

    routes:[

        {

            path:'/home',

            component:Home

        },

        {

            path:'/',

            redirect:"/home"

        },

        {

            path:'/login',

            component:Login

        },

    ]

})

// 设置路由的全局前置守卫

router.beforeEach((to,from,next)=>{

    /*

    to 要去那

    from 从哪里来

    next 放行路由时需要调用的方法,不调用则不放行

    */

    console.log(`从哪里来:${from.path},到哪里去:${to.path}`)

    if(to.path == '/login'){

        //放行路由  注意放行不要形成循环  

        next()

    }else{

        //let username =window.sessionStorage.getItem('username');

        let username =window.localStorage.getItem('username');

        if(null != username){

            next()

        }else{

            next('/login')

        }

    }

})

// 设置路由的全局后置守卫

router.afterEach((to,from)=>{

    console.log(`从哪里来:${from.path},到哪里去:${to.path}`)

})

// 对外暴露路由对象

export default router;

```

+ 启动测试

```shell

npm run dev

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

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

相关文章

【前端】使用 HTML、CSS 和 JavaScript 创建一个数字时钟和搜索功能的网页

文章目录 ⭐前言⭐一、项目结构⭐二、HTML 结构⭐三、CSS 样式⭐四、JavaScript 功能⭐五、运行效果⭐总结 标题详情作者JosieBook头衔CSDN博客专家资格、阿里云社区专家博主、软件设计工程师博客内容开源、框架、软件工程、全栈&#xff08;,NET/Java/Python/C&#xff09;、数…

OCR 识别案例

OCR 识别案例 注意点&#xff1a;输入图像尺寸比例尽量和参与模型训练的数据集比例相似&#xff0c;识别效果会更好。 1、pytesseract Pytesseract是一个Python的光学字符识别&#xff08;OCR&#xff09;工具&#xff0c;它作为Tesseract OCR引擎的封装&#xff0c;允许你在…

IP大洗牌ipv6强势来袭!!!【ipv6配置及应用】

前言 随着时代的发展&#xff0c;IPv4&#xff08;互联网协议第四版&#xff09;已逐渐无法满足全球互联网爆炸式增长的需求。自20世纪80年代诞生以来&#xff0c;IPv4凭借其简洁的架构和约43亿的地址容量&#xff0c;支撑了互联网的早期扩张。然而&#xff0c;在移动互联网、物…

OpenAI 推出图像生成新突破:GPT-4o 实现图像编辑对话化

关键要点 OpenAI 推出了 4o 图像生成功能&#xff0c;集成于 GPT-4o&#xff0c;提供精准且逼真的图像生成。 它似乎适用于多种用户&#xff0c;包括免费用户&#xff0c;API 访问预计几周内推出。 安全措施包括 C2PA 元数据和内容屏蔽&#xff0c;限制生成不适当图像。 研究…

口腔种植全流程AI导航系统及辅助诊疗与耗材智能化编程分析

一、系统架构与编程框架设计 口腔种植全流程人工智能导航系统的开发是一项高度复杂的多学科融合工程,其核心架构需在医学精准性、工程实时性与临床实用性之间实现平衡。系统设计以模块化分层架构为基础,结合高实时性数据流与多模态协同控制理念,覆盖从数据采集、智能决策到…

视频生成的测试时Scaling时刻!清华开源Video-T1,无需重新训练让性能飙升

来源 | 机器之心 视频作为包含大量时空信息和语义的媒介&#xff0c;对于 AI 理解、模拟现实世界至关重要。视频生成作为生成式 AI 的一个重要方向&#xff0c;其性能目前主要通过增大基础模型的参数量和预训练数据实现提升&#xff0c;更大的模型是更好表现的基础&#xff0c…

【强化学习】基于深度强化学习的微能源网能量管理与优化策略研究【Python】

目录 主要内容 程序要点 2.1 微能源网系统组成 2.2 强化学习及Q学习算法 部分代码 运行结果 下载链接 主要内容 该程序借助深度 Q 网络&#xff08;DQN&#xff09;&#xff0c;学习预测负荷、风 / 光可再生能源功率输出及分时电价等环境信息&#xff0c;运用…

dom0-kernel: /thermal-zones/soc_max/cooling-maps/map0: could not find phandle 2

问题描述&#xff1a; 由于soc_max下某个节点找不到&#xff0c;到时dom0-kernel后面有很多有关thermal热管理之类报错 问题解决及其原因分析&#xff1a; 这是因为在Xen解析相关节点时&#xff0c;soc_max下的某个节点被跳过了&#xff0c;注释掉相关的cpu节点处理dom0就可以找…

专注自习室:番茄工作法实践

专注自习室&#xff1a;番茄工作法实践 我需要一个任务管理工具&#xff0c;但在网上找了很多都找不到合适的工具。市面上的大多数产品过于强调任务完成性&#xff0c;给我带来了很强的心理压力&#xff0c;这种压力最终反而降低了我的工作效率。于是我决定自己动手&#xff0…

VUE3项目VITE打包优化

VUE3项目VITE打包优化 代码加密依赖配置效果对比图 自动导入依赖配置 代码压缩依赖配置效果对比图 图片压缩依赖配置效果对比图 字体压缩总结与实践运用效果 代码加密 依赖 npm install -D vite-plugin-bundle-obfuscator配置 import vitePluginBundleObfuscator from "…

机器学习——LightGBM

LightGBM(light gradient boosting machine&#xff0c;轻量梯度提升机)是对XGBoost进行改进的模型版本&#xff0c;其三者之间的演变关系为&#xff1a;GBDT-》XGBoost-》LightGBM&#xff0c;依次对性能进行优化&#xff0c;尽管XGBoost已经很高效了&#xff0c;但是仍然有缺…

内网服务器无法通过公网地址访问映射到公网的内网服务

内网服务器无法通过公网地址访问映射到公网的内网服务 问题现象问题原因解决方法总结 前几天遇到一个网络问题&#xff0c;在这里做下记录&#xff0c;希望能帮助到有相同问题的朋友。 问题现象 网络拓扑如上所示&#xff0c;服务器1和服务器2在同一内网&#xff0c;网段均为1…

python每日十题(13)

一般把计算机完成一条指令所花费的时间称为一个指令周期。指令周期越短&#xff0c;指令执行就越快。本题答案为D选项。 顺序程序具有顺序性、封闭性和可再现性的特点&#xff0c;使得程序设计者能够控制程序执行的过程(包括执行顺序、执行时间&#xff09;&#xff0c;对程序执…

多智能体功能分化的核心优势是什么:提升效率,查漏补缺

多智能体功能分化的核心优势是什么:提升效率,查漏补缺 在于通过分工协作提升整体效率、灵活性和鲁棒性。 1. 提升效率与专业性 原理:单一智能体无需处理全流程,通过专业化分工减少冗余计算和决策延迟。 示例: 自动驾驶系统: 感知智能体:专门处理摄像头、激光雷达等传…

COMPASS:通过残差强化学习和技能合成实现跨具身移动策略

25年2月来自 Nvidia、UC Berkeley 和 UT Austin 的论文“COMPASS: Cross-embOdiment Mobility Policy via ResiduAl RL and Skill Synthesis”。 随着机器人越来越多地部署在不同的应用领域&#xff0c;可泛化的跨具身移动策略变得越来越重要。虽然经典的移动栈已被证明在特定…

无人机,雷达定点飞行时,位置发散,位置很飘,原因分析

参考&#xff1a; 无人车传感器 IMU与GPS数据融合进行定位机制_gps imu 组合定位原始数-CSDN博客 我的无人机使用雷达定位&#xff0c;位置模式很飘 雷达的更新频率也是10HZ&#xff0c; 而px飞控的频率是100HZ&#xff0c;没有对两者之间的频率差异做出处理 所以才导致无人…

学习threejs,使用Sprite精灵、SpriteMaterial精灵材质

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.Sprite1.1.1 ☘️代码…

外星人入侵(python设计小游戏)

这个游戏简而言之就是操作一个飞机对前方的飞船进行射击&#xff0c;和一款很久之前的游戏很像&#xff0c;这里是超级低配版那个游戏&#xff0c;先来看看效果图&#xff1a; 由于设计的是全屏的&#xff0c;所以电脑不能截图。。。。 下面的就是你操控的飞船&#xff0c;上面…

23种设计模式-备忘录(Memento)设计模式

备忘录设计模式 &#x1f6a9;什么是备忘录设计模式&#xff1f;&#x1f6a9;备忘录设计模式的特点&#x1f6a9;备忘录设计模式的结构&#x1f6a9;备忘录设计模式的优缺点&#x1f6a9;备忘录设计模式的Java实现&#x1f6a9;代码总结&#x1f6a9;总结 &#x1f6a9;什么是…

某鱼、某宝 sign 签名算法分析记录

【作者主页】&#xff1a;小鱼神1024 【知识星球】&#xff1a;小鱼神的逆向编程圈 【擅长领域】&#xff1a;JS逆向、小程序逆向、AST还原、验证码突防、Python开发、浏览器插件开发、React前端开发、NestJS后端开发等等 本文章中所有内容仅供学习交流使用&#xff0c;不用于其…