【Vue 2.x】学习vue之三路由

在这里插入图片描述

文章目录

  • Vue
    • 三路由
    • 第十章
      • 1、vue中的路由
        • vue的应用分为
          • a、多页面应用
          • b、单页面应用
      • 2、路由的基本应用
          • 1、基础
          • 2、使用
          • 3、加载
      • 3、vue组件的分类
        • 1、普通组件
        • 2、路由组件
      • 4、路由的嵌套
      • 5、路由传递Query参数
        • 1、拼接参数传递
        • 2、路由传递对象
      • 6、简化路由
        • 1、命名路由
      • 7、parms传递参数
        • 1、拼接字符串传递
      • 8、路由缓存
    • 第十一章
      • 1、vue中的路由守卫
        • 什么是路由守卫
        • 路由守卫的分类
      • 2、配置全局路由守卫
        • 1、前置路由守卫
          • 组件的跳转
        • 2、后置路由守卫
      • 3、vue UI的命令生成vue项目结构
      • 4、Element UI
      • 5、用户管理系统
        • 1、头部组件
        • 2、主体区域
          • 1、左边导航
          • 2、右边展示区
    • 第十二章
      • 后台管理系统(elementUI)
        • 1、与后台交互
        • 2、**分页后序号连续显示**
        • 3、往后台传递日期
        • 4、路由重定向
        • 5、路由跳转
        • 6、localStorage与sessionStorage
    • 第十二章
      • 后台管理系统(elementUI)
        • 1、与后台交互
        • 2、**分页后序号连续显示**
        • 3、往后台传递日期
        • 4、路由重定向
        • 5、路由跳转
        • 6、localStorage与sessionStorage

Vue

这是v2版

三路由

第十章

vue中的路由

elementUI的使用

1、vue中的路由

作用:主要是为了实现‘SPA-单页面应用’,根据请求的地址,呈现不同的组件


route:路由(线路)
router:路由器
vue的应用分为
a、多页面应用
		一个页面由多个子页面构成
b、单页面应用
	SPA应用:单页面应用
				1、 单页 Web 应用(single page web application,SPA)。
                2. 整个应用只有一个完整的页面。
                3. 点击页面中的导航链接不会刷新页面,只会做页面的局部更新。
                4. 数据需要通过 ajax 请求获取。

2、路由的基本应用

1、基础
1、导入素材
2、导入外部样式文件
		一般导入到public/css目录下
		
3、在public/index.html导入样式文件,所有vue组件即可应用这些样式
	   <link rel="stylesheet" href="<%= BASE_URL %>css/bootstrap.css">
	   <%= BASE_URL %>---public/

4、创建两个组件
		 about,home
	
5、修改app.vue中的代码,在页面创建:‘路由组件中的展示区’
	       <!-- 路由展示区 -->
           <router-view></router-view>
              
6、修改app.vue中的代码,在页面创建:‘路由组件中的导航区’
		将页面中的超链接替换:
			<a class="list-group-item" href="./about.html">About</a>
            <a class="list-group-item active" href="./home.html">Home</a>
         替换后:
            <router-link class="list-group-item" active-class="active" to="/about">About</router-link>
            
2、使用
 7、使用路由
 		a、安装路由组件
 			npm i vue-router------->路由4.0--->vue3.0
 			npm i vue-router@3----->路由3.0--->vue2.0
         
        b、在src目录下编写route目录以及index.js文件,该文件用于指定路由规则
        		//导入路由插件
                import VueRouter from "vue-router";
                //导入home组件以及about组件
                import home from '../components/home'
                import about from '../components/about'
                import { component } from "vue/types/umd";

                //创建路由器指定规则,并暴露路由规则
                export default new VueRouter({
                    //指定路由规则
                    routes:[
                        {
                            //请求地址是/home
                            path:"/home",
                            //在路由展示区中显示哪一个组件
                            component:home
                        },
                        {
                            //请求地址是/about
                            path:"/about",
                            //在路由展示区中显示哪一个组件
                            component:about
                        },
                    ]
                })
3、加载
  8、在main.js文件中加载路由组件
            import Vue from 'vue'
            import App from './App.vue'
            //引入路由插件
            import VueRouter from 'vue-router'
            //引入路由index.js
            import router from './route/index'
            //使用路由插件
            Vue.use(VueRouter)
            Vue.config.productionTip = false
            new Vue({
              render: h => h(App),
              //在实例中配置路由器
              router: router,
            }).$mount('#app')

