Vue [Day1]

news2025/1/16 18:05:04

学习视频:
【2023新版Vue2+Vue3基础入门到实战项目全套教程,自学前端vue就选黑马程序员,一套全通关!】

初识VUE

在这里插入图片描述
在这里插入图片描述
Vue2官网 https://v2.cn.vuejs.org
Vue3官网 https://cn.vuejs.org

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <!-- 创建Vue实例,初始化渲染
        1.容器
        2.引包   官网   (开发/生产版本)
        3.创建实例
        4.添加配置项=> 完成渲染
    -->

    <div id="app">
        <h1>{{msg}}</h1>
        <a href="">{{count}}</a>
    </div>
</body>


<script src="https://cdn.jsdelivr.net/npm/vue@2.7.14"></script>

<script>
    // 一旦引入VueJS核心包,在全局环境,就有了Vue构造函数
    const app = new Vue({
        el: '#app',//  通过el配置选择器,指定盒子
        data: {   // 通过data提供数据
            msg: 'hello',
            count: 999
        }
    })
</script>

</html> 

插值表达式

注意点

在这里插入图片描述


响应式特性

响应式数据:数据变化,视图自动变化

data中的数据,会被添加到实例上

  1. 访问数据: 实例.属性名 app.count
  2. 修改数据: 实例.属性名=xxx app.count=9
  // 一旦引入VueJS核心包,在全局环境,就有了Vue构造函数
    const app = new Vue({
        el: '#app',//  通过el配置选择器,指定盒子
        data: {   // 通过data提供数据
            msg: 'hello',
            count: 999
        }
    })
    console.log(app.count);

在这里插入图片描述


Vue指令

带有v-前缀的特殊属性

v-html

动态设置元素的innerHTML,会覆盖之前的内容

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <div id="app">
        <div v-html="msg"></div>
    </div>
</body>

<script src="../vue.js"></script>
<script>
    const app = new Vue({
        el: '#app',
        data: {  
            msg: '<p style="color: aqua;">slxslxslx</p>'
        }
    })
    console.log(app.count);
</script>

</html>

v-show

底层原理:切换css的display:none 来控制显示隐藏

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

    <div v-show="flag" id="app">我是v-show</div>
    <div v-if="flag" id="app">我是v-if</div>


</body>

<script src="../vue.js"></script>
<script>
    const app = new Vue({
        el: '#app',
        data: {
            flag: false
        }
    })
    console.log(app.count);
</script>

</html>

v-if

底层原理:根据判断条件控制元素的创建移除

在这里插入图片描述

v-else 和v-else-if

v-else 后面不加表达式,就光杆就行,并且要紧挨着v-if

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <div id="app">
        <p v-if="gender==1">性别:女</p>
        <p v-else>性别:男</p>

        <hr>

        <p v-if="score>=90">成绩等级:A</p>
        <p v-else-if="score>=80">成绩等级:B</p>
        <p v-else-if="score>=70">成绩等级:C</p>
        <p v-else="60">成绩等级:D</p>
    </div>

</body>

<script src="../vue.js"></script>
<script>
    const app = new Vue({
        el: '#app',
        data: {
            gender: 1,
            score: 88

        }
    })
    console.log(app.count);
</script>

</html>

v-on

作用:注册事件=添加监听 + 提供处理逻辑

[语法1] v-on:事件名=“内联语句”

<button @click="count--">-</button>

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <div id="app">
        <!-- <button v-on:click="count--">-</button>
        <span>{{count}}</span>
        <button v-on:click="count++">+</button>
        <button v-on:click="count+=2">+2</button> -->

        <button @click="count--">-</button>
        <span>{{count}}</span>
        <button @click="count++">+</button>
        <button @mouseover="count+=2">+2</button>


    </div>
</body>

<script src="../vue.js"></script>
<script>
    const app = new Vue({
        el: '#app',
        data: {
            count: 100
        }
    })
    console.log(app.count);
</script>

</html>

[语法2] v-on:时间名=“methods中的函数名”

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <div id="app">
        <!-- 函数名后面不加() -->
        <button @click="fn">点击切换隐藏</button>
        <h1 v-show="flag">hello</h1>

    </div>
</body>

