Vue介绍、窗体内操作、窗体间操作学习

系列文章目录

第一章 基础知识、数据类型学习
第二章 万年历项目
第三章 代码逻辑训练习题
第四章 方法、数组学习
第五章 图书管理系统项目
第六章 面向对象编程:封装、继承、多态学习
第七章 封装继承多态习题
第八章 常用类、包装类、异常处理机制学习
第九章 集合学习
第十章 IO流、多线程学习
第十一章 仓库管理系统项目
第十二章 员工管理系统、多表查询、反射实现DBHelper学习
第十三章 DML、DDL、数据库对象学习
第十四章 网络编程、各种标签、CSS学习
第十五章 ECMAScript、BOM学习
第十六章 DOM、jQuery学习
第十七章 servlet、jsp、Cookie、Ajax学习
第十八章 融资管理系统项目
第十九章 MyBatis框架学习
第二十章 逆向工程、Spring框架IOC、AOP学习
第二十一章 SpringMVC框架学习
第二十二章 SpringBoot框架学习
第二十三章 招聘网站项目
第二十四章 Vue介绍、窗体内操作、窗体间操作学习


文章目录

  • 系列文章目录
  • 前言
  • 一、Vue介绍
    • 1. Vue框架介绍
    • 2. Vue组成部分
    • 3. Vue编程环境
  • 二、Vue窗体内操作
    • 1. 使用变量
    • 2. 渲染概念
    • 3. 条件渲染v-if / v-show
      • 3.1 条件渲染分类
      • 3.2 v-if/v-show代码示例
    • 4. 列表渲染v-for
    • 6. Css改变样式
    • 7. 表单处理——双向数据绑定v-model
      • 7.1 双向数据绑定v-model介绍
      • 7.2 代码实现
  • 三、Vue窗体间操作
    • 1. 窗体跳转
    • 2. 窗体间互相传值
      • 2.1 代码
      • 2.2 运行结果
      • 2.3 解析
      • 2.2.1 父窗体App传值到子窗体Menu使用props
      • 2.2.2 子窗体Menu传值到父窗体App使用自定义事件$emit
    • 3. 窗体的生命周期
      • 3.1 代码
      • 3.2 运行结果
  • 四、代码文件
    • 1. demo1.vue
    • 2. HelloWorld.vue
    • 3. Menu.vue
    • 4. App.vue
  • 总结


前言

本文会讲述:
Vue介绍;
窗体内操作;
窗体间操作。

在下是宇宙人,是称霸宇宙的究极生命体!!!


一、Vue介绍

1. Vue框架介绍

Vue框架是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建,并提供了一套声明式的、组件化的编程模型,帮助你高效地开发用户界面。无论是简单还是复杂的界面,Vue 都可以胜任。

2. Vue组成部分

由三种语法构成

<template>
此处编写html组件标签
</template><script>
此处编写JavaScript函数变量
</script><style>
此处编写CSS样式
</style>

3. Vue编程环境

使用VSCode进行编程,其中安装了Vue相关插件,同时安装了Node.js进行运行

二、Vue窗体内操作

全部代码可以在总结前取到!!!
效果展示图同上位置!!!

代码结构:
在这里插入图片描述
所用到文件:demo1.vue、HelloWorld.vue、Menu.vue、App.vue(主要)

1. 使用变量

在Vue中,可以通过使用双大括号{{ 变量名 }}来在模板中引用变量,并将其作为文本内容进行显示。Vue的模板语法允许在双大括号中使用表达式,可以在大括号内使用任何有效的JavaScript表达式。标签属性里用不需要{{}}
在template部分:

<a href="https://blog.csdn.net/howwickhappy">{{ mess }}</a>

在script部分:

<script>
export default {name: 'App', // 当前页面名字data() { // 设置当前页面的成员变量return {mess: "点击跳天选之人"}
}
</script>