3、vue组件的分类

1、普通组件
这类组件使用与路由无关---->存放在components目录
2、路由组件
这类组件是点击路由连接跳转以后显示的组件---->存放在views目录

4、路由的嵌套

一个路由中又包含其他路由地址,就称为:‘嵌套路由’

image-20230524125339826

修改路由规则

/导入home二级组件
import news from '../views/news'
import help from '../views/help'

export default new VueRouter({
    //指定路由规则
    routes: [
        {
            //请求地址是/home;配置一级路由时需要在名称前加/
            path: "/home",
            //在路由展示区中显示哪一个组件
            component: home,
            //配置home下面的二级路由
            children: [
                {
                    //二级路由,一般不要加/
                    //访问地址:/home/news
                    path: 'news',
                    component: news
                },
                {
                    //访问地址:/home/help
                    path: 'help',
                    component: help
                },
            ]
        },
        {
            //请求地址是/about
            path: "/about",
            //在路由展示区中显示哪一个组件
            component: about
        },
    ]
})

5、路由传递Query参数

1、拼接参数传递
在路由地址中拼接参数
1、传递参数	
	<router-link :to="`/home/news/newsShow?id=${k.id}&title=${k.title}`">		{{ k.title }}
	</router-link>

2、获取传递的参数
	{{$router.query.参数名}}
	{{$router.query.id}}
2、路由传递对象
  <router-link :to="{
  			//指定请求路径
            path:'/home/news/newsShow',
            //指定要传递的参数
            query:{
                id:k.id,
                title:k.title
            }
   }">{{ k.title }}</router-link>

//获取
	{{$router.query.id}}

6、简化路由

1、命名路由
特点:给路由指定别名,访问时,直接访问别名即可,不用指定完整路由地址

给路由起别名

在index.js修改代码
        {
            //路由名称
            name: "about",
            //请求地址是/about
            path: "/about",
            //在路由展示区中显示哪一个组件
            component: about
        },

访问别名

/传递值
  <router-link
          :to="{
          //直接访问路由别名即可
            name:'about',
            query:{
                id:k.id,
                title:k.title
             }
        }"
        >{{ k.title }}</router-link>
        
        
/不传值 
		//同样只访问别名
	  <router-link :to="{name:'about'}">{{ k.title }}</router-link>

7、parms传递参数

route路由中传递参数有两种形式:

1、使用jquery传递参数
	:to="xxx/xx?参数名1=值1&参数名2=值2"
	:to="/home/news?id=11&name==zs"
	
2、使用parms传递参数
	:to="xxx/xx/参数1/参数2"
	:to="/home/news/11/zs"
1、拼接字符串传递
1、首先在route/index.js文件中指定路由时,设置占位符
	           {
                   //使用params传递参数
                   //路由名称
                   name: "helpShow",
                   path: 'helpShow/:id/:title',
                   component: helpShow,//组件名称
                }

2、传递参数
	a、传递字符串
    	 <router-link :to="`/home/help/helpShow/${k.id}/${k.title}`">
             {{ k.title }}
         </router-link>
	b、传递对象(必须采用命名路由访问)
    	 <router-link
          :to="{
            name:'helpShow',
            params:{
                id:k.id,
                title:k.title
             }
        }"
        >{{ k.title }}</router-link>

3、取参数
	{{ $route.params.title}}

8、路由缓存

默认情况下,使用vue路由时,当组件切换时,不显示的组件默认会被销毁掉,当再次显示时,该组件会重新创建
【问题:】这样就会导致之前组件上的数据全部丢失
【解决:】进行组件的缓存,我们只需要在视图展示区中,设置哪些组件不用销毁

【解决1:所有组件都不销毁】

    <!-- //设置缓存 -->
    <keep-alive>
      <router-view></router-view>
    </keep-alive>
    
 //此代码表示,该展示区的所有组件都不会销毁

【解决2:指定组件不销毁】

       //include="组件的名称"
       <keep-alive include="NeWS">
          <router-view></router-view>
        </keep-alive>