<script src="../vue.js"></script>
<script>
    const app = new Vue({
        el: '#app',
        data: {
            flag: true
        },

        //在这里
        methods: {
            fn() {
                // 提供的所有methods中的函数,this都指向当前实例
                this.flag = !this.flag
            }
        }
    })

</script>

</html>

带参数的

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<style>
    .box {
        width: 300px;
        height: 180px;
        border: 3px solid black;
        border-radius: 13px;
    }

    .btn {
        display: flex;
        margin-top: 50px;
        /* background-color: #673e3e; */
        justify-content: space-around;
    }
</style>

<body>
    <div id="app">
        <div class="box">
            <h1 style="text-align: center;">小茶狐售货机</h1>
            <div class="btn">
                <button @click="buy(10)">酸奶10元</button>
                <button @click="buy(5)">草莓5元</button>
                <button @click="buy(3)">牛奶3元</button>
            </div>
        </div>
        <p>银行卡余额:{{money}}</p>
    </div>
</body>

<script src="../vue.js"></script>
<script>
    const app = new Vue({
        el: '#app',
        data: {
            money: 100
        },

        //在这里
        methods: {
            buy(price) {//函数名和@click="buy(3)" 里的必须相同
                this.money -= price
            }
        }
    })

</script>

</html>

v-bind

v-bind 基础

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<style>
    .box {
        width: 300px;
        height: 180px;
        border: 3px solid black;
        border-radius: 13px;
    }

    .btn {
        display: flex;
        margin-top: 50px;
        /* background-color: #673e3e; */
        justify-content: space-around;
    }
</style>

<body>
    <div id="app">
        <img v-bind:src="url" style="width:200px;height: 400px;">
        <a v-bind:href="url">跳转</a>

        <!-- 简写 -->
        <img :src="url"  style="width:200px;height: 400px;">
        <a :href="url">跳转</a>
    </div>
</body>

<script src="../vue.js"></script>
<script>
    const app = new Vue({
        el: '#app',
        data: {
            url: 'https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fci.xiaohongshu.com%2F03029p01ksdcyt21157010qpwdk06ilmvr%3FimageView2%2F2%2Fw%2F1080%2Fformat%2Fjpg&refer=http%3A%2F%2Fci.xiaohongshu.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1693465713&t=8fd5a1a2c32f8d7fb5a819493f6e9e76'
        },

    })

</script>

</html>

【案例】——点击上一页、下一页

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<style>
    img {
        width: 200px;
        height: 300px;

    }
</style>

<body>
    <div id="app">
        <button @click="fn(-1)">up</button>
        <img :src="list[index]">
        <button @click="fn(1)">down</button>
    </div>
</body>

<script src="../vue.js"></script>
<script>
    const app = new Vue({
        el: '#app',
        data: {
            index: 0,
            list: [
                './img/01.jpg',
                './img/02.jpg',
                './img/03.jpg',
                './img/04.jpg'
            ]
        },
        methods: {
            fn(page) {
                this.index += page
                if (this.index == this.list.length) this.index = 0
                else if (this.index < 0) this.index = this.list.length - 1
            }
        }

    })

</script>

</html>

优化后,第一页up按钮消失,最后一页down按钮消失

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<style>
    img {
        width: 200px;
        height: 300px;

    }
</style>

<body>
    <div id="app">

        <!-- 在这里不用this.index -->
        <button v-show="index > 0" @click="index--">up</button>
        <img :src="list[index]">
        <button v-show="index < list.length-1" @click="index++">down</button>
    </div>
</body>

<script src="../vue.js"></script>
<script>
    const app = new Vue({
        el: '#app',
        data: {
            index: 0,
            list: [
                './img/01.jpg',
                './img/02.jpg',
                './img/03.jpg',
                './img/04.jpg'
            ]
        },


    })

</script>

</html>

v-bind进阶

v-bind对于样式控制的增强 —— 操作class

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<script src="../vue.js"></script>
<style>
    .box {
        width: 100px;
        height: 100px;
        border: 2px solid black;
    }

    .pink {
        background-color: pink;
    }

    .big {
        width: 300px;
        height: 300px;
    }
</style>