运行结果:
在这里插入图片描述
在Vue中,script部分的变量必须放在
data() {return {变量1,变量2,变量3,变量4}}
两层大括号中
理由:
data()在这里虽然是用于存储变量的,但是其实是一个方法,html要使用这些变量时,其实默认调用了data方法,然后去找到这个变量,然后获取返回值

2. 渲染概念

在Vue中,渲染是指将Vue模板中的数据和逻辑转换为最终的可视化输出的过程。

3. 条件渲染v-if / v-show

3.1 条件渲染分类

条件渲染分为两种:v-if和v-show

两者有什么区别呢?
v-if:是在渲染元素前判断,if中的值是否为true,如果是,则渲染本元素,否则不进行渲染,是惰性的
v-show:是在渲染元素后判断,是否为true,如果是,则显示本元素,否则隐藏本元素
两者对比:v-if有更高的切换开销;v-show有更高的初始渲染开销
因此,如果需要频繁地切换,则使用v-show好;如果运行时条件改变较少,则使用v-if好

3.2 v-if/v-show代码示例

在template部分:

<ul><li v-show="boo">起床吃早饭</li><li>回去睡一觉</li><li>起床吃午饭</li><li>回去睡一觉</li><li>起床吃晚饭</li><li v-if="boo">突然一激灵</li><li v-else>回去睡一觉</li>
</ul>

在script部分:

<script>
export default {name: 'App', // 当前页面名字data() { // 设置当前页面的成员变量return {mess: "点击跳天选之人",boo: false}
}
</script>

运行结果:
在这里插入图片描述
我们使用boo布尔值变量来控制各个元素的显示与否,需要注意的是:v-if/v-else还有v-else-if作为同类
在这里提下:
ul和ol的区别:
ol标签内的子标签会以
1、回去睡一觉
2、回去睡一觉
3、回去睡一觉
的有序方式标注,ul内会以
·回去睡一觉
·回去睡一觉
·回去睡一觉
的无序方式标注

4. 列表渲染v-for

在template部分:

<select style="width: 100;height: fit-content;" @change="method1"><option v-for="(a, i) in names" :key="i">{{ a }}</option>
</select>

@change="method1"是方法的使用,大家不用着急,马上就会讲到
在script部分:

<script>
export default {name: 'App', // 当前页面名字data() { // 设置当前页面的成员变量return {names: ["权拳到肉", "纸上谈兵", "严阵以待", "金戈铁马", "鸡飞蛋打"]}}
</script>

运行结果:
在这里插入图片描述

{{ a }} 此子标签使用v-for指令遍历names数组,并生成option标签: **(a, i) in names** 表示将数组的所有元素赋值给a变量,且i作为下标; **:key="i"** 可以获取i变量的值,并作为此option的key,以便后期处理; **{{ a }}** 代表a变量的值作为选项的文本内容 ## 5. 事件处理v-on **在template部分:** ```html
编号姓名年龄性别
{{ i }}{{ e.name }}{{ e.age }}{{ e.sex }}
``` **在script部分:** ```javascript ``` **运行结果:** ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/bdd2baf1263f4d1e9a0feae06e309f60.png) ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/3cd7d72a16bc4d2a8cc381d2a62437a2.png) 上图第一个是show函数的弹窗,对应列表的点击事件: 点击事件的标准格式是v-on:click="show(e.name)" 但是我们可以简写为@click="show(e.name)",使用@代替v-on:是一种简写格式

第二个是method1函数的弹窗,对应下拉列表的改变事件,对应4. 列表渲染v-for 的事件

6. Css改变样式

在template部分:

<template><a v-bind:class="{ cla: !boo }" :href="aaa">{{ mess }}</a><!-- v-bind:class="{ cla: !boo }",v-bind可省略,例如href的--><!-- 其中boo、aaa、mess是变量--><button @click="changeurl">点击更换a地址</button>
</template>

在script部分:

<script>
export default {name: 'App', // 当前页面名字data() { // 设置当前页面的成员变量return {str: "我是APP页面!",mess: "点击跳天选之人",boo: false,aaa: "https://blog.csdn.net/howwickhappy"}
}, methods: { // 设置事件绑定函数changeurl() {this.aaa = "http://localhost:8080/";}
}
</script>

在css部分:

<style type="text/css">
.cla {color: red;font-size: 20px;
}
</style>

运行结果:
在这里插入图片描述
":“能够表示后面”"内的是变量名,而不是普通的字符串
这段代码可以实现:
1、在页面的超链接显示mess变量值;
2、可以跳转到aaa网页;
3、可以通过boo布尔值判断是否给超链接加cla对应样式,使用v-bind:进行绑定样式,v-bind:class指令也可以使用缩写形式:class
4、通过点击按钮可以更改本超链接的地址

7. 表单处理——双向数据绑定v-model

7.1 双向数据绑定v-model介绍

template部分表单元素的值与script部分同名的变量进行同步,语法实现是加v-model,能够实现快速方便的值的传递、数据的双向更新。
底层实现是默认的一个onchange
值从文本框《==》成员变量自动同步

7.2 代码实现

在template部分:

<template><!--双向绑定步骤:1.标签里 v-model="变量名"2.js中的成员变量里,要同名变量--><form>用户名: <input type="text" v-model="uname" /><br />密码: <input type="text" v-model="pwd" /><br />性别: <input type="radio" v-model="sex" name="a" value="1" /><input type="radio" v-model="sex" name="a" value="2" /><br /><input type="button" value="登录" @click="login"/></form>
</template>

在script部分:

<script>
export default {name: 'App', // 当前页面名字data() { // 设置当前页面的成员变量return {uname: "",pwd: "",sex: ""}}, methods: { // 设置事件绑定函数login(){ alert(this.uname+";"+this.pwd+";"+this.sex+"进行登录");}
}
</script>

运行结果:
在这里插入图片描述
在这里插入图片描述
实现了数值的自动同步

三、Vue窗体间操作

1. 窗体跳转

demo1.vue文件

<template><div><h1>{{ str }}</h1></div>
</template><script>
export default {name: "demo1",data(){return{str:"我是demo1组件"}}
}
</script><style></style>

在template部分:

<template><demo1/>
</template>

在script部分:

<script>
/* 导入组件 */
import demo1 from './components/demo1.vue';
export default {name: 'App', // 当前页面名字components:{ /* 记录导入的组件名称 */demo1}
</script>

运行结果:
在这里插入图片描述
1、创建新的组件
2、导入组件:import demo1 from ‘./components/demo1.vue’;
3、记录组件:components:{ demo1 }
4、在template调用:< demo1/>

2. 窗体间互相传值

2.1 代码

Menu.vue文件

<template><div><ul><li v-for="(e,i) in news" :key="i">{{ e }}</li></ul><input type="button" value="传值" @click="method1"/></div>
</template><script>
export default {name:"Menu",props:{ // 接受其他组件传递过来的数据,变量名= :属性名news: Array },data(){ // 存储成员变量return{str: "我是menu组件"}},methods:{ // 事件绑定的函数method1(){this.$emit("getVal", this.str); // $emit用于自组件传递给父组件,第一个参数是父组件的事件名,第二个是要传递的参数}}
}
</script><style></style>

App.vue文件

<template><div id="app"><Menu :news="menu1" @getVal="getStr"/><Menu :news="menu2"/></div>
</template>
<script>
/* 导入组件 */
import Menu from './components/Menu.vue';
export default {name: 'App', // 当前页面名字data() { // 设置当前页面的成员变量return {menu1:["农业新闻","教育新闻","天气新闻"],menu2:["国际新闻","军事新闻","体育新闻","民生新闻"]}}, methods: { // 设置事件绑定函数getStr(str){alert("传递过来的值是"+str);}},components:{ /* 记录导入的组件名称 */demo1,Menu}
}
</script>
<style type="text/css"></style>

2.2 运行结果

在这里插入图片描述
在这里插入图片描述
提示:第二个按钮传值的alert不会成功,因为我们没有监听该方法,所以程序不知道该干啥

2.3 解析

本部分的传值涉及到两个方面:App给Menu;Menu给App我们会分别进行讲解

2.2.1 父窗体App传值到子窗体Menu使用props

子窗体用props接收父窗体传过来的数据,我们使用传来的数据menu1:["农业新闻","教育新闻","天气新闻"]构建Menu的组件

props:{ // 接受其他组件传递过来的数据,变量名= :属性名news: Array 
}

2.2.2 子窗体Menu传值到父窗体App使用自定义事件$emit

子窗体传值到父窗体的过程有点像控制电梯,像是我在父窗体十一楼,按父窗体十一楼按钮电梯按钮,在子窗体一楼数据电梯就会传回父窗体升上来
我们先介绍下@getVal是什么:
@getVal是一个事件监听器,用于监听子窗体Menu触发的getVal事件。表示当Menu窗体触发getVal事件时,会调用父窗体的getStr方法。

method1(){this.$emit("getVal", this.str); // $emit用于自组件传递给父组件,第一个参数是父组件的事件名,第二个是要传递的参数
}

$ emit是Vue提供的方法,用于触发自定义事件。当App窗体的按钮被点击时,method1方法会被调用,然后通过this.$emit(“getVal”, this.str)语句,触发了名为getVal的自定义事件,并将this.str作为参数传递给父组件。

3. 窗体的生命周期

3.1 代码

Menu.vue文件

<template><div><h1 @click="changeText">{{ info }}</h1></div>
</template><script>
export default {name: 'HelloWorld',data(){return{info:"介绍组件的生命周期"}},methods:{changeText(){this.info="我是刺客!图穷匕见!喝啊!!!!";}},beforeCreate(){console.log("————建组件前");},created(){console.log("————创建组件后");},beforeMount(){console.log("————数据渲染前");},mounted(){console.log("————数据渲染后");},beforeUpdate(){console.log("————修改前");},updated(){console.log("————修改后");},beforeDestroy(){console.log("————组件销毁前");},destroyed(){console.log("————组件销毁后");}
}
</script><style></style>

App.vue文件

<template><div id="app"><HelloWorld/></div>
</template><script>
/* 导入组件 */
import HelloWorld from './components/HelloWorld.vue'
export default {name: 'App', // 当前页面名字components:{ HelloWorld }
}
</script><style type="text/css"></style>

3.2 运行结果

未点击前:
在这里插入图片描述
点击后:
在这里插入图片描述

四、代码文件

1. demo1.vue

<template><div><h1>{{ str }}</h1></div>
</template><script>
export default {name: "demo1",data(){return{str:"我是demo1组件"}}
}
</script><style></style>

2. HelloWorld.vue

<template><div><h1 @click="changeText">{{ info }}</h1></div>
</template><script>
export default {name: 'HelloWorld',data(){return{info:"介绍组件的生命周期"}},methods:{changeText(){this.info="我是刺客!图穷匕见!喝啊!!!!";}},beforeCreate(){console.log("————建组件前");},created(){console.log("————创建组件后");},beforeMount(){console.log("————数据渲染前");},mounted(){console.log("————数据渲染后");},beforeUpdate(){console.log("————修改前");},updated(){console.log("————修改后");},beforeDestroy(){console.log("————组件销毁前");},destroyed(){console.log("————组件销毁后");}
}
</script><style></style>

3. Menu.vue

<template><div><ul><!--<li>体育新闻</li><li>农业新闻</li><li>娱乐新闻</li>--><li v-for="(e,i) in news" :key="i">{{ e }}</li></ul><input type="button" value="传值" @click="method1"/></div>
</template><script>
export default {name:"Menu",props:{ // 接受其他组件传递过来的数据,变量名= :属性名news: Array },data(){ // 存储成员变量return{str: "我是menu组件"}},methods:{ // 事件绑定的函数method1(){this.$emit("getVal", this.str); // $emit用于自组件传递给父组件,第一个参数是父组件的事件名,第二个是要传递的参数}}
}
</script><style></style>

4. App.vue

<template><div id="app"><demo1/><Menu :news="menu1" @getVal="getStr"/><Menu :news="menu2"/><HelloWorld/><a :class="{ cla: !boo }" :href="aaa">{{ mess }}</a><!-- v-bind:class="{ cla: !boo }",v-bind可省略--><button @click="changeurl">点击更换a地址</button><ul><li v-show="boo">起床吃早饭</li><li>回去睡一觉</li><li>起床吃午饭</li><li>回去睡一觉</li><li>起床吃晚饭</li><li v-if="boo">突然一激灵</li><li v-else>回去睡一觉</li></ul><!--  -->罪人!!罪有应得!!<br /><select style="width: 100;height: fit-content;" @change="method1"><option v-for="(a, i) in names" :key="i">{{ a }}</option></select><table><tr><td>编号</td><td>姓名</td><td>年龄</td><td>性别</td></tr><tr v-for="(e, i) in objs" :key="i" v-on:click="show(e.name)"><td>{{ i }}</td><td>{{ e.name }}</td><td>{{ e.age }}</td><td>{{ e.sex }}</td></tr></table><hr /><!--双向绑定步骤:1.标签里 v-model="变量名'2.js中的成员变量里,要同名变量--><form>用户名: <input type="text" v-model="uname" /><br />密码: <input type="text" v-model="pwd" /><br />性别: <input type="radio" v-model="sex" name="a" value="1" /><input type="radio" v-model="sex" name="a" value="2" /><br /><input type="button" value="登录" @click="login"/></form></div>
</template><script>
/* 导入组件 */
import demo1 from './components/demo1.vue';
import Menu from './components/Menu.vue';import HelloWorld from './components/HelloWorld.vue'export default {name: 'App', // 当前页面名字data() { // 设置当前页面的成员变量return {str: "我是APP页面!",mess: "点击跳天选之人",boo: false,aaa: "https://blog.csdn.net/howwickhappy",age: 23,names: ["权拳到肉", "纸上谈兵", "严阵以待", "金戈铁马", "鸡飞蛋打"],objs: [{name: '金睛火猿', age: 20, sex: '男'},{name: '金睛水猿', age: 20, sex: '男'}, {name: '金睛木猿', age: 20, sex: '男'}, {name: '金睛金猿', age: 20, sex: '男'}, {name: '金睛土猿', age: 20, sex: '男'}],uname: "",pwd: "",sex: "",menu1:["农业新闻","教育新闻","天气新闻"],menu2:["国际新闻","军事新闻","体育新闻","民生新闻"]}}, methods: { // 设置事件绑定函数show(name) {alert("你要删除" + name + "嘛?");},method1() {alert("选择了新的选项!");},changeurl() {this.aaa = "http://localhost:8080/";},login(){alert(this.uname+";"+this.pwd+";"+this.sex+"进行登录");},getStr(str){alert("传递过来的值是"+str);}},components:{ /* 记录导入的组件名称 */demo1,Menu,HelloWorld}}
</script><style type="text/css">
.cla {color: red;font-size: 20px;
}
</style>

总结

本文讲述了:
Vue介绍:一款方便整洁的操作前端的框架;
窗体内操作:使用变量、渲染概念、条件渲染v-if/v-show、列表渲染v-for、Css改变样式、表单处理—双向数据绑定v-model;
窗体间操作:窗体跳转、窗体间互相传值、窗体的生命周期。

在下好累,同前言好了:在下是宇宙人,是称霸宇宙的究极生命体!!!

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

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

相关文章

【Linux】Ubuntu 22.04 shell实现MySQL5.7 tar 一键安装

参考 https://blog.csdn.net/qq_35995514/article/details/134350572?spm1001.2014.3001.5501 源文章是centos 的 教程&#xff0c;这里为了大家的方便&#xff0c;再原作者基础上做了修改&#xff0c;记录了ubuntu的22.04的我的配置&#xff0c;加了一个删除原有mysql 的脚本…

【诉讼流程-健身房-违约认定-私教课-诉讼书前提材料整理-民事诉讼-自我学习-铺平通往法律的阶梯-讲解(2)】

【诉讼流程-健身房-违约-私教课-前期法律流程-民事诉讼-自我学习-铺平通往法律的阶梯-讲解&#xff08;2&#xff09;】 &#xff08;1&#xff09;前言说明1、目的2、一个小测试1、更换原教练2、频繁更换教练3、上课估计拖课&#xff0c;占用上课时间&#xff0c;抽烟等。4、以…

Python计算机视觉 第10章-OpenCV

Python计算机视觉 第10章-OpenCV OpenCV 是一个C 库&#xff0c;用于&#xff08;实时&#xff09;处理计算视觉问题。实时处理计算机视觉的 C 库&#xff0c;最初由英特尔公司开发&#xff0c;现由 Willow Garage 维护。OpenCV 是在 BSD 许可下发布的开源库&#xff0c;这意味…

2024/9/11学校教的响应式前端能学到什么?

9.11 1&#xff09;砌砖 确定整体框架&#xff0c;而不是想到一点写一点&#xff0c;类似盖大楼&#xff0c;不是想到哪盖到哪&#xff0c;先砌砖&#xff0c;再装修 砌砖前先划分好砌砖范围(初始化样式) 清除body自带的内外边距 * { margin: 0; padding: 0; }去掉li的小圆点…

【新片场-注册安全分析报告-无验证方式导致安全隐患】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 1. 暴力破解密码&#xff0c;造成用户信息泄露 2. 短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉 3. 带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造…

微信小程序开发第三课

1 wxml语法 1.1 模版语法 # 1 在页面 xx.js 的 Page() 方法的 data 对象中进行声明定义 # 2 在xx.wxml 中使用 {{}} 包裹&#xff0c;显示数据 # 3 可以显示如下&#xff0c;不能编写js语句或js方法-变量-算数运算-三元运算-逻辑判断# 4 只是单纯通过赋值&#xff0c;js中…

快速生成服务器响应json-server的安装和使用

json-server介绍地址:https://www.geeksforgeeks.org/json-server-setup-and-introduction/ 1.json-server是什么? 基于自定义的json文件,快速生成服务端响应,可用于前端调试接口 2.安装和卸载json-server 2.1 安装: 使用npm命令: npm install -g json-server 2.2 卸载 npm …

工厂方法模式和抽象工厂模式

工厂方法模式 一个工厂只能创建一种产品 工厂方法模式的结构 工厂方法模式包含以下4个角色 Product&#xff08;抽象产品&#xff09; ConcreteProduct&#xff08;具体产品&#xff09; Factory&#xff08;抽象工厂&#xff09; ConcreteFactory&#xff08;具体工厂…

(论文解读)Visual-Language Prompt Tuning with Knowledge-guided Context Optimization

Comment: accepted by CVPR2023 基于知识引导上下文优化的视觉语言提示学习 摘要 提示调优是利用任务相关的可学习标记将预训练的视觉语言模型&#xff08;VLM&#xff09;适应下游任务的有效方法。基于CoOp的代表性的工作将可学习的文本token与类别token相结合&#xff0c;…

项目需求 | MySQL增量备份与恢复的完整操作指南

目录 一、MySql数据库增量备份的工作原理 1、全量备份与增量备份 2、增量备份原理 二、进行增量备份 步骤1&#xff1a;启用二进制日志 使用 SHOW VARIABLES 命令查看二进制日志状态 步骤2&#xff1a;执行增量备份脚本 三、使用增量备份恢复损坏的数据库 步骤1&#…

WSL安装Redis

前言 本来一直是在虚拟机的Ubuntu开发 但是 搞着搞着内存不足 导致我某些数据损坏了 然后目前迁移到Wsl开发 运行WSL的相较于虚拟机你不需要很多的性能开销&#xff01; 我只是代码开发和git交互&#xff0c;如果是搞逆向还是虚拟机。 记录一下redis 安装卸载 免得以后又忘了…

java基于PDF底层内容流的解析对文本内容进行编辑

本文实现了基于坐标位置对PDF内容的底层修改而非覆盖&#xff0c;因此不会出现在某些高级PDF编辑器中可以移除插入内容或者文件随着编辑次数增多而大幅增大&#xff08;原因是原内容还在文件中&#xff09;的问题&#xff0c;而且使用的pdfbox是一个开源的、免费的PDF处理库&am…

SSHamble:一款针对SSH技术安全的研究与分析工具

关于SSHamble SSHamble是一款功能强大的SSH技术安全分析与研究工具&#xff0c;该工具基于Go语言开发&#xff0c;可以帮助广大研究人员更好地分析SSH相关的安全技术与缺陷问题。 功能介绍 SSHamble 是用于 SSH 实现的研究工具&#xff0c;其中包含下列功能&#xff1a; 1、针…

ESP01的AT指令连接到阿里云平台

物联网平台提供安全可靠的设备连接通信能力&#xff0c;支持设备数据采集上云&#xff0c;规则引擎流转数据和云端数据下发设备端。此外&#xff0c;也提供方便快捷的设备管理能力&#xff0c;支持物模型定义&#xff0c;数据结构化存储&#xff0c;和远程调试、监控、运维。总…

移动UI案例:工具类app整套案例

工具类App是指提供各种实用工具和功能的手机应用程序。这些工具可以包括但不限于日历、闹钟、备忘录、翻译、计算器、单位转换、天气预报、地图导航、音乐播放器、相机、视频编辑等。这些工具类App能够帮助用户解决日常生活和工作中的各种问题&#xff0c;提高效率和便利性。 …

Java数据结构(十)——冒泡排序、快速排序

文章目录 冒泡排序算法介绍代码实现优化策略复杂度和稳定性 快速排序算法介绍优化策略非递归实现代码演示复杂度和稳定性 冒泡排序 算法介绍 冒泡排序是一种简单的排序算法。它重复地遍历要排序的数列&#xff0c;一次比较两个元素&#xff0c;如果它们的顺序错误就交换。遍历…

多线程篇(其它容器- CopyOnWriteArrayList)(持续更新迭代)

一、CopyOnWriteArrayList&#xff08;一&#xff09; 1. 简介 并发包中的并发List只有CopyOnWriteArrayList。 CopyOnWriteArrayList是一个线程安全的ArrayList&#xff0c;对其进行的修改操作都是在底层的一个复制的数 组&#xff08;快照&#xff09;上进行的&#xff0…

redis 基本数据类型—string类型

一、介绍 Redis 中的字符串&#xff0c;直接就是按照二进制数据的方式存储的&#xff0c;不会做任何的编码转换。 Redis对于 string 类型&#xff0c;限制了大小最大是512M 二、命令 SET 将 string 类型的 value 设置到 key 中。如果 key 之前存在&#xff0c;则覆盖&#…

Jwt、Filter、Interceptor

目录 JWT(Json Web Token) jwt令牌 组成 应用场景 生成令牌 解析令牌 登录实例 Filter过滤器 Filter Filter登录校验 Interceptor拦截器 Interceptor 拦截路径 执行流程 登录实例 JWT(Json Web Token) jwt令牌 定义了一种简洁的、自包含的格式&#xff0c;…

二、(JS)JS中常见的键盘事件

一、常见的键盘事件 onkeydown 某个键盘按键被按下onkeypress 某个键盘按键被按下onkeyup 某个键盘按键被松开 二、事件的执行顺序 onkeydown、onkeypress、onkeyup down 事件先发生&#xff1b;press 发生在文本被输入&#xff1b;up …