【解决3:指定多个组件不被销毁】

       <keep-alive include="['NeWS','help']">
          <router-view></router-view>
        </keep-alive>

第十一章

vue中的路由守卫

elementUI

综合应用

1、vue中的路由守卫

什么是路由守卫
作用:主要是对路由进行权限控制,如果身份满足设置的要求就允许继续访问路由的组件,否则不执行对应的路由请求

//就相当于判断用户是否登录,只有登录了才能看
路由守卫的分类
1、全局路由守卫

2、独享路由守卫

3、组件内守卫

2、配置全局路由守卫

1、前置路由守卫
它是在路由到对应的组件之前进行请求拦截

步骤:

1、修改index.js文件
		//不要直接暴露
		const router = new VueRouter({....})
		
		// 此处配置路由守卫
		//to:准备去哪个组件 from:从哪个组件发出请求的  next 是否继续向下运行
            router.beforeEach((to, from, next) => {
                console.log("哪来的", from);
                console.log("准备去哪", to);
                next();//此方法执行,路由才会跳转,否则不会跳转
            })

		//暴露路由器
		export default router;

2、向localstorage存个值(模拟用户信息)
   		//存值:user  aj
   		
   		
3、设置拦范围	
    router.beforeEach((to, from, next) => {
        a、拦截访问所有组件的请求,必须登录才能查看
         var user = localStorage.getItem('user');
         if (user == null) {
             alert("请登录")
             return;
         }
        //b、拦截访问指定组件的请求
        //先判断用户是否访问news组件,如果要访问该组件就进行身份验证
        if (to.path == '/home/news') {
            //判断用户是否登录
            if (localStorage.getItem('user') == null) {
                alert("请登录")
                return;
            }
        }
        //放行
        next();
})
组件的跳转
1、在一个组件中通过函数的方式实现路由跳转
	this.$router.push('/请求地址')
	this.$router.push({
		name:"组件名称"
	})
2、在路由文件index.js中进行编程式跳转
	router.push('/请求地址')
2、后置路由守卫
不常见没讲

3、vue UI的命令生成vue项目结构

ui:user interface
1、在项目cmd输入--->vue ui

2、在localhost:8000界面中生成项目结构

3、将生成的项目结构在vscode中打开,增加功能即

4、Element UI

1、安装组件  npm i element-ui -S

2、在main.js中引入UI
		import ElementUI from 'element-ui';
		import 'element-ui/lib/theme-chalk/index.css';
		Vue.use(ElementUI);
		
3、好了 可以开始cv了

5、用户管理系统

image-20230525201152470

1、头部组件
<template>
  <div
    style="line-height:50px;height:50px;    background-color: #545c64;;border-bottom:1px solid #ccc;display:flex">
    <div style="width:200px;color:#1989fa;;font-weight:bold;margin-left:10px">后台管理系统</div>
    <div style="flex:1">11</div>
    <div style="width:200px">
      <el-col :span="12">
        <el-dropdown>
          <span class="el-dropdown-link">
            用户信息
            <i class="el-icon-arrow-down el-icon--right"></i>
          </span>
          <el-dropdown-menu slot="dropdown">
            <el-dropdown-item icon="el-icon-circle-plus">新建模块</el-dropdown-item>
            <el-dropdown-item icon="el-icon-user">个人信息</el-dropdown-item>
            <el-dropdown-item icon="el-icon-s-tools">系统设置</el-dropdown-item>
            <el-dropdown-item icon="el-icon-switch-button">退出登录</el-dropdown-item>
          </el-dropdown-menu>
        </el-dropdown>
      </el-col>
    </div>
  </div>