<body>
    <div id="app">
        <div class="box" :class="{pink:true,big:true}">Hello</div>
        <div class="box" :class="['pink','big']">Hello</div>

    </div>
</body>
<script>
    const app = new Vue({
        el: '#app',
        data: {

        },
        method: {

        }
    })
</script>

</html>

[案例]——京东秒杀

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<script src="../vue.js"></script>
<link rel="stylesheet" href="../base.css">
<style>
    ul {
        display: flex;
        border-bottom: rgb(245, 12, 12) 2px solid;
    }

    li a {
        display: block;
        width: 70px;
        height: 30px;
        line-height: 30px;
        text-align: center;
    }

    .mouseover_active {
        background-color: rgba(247, 101, 101, 0.874);
    }

    .active {
        background-color: red;
    }
</style>

<body>
    <div id="app">
        <ul>
            <!--                                              @mouseover -->
            <li v-for="(item , index) in list" :key="item.id" @mouseover="activeIndex2=index"
                @click="activeIndex1=index">
                <a :class="{mouseover_active:index==activeIndex2,active:index==activeIndex1 }"
                    href="#">{{item.name}}</a>

            </li>
        </ul>
    </div>
</body>
<script>
    const app = new Vue({
        el: '#app',
        data: {
            activeIndex2: 0,
            activeIndex1: 0,

            list: [
                { id: 1, name: '京东秒杀' },
                { id: 2, name: '每日特价' },
                { id: 3, name: '品类秒杀' },
            ]
        },
        method: {

        }
    })
</script>

</html>

v-bind 对于样式控制的增强——style操作

在这里插入图片描述

[案例]—— 进度条
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<script src="../vue.js"></script>
<link rel="stylesheet" href="../base.css">
<style>
    #app {
        margin: 10px;
    }

    .progress {
        width: 300px;
        height: 40px;
        margin-bottom: 40px;
        background-color: #cdf92c;
        border-radius: 25px;
        padding: 5px;
    }

    .inner {
        background-color: #0df6c7;
        border-radius: 25px;
        height: 30px;
        /* width: 20%; */
    }

    .low {
        background-color: #92ee61;

    }

    .high {
        background-color: rgb(141, 179, 216);
    }

    .over {
        background-color: rgb(0, 128, 255);
    }

    .inner span {
        width: 100%;
        text-align: right;
        display: block;
        line-height: 90px;
    }
</style>

<body>
    <div id="app">
        <div class="progress">
            <!-- 在这里面num  不用加{{}}    并且{}里面 是js对象  ,所以要遵守驼峰命名法 也就是 background-color 要变成 backgroundColor-->
            <div class="inner" :class="{low:num<50,high:num>70,over:num==100}" :style="{width:num+'%'}">

                <span>{{num}}%</span>
            </div>

        </div>
        <button @click="num=25">设置25%</button>
        <button @click="num=50">设置50%</button>
        <button @click="num=75">设置75%</button>
        <button @click="num=100">设置100%</button>
    </div>
</body>
<script>
    const app = new Vue({
        el: '#app',
        data: {
            num: 10
        },
        method: {

        }
    })
</script>

</html>

v-for

在这里插入图片描述index可省,()也可以不要了

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<script src="../vue.js"></script>


<body>
    <div id="app">
        <li v-for="(item,index) in fruit">{{item}}</li>
        <li v-for="(item) in fruit">{{item}}</li>
        <li v-for="item in fruit">{{item}}</li>
    </div>
</body>
<script>
    const app = new Vue({
        el: '#app',
        data: {
            fruit: ['榴莲', '草莓', '蓝莓', '奇异果']
        }
    })
</script>

</html>

在这里插入图片描述

【案例】——小黑的书架

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<script src="../vue.js"></script>


<body>
    <div id="app">
        <ul>
            <!-- v-for的默认行为会尝试原地修改元素(就地复用) -->
            <!-- :key="item.id"  给元素添加唯一表示,便于Vue进行列表项的正确排序复用        -->
            <li v-for="(item,index) in bookList" :key="item.id">
                <span>{{item.name}}</span>
                <span>{{item.author}}</span>
                <button @click="del(item.id)">delete</button>
                <!-- 删除操作,有id优先用,index没有他稳定 -->
            </li>
        </ul>
    </div>
</body>
<script>
    const app = new Vue({
        el: '#app',
        data: {
            bookList: [
                { id: 1, name: '红楼梦', author: 'zzz' },
                { id: 2, name: '但如果真是个', author: '娃儿' },
                { id: 3, name: '高帮鞋复', author: '自动更新' },
                { id: 4, name: '二个人头梦', author: '发个' },

            ],

        },
        methods: {
            del(aa) {
                // 数据驱动的特性,所以想删除书籍,就删除数组中的元素就行
                // 通过id删除数组中的对应项  -> filter
                // filter根据条件,保留满足条件的对应项,得到一个新数组,原来的数组不变
                this.bookList = this.bookList.filter(item => item.id != aa)
            }
        }
    })
</script>

</html>

v-model

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<script src="../vue.js"></script>


<body>
    <div id="app">
        账户:<input type="text" v-model="username"><br><br>
        密码:<input type="text" v-model="psd">

        <!-- 所以,有啥优点吗 -->
        <button @click="login">登录</button>
        <button @click="reset">重置</button>
        <!-- 可以快速 获取 和重置 表单元素内容 -->
    </div>
</body>
<script>
    const app = new Vue({
        el: '#app',
        data: {
            username: '',
            psd: ''
        },
        methods: {
            login() {
                console.log(this.username, this.psd);

            },
            reset() {
                this.username = '',
                    this.psd = ''
            }
        }
    })
</script>

</html>

【案例】——小黑记事本

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<script src="../vue.js"></script>

<style>
    #app {
        margin: 50px 50px;
    }


    * {
        box-sizing: border-box;
        margin: 0;
        padding: 0;
        list-style: none;
    }

    .head {
        width: 243px;
        /* background-color: #584949; */
    }

    input {
        height: 30px;
        vertical-align: middle;
    }

    .head button {
        height: 30px;
    }

    .body li {
        width: 234px;
        height: 50px;
        display: flex;
        line-height: 50px;
        /* justify-content: space-between; */
        background-color: #de8282;
        border-bottom: black solid 2px;
    }

    .body li .content {
        flex: 1;

    }

    .body li button {
        height: 50%;
        align-self: center;
        display: none;
    }

    .body li:hover button {
        display: block;
        width: 20px;

    }

    .footer {
        width: 234px;
        display: flex;
        justify-content: space-between;
    }
</style>

<body>
    <!-- 需求:
    1.删除单个
    2.添加事项           ->unshift
    3.底部合计
       和   清空全部     ->删除todolist
    4.序号自动增加        ->unshift
    5.优化:合计为0时,footer隐藏
    -->


    <!-- 添加事项 
    1.通过v-model绑定 输入框 ->  实时获取表单元素内容
    2.点击按钮,进行新增,向数组最前面加 ->  unshift
    -->
    <div id="app">
        <h1>小黑记事本</h1>
        <div class="head">
            <input v-model="todoName" type="text" placeholder="请输入待办事项">
            <button @click="add">添加任务</button>
        </div>
        <section class="body">
            <ul>
                <li v-for="(item,index) in todoList" :key="item.id">
                    <!-- 为了删除后序号连续 用index+1 从0起 -->
                    <span>{{index+1}}</span>
                    <span class="content">{{item.name}}</span>
                    <button @click="del(item.id)">×</button>
                </li>


            </ul>
        </section>

        <div v-show="todoList.length>0" class="footer">
            <span>合计:<strong>{{todoList.length}}</strong></span>
            <button @click="clear()">清空任务</button>

        </div>
    </div>
</body>
<script>
    const app = new Vue({
        el: '#app',
        data: {
            todoName: '',  //v-model绑定的表单元素内容
            todoList: [
                { id: 1, name: '吃水果' },
                { id: 2, name: '喝酸奶' }
            ]
        },
        methods: {
            del(tt) {
                this.todoList = this.todoList.filter(item => item.id != tt)
            },
            add() {
                if (this.todoName.trim() == '') {
                    // 输入许多的空格,无效输入,不让添加
                    alert('请输入内容')
                    return
                }

                this.todoList.unshift({
                    id: +new Date(),//正常id是后台传过来的
                    name: this.todoName
                })
                // 点击添加之后,输入框清空
                this.todoName = ''
            },

            clear() {
                this.todoList = []
            }
        }

    })