</template>
2、主体区域
1、左边导航
<template>
  <div>
    <el-col :span="12">
      <el-menu
        default-active="1-1-1"
        class="el-menu-vertical-demo"
        @open="handleOpen"
        style="width:200px;min-height:calc(100vh - 50px)"
        @close="handleClose"
        background-color="#545c64"
        text-color="#fff"
        active-text-color="#409EFF"
      >
        <el-submenu index="1">
          <template slot="title">
            <i class="el-icon-location"></i>
            <span>学生管理系统</span>
          </template>
          <el-submenu index="1-1">
            <template slot="title">学员管理</template>
            <el-menu-item index="1-1-1">学员查询</el-menu-item>
            <el-menu-item index="1-1-2">成绩查询</el-menu-item>
          </el-submenu>
          <el-submenu index="1-2">
            <template slot="title">班级管理</template>
            <el-menu-item index="1-2-1">班级查询</el-menu-item>
          </el-submenu>
        </el-submenu>
        <el-menu-item index="2">
          <i class="el-icon-menu"></i>
          <span slot="title">课程管理</span>
        </el-menu-item>
        <el-menu-item index="3">
          <i class="el-icon-document"></i>
          <span slot="title">后勤管理</span>
        </el-menu-item>
        <el-menu-item index="4">
          <i class="el-icon-setting"></i>
          <span slot="title">部门管理</span>
        </el-menu-item>
      </el-menu>
    </el-col>
  </div>
</template>
2、右边展示区
<template>
  <!-- 功能按钮 -->
  <div>
    <el-row style="margin:5px">
      <el-button type="primary">添加</el-button>
      <el-button type="success">导入</el-button>
      <el-button type="warning">导出</el-button>
    </el-row>

    <!-- 搜索按钮 -->
    <div style="width:300px;margin:8px">
      <el-input
        type="text"
        style="width:200px"
        placeholder="请输入内容"
        v-model="text"
        maxlength="10"
        show-word-limit
      ></el-input>
      <el-button style="margin-left:5px" type="primary">查询</el-button>
    </div>

    <!-- 表格部分 -->
    <el-table
      :data="tableData"
      border
      style="width: 100%"
      height="250"
      :default-sort="{prop: 'bir', order: 'descending'}"
    >
      <el-table-column type="index" sortable label="编号" align="center" width="180"></el-table-column>
      <el-table-column prop="name" sortable label="姓名" width="180" align="center"></el-table-column>
      <el-table-column prop="clazz" sortable label="班级" width="180" align="center"></el-table-column>
      <el-table-column prop="gender" sortable label="性别" width="180" align="center"></el-table-column>
      <el-table-column prop="score" sortable label="成绩" width="180" align="center"></el-table-column>
      <el-table-column prop="bir" sortable label="出生日期" width="180" align="center"></el-table-column>
      <el-table-column label="操作" width="237" align="center">
        <template slot-scope="scope">
          <el-button @click="handleClick(scope.row)" type="primary" plain size="small">编辑</el-button>
          <el-button type="danger" plain size="small">删除</el-button>
        </template>
      </el-table-column>
    </el-table>
  </div>
</template>

根据考核结果显示优秀良好及格

      <el-table-column label="考核结果" align="center" width="180">
        <template slot-scope="scope">
          <el-popover trigger="hover" placement="top">
            <p>姓名: {{ scope.row.name }}</p>
            <!-- <p>考试时间: {{ scope.row.address }}</p> -->
            <div slot="reference" class="name-wrapper">
              <el-tag
                size="medium"
                type="success"
                v-if="scope.row.score>=90&&scope.row.score<=100"
              >优秀</el-tag>
              <el-tag size="medium" v-if="scope.row.score>=80&&scope.row.score<90">良好</el-tag>
              <el-tag size="medium" type="warning" v-if="scope.row.score>=60&&scope.row.score<80">及格</el-tag>
              <el-tag size="medium" type="danger" v-if="scope.row.score<60&&scope.row.score>=0">不及格</el-tag>
            </div>
          </el-popover>
        </template>

第十二章

后台管理系统(elementUI)

1、与后台交互
1、安装axios
	npm i axios

2、在home中引用axios
   import axios from "axios";
   
3、编写函数用于发送ajax请求
	methods:{
		init(){
			..			
		}
	},
	
2、分页后序号连续显示
  <el-table-column type='index' sortable label="编号" align="center" width="140"></el-table-column>
  
  //这样写有个问题,因为一旦分页之后,新的页面又会从1开始,我们需要让它连续显示

解决

      <el-table-column sortable label="编号" align="center" width="140">
        <template slot-scope="scope">
          <b>{{ scope.$index+(currentPage-1)*pageSize+1 }}</b>
        </template>
      </el-table-column>