</script>

</html>

v-model应用于其他表单元素

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<script src="../vue.js"></script>
<link rel="stylesheet" href="../base.css">
<style>


</style>

<body>
    <div id="app">
        姓名:<input type="text" v-model="username"><br><br>

        是否单身:
        <input type="checkbox" v-model="isSingle"><br><br>

        性别:
        <!-- name="gender"加一样的名字 就是单选框 -->
        <!-- value用于提交给后台数据 -->
        <input type="radio" v-model="gender" name="gender" value="0"><input type="radio" v-model="gender" name="gender" value="1"><br><br>

        <!-- 
            1.option要设置value值,提交给后台
            2.select的value值,关联了选中的option 的value值
            3.结合Vue使用->  v-model
        -->
        所在城市:
        <select v-model="cityId">
            <option value="101">北京</option>
            <option value="102">上海</option>
            <option value="103">辽宁</option>
            <option value="104">蒙古</option>
        </select><br><br>


        自我描述:
        <textarea v-model="desc"></textarea>
        <br><br>
        <button @click="fn">立即注册</button>
    </div>
</body>
<script>
    const app = new Vue({
        el: '#app',
        data: {
            username: '',
            isSingle: false,
            gender: '0',  //是字符,不是数字
            cityId: '101',
            desc: ""
        },
        methods: {
            fn() {
                console.log(this.username, this.isSingle, this.gender, this.cityId, this.desc);

            }
        }
    })
</script>

</html>

指令修饰符

在这里插入图片描述

v-model.trim

v-model.number

分数:<input type="text" v-model.number="score">

@事件名.stop @click.stop

@事件名.prevent

   <button @click="add" type="submit" @click.prevent style="margin: 10px 100px;">添加</button>

@keyup.enter

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<script src="../vue.js"></script>

<style>
    #app {
        margin: 50px 50px;
    }


    * {
        box-sizing: border-box;
        margin: 0;
        padding: 0;
        list-style: none;
    }

    .head {
        width: 243px;
        /* background-color: #584949; */
    }

    input {
        height: 30px;
        vertical-align: middle;
    }

    .head button {
        height: 30px;
    }

    .body li {
        width: 234px;
        height: 50px;
        display: flex;
        line-height: 50px;
        /* justify-content: space-between; */
        background-color: #de8282;
        border-bottom: black solid 2px;
    }

    .body li .content {
        flex: 1;

    }

    .body li button {
        height: 50%;
        align-self: center;
        display: none;
    }

    .body li:hover button {
        display: block;
        width: 20px;

    }

    .footer {
        width: 234px;
        display: flex;
        justify-content: space-between;
    }
</style>

<body>
    <!-- 需求:
   
    6.优化:除了点击按钮添加事项,在输入框回车,也可以完成添加
    -->


    <div id="app">
        <h1>小黑记事本</h1>
        <div class="head">


            <!-- 按键(回车)按下,出发add事件,和button的事件一样 -->
            <input @keyup.enter="add" v-model="todoName" type="text" placeholder="请输入待办事项">
            <button @click="add">添加任务</button>
        </div>
        <section class="body">
            <ul>
                <li v-for="(item,index) in todoList" :key="item.id">
                    <span>{{index+1}}</span>
                    <span class="content">{{item.name}}</span>
                    <button @click="del(item.id)">×</button>
                </li>


            </ul>
        </section>

        <div v-show="todoList.length>0" class="footer">
            <span>合计:<strong>{{todoList.length}}</strong></span>
            <button @click="clear()">清空任务</button>

        </div>
    </div>
</body>
<script>
    const app = new Vue({
        el: '#app',
        data: {
            todoName: '',
            todoList: [
                { id: 1, name: '吃水果' },
                { id: 2, name: '喝酸奶' }
            ]
        },
        methods: {
            del(tt) {
                this.todoList = this.todoList.filter(item => item.id != tt)
            },
            add() {
                if (this.todoName.trim() == '') {
                    alert('请输入内容')
                    return
                }

                this.todoList.unshift({
                    id: +new Date(),
                    name: this.todoName
                })
                this.todoName = ''
            },

            clear() {
                this.todoList = []
            }
        }

    })
</script>

</html>

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

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

相关文章

遥感、GIS、GPS在土壤空间数据分析、适应性评价、制图、土壤普查中怎样应用?

摸清我国当前土壤质量与完善土壤类型&#xff0c;可以为守住耕地红线、保护生态环境、优化农业生产布局、推进农业高质量发展奠定坚实基础&#xff0c;为此&#xff0c;2022年初国务院印发了《关于开展第三次全国土壤普查的通知》&#xff0c;决定自2022年起开展第三次全国土壤…

无涯教程-Lua - Modules(模块)

模块就像可以使用 require 加载的库&#xff0c;并且具有包含Table的单个全局名称&#xff0c;该模块可以包含许多函数和变量。 Lua 模块 其中一些模块示例如下。 -- Assuming we have a module printFormatter -- Also printFormatter has a funtion simpleFormat(arg) -- …

js 获取指定时间+时间戳展示时分秒

开发中遇见了一个客户比较扯淡的需求 明明有可以选择时分秒的操作非不要就要懒省事&#xff0c;必须是一个时间显示成选中的年月日&#xff0c;但是时间格式要给后端传待时分秒的格式&#xff0c;列表展示也要带时分秒。 所以就处理了 let DATE: any new Date(); // 当前日期l…

ctfshow----php特性(89-104)

目录 web89 preg_match函数 、数组 web90 intval()函数、强比较 web91 正则修饰符 web92 intval()函数、弱比较 web93 八进制、小数点 web94 strpos() 函数、小数点 web95 小数点 web96 highlight_file() 下的目录路径 web97 数组 web98 三目运算符 web9…

SFP和1×9光模块的区别对比

随着网络技术的不断发展&#xff0c;光纤通信作为一种高速、高带宽的传输方式&#xff0c;得到了广泛应用。SFP和19光模块是两种常见的低速光模块&#xff0c;它们在性能和应用方面也存在着一些区别。本文易天光通信将对SFP和19光模块进行对比&#xff0c;探讨它们的特点、优势…

共建数据未来,解密CIO的所思、所惑、所愿

‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 在当前快速变化的商业环境中&#xff0c;企业首席信息官&#xff08;CIO&#xff09;的角色已经从以往的技术专家转变为战略决策者和创新推动者。随着全球数字化转型步伐的加速&#xff0c;CIO们扮演着至关重要的角色&#…

无人机电力巡检方案在电网安全与维护中的应用

目前&#xff0c;无人机技术已经在各行各业都有广泛的应用&#xff0c;其中之一就是在电力巡检中的应用。无人机电力巡检方案以其高效、安全、精准的特点&#xff0c;为电网安全与维护带来了重大突破和进步。 一、无人机电力巡检方案是高效巡检的利器 传统的电力巡检方式需要人…

ClickHouse使用阿里云服务相关

目录 概念相关问题查看阿里云文档ClickHouse相关Clickhouse分布式表应用修改点 概念 1.阿里云架构 2.节点 节点是逻辑概念&#xff0c;其架构也说明了集群默认包含1个或多个节点&#xff0c;或者说是分片(shard) 节点下包含一个或者多个服务器&#xff0c;具体包含几个&#…

Java限流算法实现与应用(计数器、漏桶、令牌桶、滑动窗口)

文章目录 一、什么是限流算法二、计数器算法1、概述2、Java实现计数器算法3、优缺点4、应用 三、漏桶算法1、概述2、Java实现漏桶算法3、优缺点4、应用 四、令牌桶算法1、概述2、Java实现令牌桶算法3、应用 五、滑动窗口算法1、概述2、Java实现滑动窗口算法3、应用 参考资料 一…

MySQL 重置root 密码

5.7 版本 首先要把服务mysql57 关闭 net stop MySQL57 在安装的mysql57的程序的bin中 运行cmd&#xff08;管理员运行&#xff09; mysqld --defaults-file‘mysql存放数据的位置\my.ini’ --skip-grant-tables 上图 错误 注意&#xff1a;如果遇到mysqld: Can’t change dir…