//手动计算翻页后从几开始
3、往后台传递日期
        <el-form-item label="生日" label-width="80px">
          <div class="block">
            <el-date-picker
              style="width:80%"
              v-model="form.bir"
              align="right"
              type="date"
              value-format="yyyy-MM-dd"
              placeholder="选择日期"
              :picker-options="pickerOptions"
            ></el-date-picker>
          </div>
        </el-form-item>
      </el-form>

//加一个     value-format="yyyy-MM-dd"
4、路由重定向
    //路由地址
    path: '/',
    name: "myLayout",
    //如果没有指定具体的地址,就重定向login组件上
    redirect:"login",
    component: myLayout,
      
5、路由跳转

	this.$router.push({ path: "/home" });

//通过地址栏跳转
//window.location.href = "http://localhost:8080/login";
6、localStorage与sessionStorage
相同点:
	他们都是在客户端浏览器中存放用户数据,他们的方法完全一样
	
	存:
		localStorage.setItem('名称',值);
		sessionStorage.setItem('名称',值);
	取:
		var msg=localStorage.getItem("名称")
		var msg=sessionStorage.getItem("名称")
不同点:
	存放在localStorag中的数据永久有效,只有不清空浏览器数据,它将一直存在
	
	存放在sessionStorage的数据,只要当前浏览器关闭,数据就会丢失

align=“center”>






<el-button @click=“handleClick(scope.row)” type=“primary” plain size=“small”>编辑
删除