【FAQ】视频监控EasyCVR修改参数报错“database or disk is full”排查

EasyDarwin开源流媒体视频EasyCVR安防监控平台可提供视频监控直播、云端录像、云存储、录像检索与回看、智能告警、平台级联、云台控制、语音对讲、智能分析等能力。视频监控综合管理平台EasyCVR具备视频汇聚融合能力&#xff0c;平台基于云边端一体化架构&#xff0c;具有强大…

伯俊ERP和金蝶云星空单据接口对接

伯俊ERP和金蝶云星空单据接口对接 对接源平台:金蝶云星空 金蝶K/3Cloud在总结百万家客户管理最佳实践的基础上&#xff0c;提供了标准的管理模式&#xff1b;通过标准的业务架构&#xff1a;多会计准则、多币别、多地点、多组织、多税制应用框架等&#xff0c;有效支持企业的运…

太魔幻了!计算机就业哀鸿遍野,而高考生疯狂涌向计算机专业

在张雪峰推荐的几大专业里&#xff0c;计算机专业是其中之一。近几年&#xff0c;计算机专业报考热度不减&#xff0c;但就业前景却令人堪忧&#xff0c;互联网裁员接二连三&#xff0c;许多码农找不到工作。 一位网友感叹&#xff1a;一边是计算机就业哀鸿遍野&#xff0c;一…

网络安全进阶学习第十一课——MySQL手工注入(2)

文章目录 一、UA注入1、原理2、靶场演示&#xff1a;1&#xff09;一旦页面出现如下现状&#xff0c;就可以使用UA注入2&#xff09;BP抓包3&#xff09;修改User-Agent 二、referer注入1、原理2、靶场演示&#xff1a;1&#xff09;使用BP抓包2&#xff09;修改Referer 三、DN…

双比例阀控制器PVC-D2-25A-1X

两路独立工作、PQ独立控制、4/3比例方向阀控制、并联控制、输入指令0到10V输入接口&#xff0c;可切换为0(4)到20mA输入、工作电压DC24V、、、在放大器试运行前&#xff0c;应确保印刷电路板上SW 开关的功能设置符合相应的使用情况。放大器只有在断电后才可接线和改变SW 开关的…

QT - 建立页面

一、生成页面 二、实现 1.LineEdit 是一个单行输入文本框&#xff0c;为用户提供了比较多的编辑功能&#xff0c;例如选择复制、粘贴。 修改echomode属性为password Push Button(常规按钮) 三、程序 声明全局变量&#xff0c;属于MainWindow private: // 定义了一个指向Ma…

【ASP.NET MVC】MYSQL安装配置(4)

一、安装配置 1、下载MYSQL绿色版压缩包&#xff08;略&#xff09; 2、解压到目录&#xff0c;比如E:\mysql目录 3、设置环境变量 添加bin目录到path&#xff0c;方便运行Mysql的命令 先打开系统的《环境变量》配置 双击系统变量中的Path 添加Mysql的BIN目录到path: 4、在…

两个镜头、视野、分辨率不同的相机(rgb、红外)的视野校正

文章目录 背景实际效果查找资料资料1资料2 解决方案最终结果 背景 目前在做的项目用到两个摄像头&#xff0c;一个是热成像摄像头、另一个是普通的rgb摄像头。 一开始的目标是让他们像素级重合&#xff0c;使得点击rgb图像时&#xff0c;即可知道其像素对应的温度。但是在尝试…

GPU 容器虚拟化新能力发布和全场景实践

今天给大家分享的主题是百度智能云在「GPU 容器虚拟化」方面的最新进展和全场景实践&#xff0c;希望通过这次分享和大家一起探讨如何在实际业务场景更好的应用 GPU 容器虚拟化技术。 本次分享将首先介绍百度智能云 GPU 容器虚拟化 2.0 的升级变化&#xff0c;然后介绍新版本中…

pycharm——漏斗图

import pyecharts.options as opts from pyecharts.charts import Funnel""" Gallery 使用 pyecharts 1.1.0 参考地址: https://echarts.apache.org/examples/editor.html?cfunnel目前无法实现的功能:1、暂时无法对漏斗图的长宽等范围操作进行修改 ""…