```

根据考核结果显示优秀良好及格

      <el-table-column label="考核结果" align="center" width="180">
        <template slot-scope="scope">
          <el-popover trigger="hover" placement="top">
            <p>姓名: {{ scope.row.name }}</p>
            <!-- <p>考试时间: {{ scope.row.address }}</p> -->
            <div slot="reference" class="name-wrapper">
              <el-tag
                size="medium"
                type="success"
                v-if="scope.row.score>=90&&scope.row.score<=100"
              >优秀</el-tag>
              <el-tag size="medium" v-if="scope.row.score>=80&&scope.row.score<90">良好</el-tag>
              <el-tag size="medium" type="warning" v-if="scope.row.score>=60&&scope.row.score<80">及格</el-tag>
              <el-tag size="medium" type="danger" v-if="scope.row.score<60&&scope.row.score>=0">不及格</el-tag>
            </div>
          </el-popover>
        </template>

第十二章

后台管理系统(elementUI)

1、与后台交互
1、安装axios
	npm i axios

2、在home中引用axios
   import axios from "axios";
   
3、编写函数用于发送ajax请求
	methods:{
		init(){
			..			
		}
	},
	
2、分页后序号连续显示
  <el-table-column type='index' sortable label="编号" align="center" width="140"></el-table-column>
  
  //这样写有个问题,因为一旦分页之后,新的页面又会从1开始,我们需要让它连续显示

解决

      <el-table-column sortable label="编号" align="center" width="140">
        <template slot-scope="scope">
          <b>{{ scope.$index+(currentPage-1)*pageSize+1 }}</b>
        </template>
      </el-table-column>

//手动计算翻页后从几开始
3、往后台传递日期
        <el-form-item label="生日" label-width="80px">
          <div class="block">
            <el-date-picker
              style="width:80%"
              v-model="form.bir"
              align="right"
              type="date"
              value-format="yyyy-MM-dd"
              placeholder="选择日期"
              :picker-options="pickerOptions"
            ></el-date-picker>
          </div>
        </el-form-item>
      </el-form>

//加一个     value-format="yyyy-MM-dd"
4、路由重定向
    //路由地址
    path: '/',
    name: "myLayout",
    //如果没有指定具体的地址,就重定向login组件上
    redirect:"login",
    component: myLayout,
      
5、路由跳转

	this.$router.push({ path: "/home" });

//通过地址栏跳转
//window.location.href = "http://localhost:8080/login";
6、localStorage与sessionStorage
相同点:
	他们都是在客户端浏览器中存放用户数据,他们的方法完全一样
	
	存:
		localStorage.setItem('名称',值);
		sessionStorage.setItem('名称',值);
	取:
		var msg=localStorage.getItem("名称")
		var msg=sessionStorage.getItem("名称")
不同点:
	存放在localStorag中的数据永久有效,只有不清空浏览器数据,它将一直存在
	
	存放在sessionStorage的数据,只要当前浏览器关闭,数据就会丢失

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

控制台主机不能运行,切换终端实现RPG运行

鄙人转载&#xff0c;主要是移植过程中使用小熊猫C2.25.1 过程中&#xff0c;字符集不同&#xff0c;导致某些空格 从bilibili专栏粘贴导致出现符号不匹配&#xff0c;但是编辑器不能替换 用原来的devc 5.11 发现问题&#xff0c;读出额外的英文&#xff1f; 使用文件替换&…

C语言贪吃蛇项目

今天给大家带来一款简单的贪吃蛇游戏&#xff0c;一起随我来看看吧 游戏效果&#xff1a; 实现基本的功能&#xff1a; • 贪吃蛇地图绘制 • 蛇吃⻝物的功能&#xff1a;&#xff08;上、下、左、右⽅向键控制蛇的动作&#xff09; • 蛇撞墙死亡 • 蛇撞⾃⾝死亡 • 计算得分…

5.C++动态内存管理(超全)

目录 1 .C/C 内存分布 2. C语言中动态内存管理方式&#xff1a;malloc/calloc/realloc/free 3. C内存管理方式 3.1 new/delete操作内置类型 3.2 new和delete操作自定义类型 3.3 operator new函数 3.4 定位new表达式(placement-new) &#xff08;了解&#xff09; 4. 常…

【ARMv8/v9 系统寄存 3 -- system counter CNTPCT_EL0】

文章目录 ARMv8/v9 system countersystem counter读取函数实现 ARMv8/v9 system counter 所有使用Arm处理器的系统中都会包含一个标准化的通用定时器&#xff08;Generic Timer&#xff09;框架。这个通用定时器系统提供了一个系统计数器&#xff08;System Counter&#xff0…

ps科研常用操作,制作模式图 扣取想要的内容元素photoshop

复制想要copy的图片&#xff0c; 打开ps---file-----new &#xff0c;ctrolv粘贴图片进入ps 选择魔棒工具&#xff0c;点击想要去除的白色区域 然后&#xff0c;cotrol shift i&#xff0c;反选&#xff0c; ctrol shiftj复制&#xff0c;复制成功之后&#xff0c;一定要改…

UnityWebGL获取话筒实时数据

看了木子李大佬的数字人https://digital.lkz.fit/之后&#xff0c;我也想搞一个&#xff0c;于是开始研究起来&#xff0c;先从WebGL录音开始&#xff0c;一共试了三个插件&#xff0c;个个都有问题…… 1、UnityWebGLMicrophone 用起来没啥问题&#xff0c;但是只能录音&#…

大型企业总分支多区域数据传输,效率为先还是安全为先?

大型企业为了业务拓展需要&#xff0c;会在全国乃至全球各地设立分公司和办事机构&#xff0c;以便更好地处理当地事务&#xff0c;并进行市场的开拓和客户维护&#xff0c;此时&#xff0c;企业内部就衍生出了新的业务需求&#xff0c;即多区域数据传输。 多区域很难准确定义&…

【大语言模型LLM】-基于ChatGPT搭建客服助手(1)

&#x1f525;博客主页&#xff1a;西瓜WiFi &#x1f3a5;系列专栏&#xff1a;《大语言模型》 很多非常有趣的模型&#xff0c;值得收藏&#xff0c;满足大家的收集癖&#xff01; 如果觉得有用&#xff0c;请三连&#x1f44d;⭐❤️&#xff0c;谢谢&#xff01; 长期不…

2024年五一杯高校数学建模竞赛(A题)|钢板切割问题 | 建模解析,小鹿学长带队指引全代码文章与思路

我是鹿鹿学长&#xff0c;就读于上海交通大学&#xff0c;截至目前已经帮200人完成了建模与思路的构建的处理了&#xff5e; 本篇文章是鹿鹿学长经过深度思考&#xff0c;独辟蹊径&#xff0c;通过路径优化解决钢板切割问题。结合贪心算法&#xff0c;Floyd-Warshall等多元算法…

STM32G030F6P6TR 芯片TSSOP20 MCU单片机微控制器芯片

STM32G030F6P6TR 在物联网&#xff08;IoT&#xff09;设备中的典型应用案例包括但不限于以下几个方面&#xff1a; 1. 环境监测系统&#xff1a; 使用传感器来监测温度、湿度、气压等环境因素&#xff0c;并通过无线通信模块将数据发送到中央服务器或云端平台进行分析和监控。…

Ansys Speos|进行智能手机镜头杂散光分析

本例的目的是研究智能手机Camera系统的杂散光。杂散光是指光向相机传感器不需要的散光光或镜面光&#xff0c;是在光学设计中无意产生的&#xff0c;会降低相机系统的光学性能。 在本例中&#xff0c;光学透镜系统使用Ansys Zemax OpticStudio (ZOS)进行设计&#xff0c;并使用…

字符串函数、内存函数——补充

目录 前言 1、strchr函数 1-1 函数介绍 1-1-1 函数功能 1-1-2 函数原型 1-1-3 函数参数 1-1-4 所属库 1-1-5 函数返回值 1-2 函数简单使用 1-3 函数使用场景 1-4 函数的使用总结 1-4-1 注意事项 2、strrchr函数 2-1 函数介绍 2-1-1 函数功能 2-1-2 函数原型 2…

ubuntu入门

基础命令 cd 切换命令 ls 查看当前目录下所有的文件 cp a.c b.c 拷贝a.c 到 b.c touch a.c 创建a.c文件 mkdir file 创建文件夹file rm file 删除文件 rmdir 删除test文件夹 rmdir test/ mv 移动文件 mv a.c b.c 把a.c 替换成b.c ifconfig 查看电脑网络信息 rm xx 删…

人工电销机器人在销售行业中的重要性和作用,以及未来市场的发展前景

在追求更高效、更智能的时代&#xff0c;各行各业都在积极寻求新技术、新应用来提升业务流程的效率和质量。对于销售行业而言&#xff0c;人工电销机器人已经成为越来越受欢迎的工具之一。我们将深入探讨人工电销机器人在销售行业中的重要性和作用&#xff0c;以及未来市场的发…

31.Gateway网关-跨域问题

跨域 1.域名不同&#xff1a;www.baidu.com和www.taobao.com,www.taobao.org 2.域名相同&#xff0c;端口不同。localhost:8080和localhost:8081 跨域问题 浏览器禁止请求的发起者与服务端发生跨域ajax请求&#xff0c;请求被浏览器拦截的问题。 解决方案 CORS 浏览器询…

linux安装Redis 7.2.4笔记

一.保姆级安装 1.下载Redis 7.2.4安装包 sudo wget https://download.redis.io/releases/redis-7.2.4.tar.gz2.解压&#xff0c;可以指定 sudo tar -zvxf redis-7.2.4.tar.gz 3.检测并安装 GCC 编译器&#xff1a; yum 是基于 Red Hat 的 Linux 发行版&#xff08;如 CentOS、…

【webrtc】MessageHandler 5: 基于线程的消息处理:以PeerConnection信令线程为例

peerconn的信令是通过post 消息到自己的信令线程消息来处理的PeerConnectionMessageHandler 是具体的处理器G:\CDN\rtcCli\m98\src\pc\peer_connection_message_handler.hMachinery for handling messages posted to oneself PeerConnectionMessageHandler 明确服务于 signalin…

分布式与一致性协议之Raft算法(四)

Raft算法 Raft是如何解决成员变更问题的 在日常工作中&#xff0c;你可能会遇到服务器故障的情况&#xff0c;这时你需要替换集群中的服务器。如果遇到需要改变数据副本数的情况&#xff0c;则需要增加或移除集群中的服务器。总的来说&#xff0c;在日常工作中&#xff0c;集…

进一步了解android studio 里 AGP,gradle等关系

目录 &#xff08;1&#xff09; gradle是什么 &#xff08;2&#xff09; 工程的jdk版本&#xff0c;及引用包的编译版本的关系 实践 问题与解决 编译成功与运行成功 编译成功 运行成功 &#xff08;1&#xff09; gradle是什么 Gradle是一个构建工具&#xff0c;它是…

Mac 版 安装NVM

优质博文IT-BLOG-CN NVM&#xff08;Node Version Manager&#xff09;是一个用于管理多个Node.js版本的工具。它允许开发者在同一台机器上安装和切换不同版本的Node.js&#xff0c;以便在不同的项目中使用不同的Node.js版本。macOS用户可以使用homebrew来安装NVM。 一、安装h…