三个小时学完vue3(一)

Vue3

之前就学过一些,不过用的比较少,基本忘完了/(ㄒoㄒ)/~~
跟着B站视频迅速回忆一下

创建一个Vue 3 应用

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

<!-- vue3 学习: 创建一个vue3应用 -->
<body>
    <div id="app">
        <!-- 插值表达式 -->
        <!-- 可以获取到msg的值 -->
        {{ msg }} 


        <h2>{{ web.title }}</h2>
        <h2>{{ web.url }}</h2>
    </div>
    
    <script>
        // 去掉前面的Vue.
        // 使用的一种结构赋值语法,将vue对象中的createApp和reactive的属性赋值给createApp和reactive变量
        // Vue本身就是一个对象,而且createApp和reactive和Vue里面存在的属性一致,所有可以精确的解包
        const {createApp,reactive} = Vue
        createApp({
            // setup选项, 用于设置响应式数据和方法等
            setup(){
                // 定义一个应用网站
                const web = reactive({
                    title: "zzz学习编程",
                    url: "baidu.com"
                })

                return {
                    msg: "success",
                    web
                }
            }
        }).mount("#app") // 挂载

        // Vue.createApp({
        //     // setup选项, 用于设置响应式数据和方法等
        //     setup(){
        //         // 定义一个应用网站
        //         const web = Vue.reactive({
        //             title: "zzz学习编程",
        //             url: "baidu.com"
        //         })

        //         return {
        //             msg: "success",
        //             web
        //         }
        //     }
        // }).mount("#app") // 挂载
    </script>
</body>
</html>

Vue 3 模块化开发

<!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">
        {{msg}}

        <h2>
            {{web.title}}
        </h2>
        <h2>
            {{web.url}}
        </h2>
    </div>

    <!-- 添加属性:type="module" -->
    <script type="module">
        import {createApp, reactive} from './vue.esm-browser.js'
        // 无法显示: 需要安装插件 live server(使用本地服务器进行调试)

        createApp({
            setup() {
                const web = reactive({
                    title: "zz",
                    url: "XXX.com"
                })

                return {
                    msg: 'success',
                    web
                }
            }
        }).mount("#app") // 挂载
    </script>
</body>
</html>

ref和reactive区别

<!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>
    <!-- 
        ref 和 reactive 的区别:
        ref用于存储单个基本类型的数据,如:数字、字符串等使用
        ref创建的响应式对象,需要通过,value属性来访问和修改其值
        
        reactive用于存储复杂数据类型,如:对象或数组等
    -->

    <div id="app">
        {{msg}}

        <h2>{{ web.title }}</h2>
        <h2>{{ web.url }}</h2>
        <h2>{{ number }}</h2>
    </div>

    <script type="module">
        import {createApp, reactive, ref} from './vue.esm-browser.js'

        createApp({
            setup() {
                // ref 和 reactive 的区别
                // const number = ref(10)
                // ref 修改number的值(使用.value)
                // number.value = 20

                // 定义一个数组
                const number = ref([1, 2, 3])

                const web = reactive({
                    title: "zz",
                    url: 'xxx.com'
                })
                // reactive修改值,直接修改
                web.url = 'baidu.com'

                return {
                    msg: 'ref 和 reactive 的区别',
                    web,
                    number
                }
            }
        }).mount("#app")
    </script>
</body>
</html>

绑定事件v-on和按键修饰符

<!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>
    <!-- 
        绑定事件 v-on
        最常用的是click事件
    -->
    <div id="app">
        {{ msg }}

        <h2>{{ web.url }}</h2>
        <h2>{{ web.user }}</h2>


        <!-- 定义按钮 -->
        <button v-on:click="edit">修改</button><br>
        <button @click="edit">修改-简写</button> <hr>

        按回车键: <input type="text" @:keyup.enter="add(40, 60)"><hr>
        空格:<input type="text" @keyup.space="add(20, 30)"><hr>
        <!-- 使用tab 使用:@keydown -->
        Tab: <input type="text" @keydown.tab="add(10, 20)"><hr>
        w: <input type="text" @keyup.w="add(1, 2)"><hr>

        <!-- 组合快捷键 -->
        Ctrl + enter: <input type="text" @keyup.ctrl.enter="add(3, 4)"><hr>
        Ctrl + A: <input type="text" @keyup.ctrl.a="add(4, 5)"><hr>
    </div>


    <script type="module">
        import { createApp, reactive } from './vue.esm-browser.js'

        createApp({
            setup() {
                const web = reactive({
                    url: "baidu.com",
                    user: 0
                })
                // 修改网站网址
                const edit = () => {
                    web.url = "www.zzzz.com"
                }

                const add = (a, b) => {
                    // 假设有两个网站(a和b)
                    // 统计这两个网站用户的新增数量
                    web.user += a + b
                }

                return {
                    msg: 'success',
                    web,
                    edit,
                    add
                }
            }
        }).mount("#app")
    </script>
</body>
</html>

显示和隐藏 v-show

<!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">
        {{ web.show }} <hr>

        <!-- 一段文字的显示和隐藏 -->
        <p v-show="web.show">
            zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
        </p>

        <button @click="toggle">切换显示状态</button>
    </div>

    <script type="module">
        import { createApp, reactive } from './vue.esm-browser.js'

        createApp({
            setup() {
                const web = reactive({
                    show: true
                })

                // 
                const toggle = () => {
                    web.show = !web.show
                }
                
                return {
                    web, 
                    toggle
                }
            }
        }).mount("#app")
    </script>
</body>
</html>

条件渲染 v-if

  • v-show:v-show 指令是通过修改元素的 display CSS 属性来控制元素的显示与隐藏。当 v-show 绑定的值为 true 时,元素的 display 属性会恢复为原本的值(如 block、inline 等),元素会正常显示;当绑定的值为 false 时,元素的 display 属性会被设置为 none,元素在页面上不可见,但仍然会占据页面布局空间。
  • v-if 指令是根据表达式的值来决定是否将元素插入到 DOM 中。当 v-if 绑定的值为 true 时,元素会被渲染到 DOM 中;当绑定的值为 false 时,元素会从 DOM 中移除,不占据页面布局空间。

性能表现:

  • v-show:由于 v-show 只是修改元素的 CSS 属性,不会涉及 DOM 的插入和移除操作,因此在初始渲染时性能开销相对固定。当频繁切换元素的显示状态时,v-show 的性能表现较好,因为它只是简单地修改 CSS 属性,不会触发 DOM 的重新渲染。
  • v-if:在初始渲染时会根据表达式的值来决定是否渲染元素,如果条件为 false,则不会渲染该元素,因此在条件初始值为 false 时可以节省一定的初始渲染开销。但当条件发生变化时,v-if 会涉及 DOM 的插入和移除操作,这会带来较大的性能开销,尤其是在包含大量子元素或复杂组件的情况下。因此,v-if 不适合频繁切换的场景。
    使用场景
  • v-show:适用于需要频繁切换元素显示状态的场景,例如实现一个下拉菜单,当用户点击菜单按钮时显示菜单,再次点击时隐藏菜单。
  • 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">
        {{ web.show }} <hr>

        <!-- 一段文字的显示和隐藏 -->
        <p v-show="web.show">
            这是一段文字
        </p>

        <p v-if="web.show">
            这也是一段文字
        </p>

        <button @click="toggle">切换显示状态</button>

        <p v-if="web.user < 1000">新网站</p>
        <p v-else-if="web.user >= 1000 && web.user <= 10000">优秀网站</p>
        <p v-else>资深网站</p>
    </div>

    <script type="module">
        import { createApp, reactive } from './vue.esm-browser.js'

        createApp({
            setup() {
                const web = reactive({
                    show: true,
                    user: 15000
                })

                // 
                const toggle = () => {
                    web.show = !web.show
                }
                
                return {
                    web, 
                    toggle
                }
            }
        }).mount("#app")
    </script>
</body>
</html>

动态属性绑定 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>
    <style>
        .textColor {
            color: blue;
        }
    </style>
</head>
<body>
    <div id="app">
        <!-- :value -->
        <h3>value="zz.com"</h3>
        <input type="text" value="zz.com">

        <h3>v-bind:value="zz.com"</h3>
        <input type="text" v-bind:value="web.url">
        <!-- 简写 -->
        <h3>:value="zz.com"</h3>
        <input type="text" :value="web.url">

        <!-- :src -->
        <h3>src="pic.jpg"</h3>
        <img src="pic.jpg" style="width: 100px;">

        <h3>src="pic.jpg"</h3>
        <img :src="web.img" style="width: 100px;">

        <!-- :class -->
        <h3>class="textcolor"</h3>
        <p class="textColor">zzz学习</p>
        
        <!-- 动态绑定class属性 -->
        <h3>class="textcolor"</h3>
        <p :class="{textColor: web.fontStatus}">zzz学习</p>
    </div>

    <script type="module">
        import { createApp, reactive } from './vue.esm-browser.js'

        createApp({
            setup() {
                const web = reactive({
                    url: 'zz.com',
                    img: 'pic.jpg',
                    fontStatus: false
                })

                return {
                    web
                }
            }
        }).mount("#app")
    </script>
</body>
</html>

遍历数组或对象 v-for

<!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">
        <ul>
            <li v-for="value in data.number">
                {{ value }}
            </li>
        </ul>

        <!-- 数组遍历索引使用 index -->
        <ul>
            <li v-for="(value, index) in data.number">
                index ==> {{ index }}: value ==> {{ value }}
            </li>
        </ul>


        <!-- 对象遍历索引使用key -->
        <ul>
            <li v-for="(value, key) in data.user">
                key ==> {{ key }}: value ==> {{ value }}
            </li>
        </ul>


        <ul>
            <li v-for="(value, key, index) in data.user">
                index ==> {{ index }}: keye ==> {{ key }}: value ==> {{ value }}
            </li>
        </ul>

        <!-- 关于 template 更完整的说法:Vue会编译<template>里的内容,但是不会将其作为 DOM元素 渲染到页面上 -->
        <ul>
            <template v-for="(value, key, index) in data.user">
                <li v-if="index === 1">
                    index ==> {{ index }}: keye ==> {{ key }}: value ==> {{ value }}
                </li>
            </template>
        </ul>

        <ul>
            <!-- 动态属性value key -->
            <li v-for="(value, index) in data.teacher" :title="value.name" :key="value.id">
                index ==> {{ index }}: value.id ==> {{ value.id }}: value.name ==> {{ value.name }}: value.web ==> {{ value.web }}
            </li>
        </ul>
    </div>

    <script type="module">
        import { createApp, reactive } from './vue.esm-browser.js'

        createApp({
            setup() {
                const data = reactive({
                    number: ['10', '11', '12'], // 数组
                    user: {
                        // 对象
                        name: 'zzz',
                        gender: '女'
                    },
                    teacher: [ // 包含两个对象的数组
                        { id: 100, name: '张三', web: 'zhangsan.com' },
                        { id: 101, name: '李四', web: 'lisi.com' }
                    ]
                })

                return {
                    data
                }
            }
        }).mount("#app")
    </script>
</body>
</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>
<body>
    <!-- 之前学的v-bind(语法糖 :)是单向绑定 -->
    <!-- v-model双向绑定 -->
    <div id="app">
        <h3>文本框:{{ data.text }}</h3>
        <h3>单选框{{ data.radio }}</h3>
        <h3>复选框:{{ data.checkbox }}</h3>
        <h3>记住密码:{{ data.remember }}</h3>
        <h3>下拉框:{{ data.select }}</h3>
        <h3>下拉框:{{ data.select.join(',') }}</h3>

        <!-- 单向数据绑定:当数据发送改变时, 视图会自动更新,但用户手动更改 input 的值,数据不会更新 -->
        单向数据绑定: <input type="text" :value="data.text">

        <hr>
        <!-- 
            双向数据绑定:当数据发生改变时,视图会自动更新,当用户手动更改input 的值,数据也会自动更新
            对于<input type="text"> v-model绑定的是 input 元素的value值
        -->
        双向数据绑定: <input type="text" v-model="data.text">
        <hr>

        <!-- 
            单选框
            对于<input type="radio"> v-model绑定的是 input 元素的选中状态
         -->
        <input type="radio" v-model="data.radio" value="1">写作
        <input type="radio" v-model="data.radio" value="2">画画

        <hr>

        <!-- 
            复选框
            对于 <input type="checkbox"> v-model绑定的是 input 元素的选择状态
        -->
        <input type="checkbox" v-model="data.checkbox" value="a">写作
        <input type="checkbox" v-model="data.checkbox" value="b">画画
        <input type="checkbox" v-model="data.checkbox" value="cc">运动

        <hr>
        <!-- 
            单个复选框(记住密码)
        -->
        <input type="checkbox" v-model="data.remember">记住密码

        <hr>
        <!-- 下拉框 -->
        <select v-model="data.select">
            <option value="">请选择</option>
            <option value="A">写作</option>
            <option value="B">画画</option>
            <option value="C">运动</option>
        </select>
        <hr>
        <select v-model="data.select" multiple>
            <option value="">请选择</option>
            <option value="A">写作</option>
            <option value="B">画画</option>
            <option value="C">运动</option>
        </select>
    </div>

    <script type="module">
        import { createApp, reactive } from './vue.esm-browser.js'

        createApp({
            setup() {
                const data = reactive({
                    text: "zzz.com", // 文本框
                    radio: "", // 单选
                    checkbox: [], // 复选框
                    remember: false, // 单个复选框- 记住密码
                    // select: "" // 下拉框
                    select: [] // 下拉框
                })

                return {
                    data
                }
            }
        }).mount("#app")
    </script>
</body>
</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>
<body>
    <div id="app">
        <!-- v-model修饰符  -->
        <h3>url: {{ data.url }}</h3>
        <h3>user: {{ data.user }}</h3>

        实时渲染:<input type="text" v-model="data.url"><br>
        失去焦点或按下回车之后在进行渲染: <input type="text" v-model.lazy="data.url"><br>
        
        <!-- 输入 100人, web.user 的值仍为 100 -->
         <!-- 不是完全控制 -->
        输入框的值转换为数字类型: <input type="text" v-model.number="data.user"><br>

        <!-- trim:感觉这个在项目中还是比较常用的 -->
        去掉首尾空格:<input type="text" v-model.trim="data.user">
    </div>

    <script type="module">
        import { createApp, reactive } from './vue.esm-browser.js'

        createApp({
            setup() {
                const data = reactive({
                    url: 'zz.com',
                    user: 10
                })

                return {
                    data
                }
            }
        }).mount("#app")
    </script>
</body>
</html>

渲染数据 v-text 和 v-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>
<body>
    <!-- 渲染数据:v-text和v-html -->
    <div id="app">
        <h3>{{ data.title }}</h3>

        <!-- 使用v-text -->
        <h3 v-text="data.title"></h3>

        <!-- 使用v-html -->
         <!-- 解析html标签 -->
        <h3 v-html="data.url"></h3>  <!-- www.baidu.com -->
        <!-- 直接输出内容 -->
        <h3 v-text="data.url"></h3> <!-- <i style='color:blue;'>www.baidu.com</i> -->
    </div>

    <script type="module">
        import { createApp, reactive } from './vue.esm-browser.js'

        createApp({
            setup() {
                const data = reactive({
                    title: 'zzzzz',
                    url: "<i style='color:blue;'>www.baidu.com</i>",
                })

                return {
                    data
                }
            }
        }).mount("#app")
    </script>
</body>
</html>

计算属性 computed

<!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>
    <!-- 渲染数据:v-text和v-html -->
    <div id="app">
        <h3>add: {{ add() }}</h3>
        <h3>add: {{ add() }}</h3>

        <h3>sub: {{ sub }}</h3>
        <h3>sub: {{ sub }}</h3>

        x: <input type="text" v-model.number="data.x">
        y: <input type="text" v-model.number="data.y">
    </div>

    <script type="module">
        import { createApp, reactive, computed } from './vue.esm-browser.js'

        createApp({
            setup() {
                const data = reactive({
                    x: 10,
                    y: 20
                })

                // 方法 - 无缓存
                let add = () => {
                    console.log("add") // 打印两次
                    return data.x + data.y
                }

                // 计算属性: 有缓存
                // 直接返回缓存值
                // 当计算数学以来的响应数据发生变化时才会更新
                const sub = computed(() => {
                    console.log("sub")
                    return data.x - data.y
                })

                return {
                    data,
                    add,
                    sub
                }
            }
        }).mount("#app")
    </script>
</body>
</html>

侦听器 watch

<!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>
    <!-- 渲染数据:v-text和v-html -->
    <div id="app">
        爱好
        <select v-model="hobby">
            <option value="">请选择</option>
            <option value="1">画画</option>
            <option value="2">运动</option>
            <option value="3">玩游戏</option>
        </select>

        <hr><select v-model="data.year">
            <option value="">请选择</option>
            <option value="2022">2022</option>
            <option value="2023">2023</option>
            <option value="2024">2024</option>
            <option value="2025">2025</option>
        </select>

        <hr><select v-model="data.month">
            <option value="">请选择</option>
            <option value="10">10</option>
            <option value="11">11</option>
            <option value="12">12</option>
            <option value="13">13</option>
        </select>
    </div>

    <script type="module">
        import { createApp, ref, reactive, watch } from './vue.esm-browser.js'

        createApp({
            setup() {
                const hobby = ref("") // 爱好
                const data = reactive({
                    year: '2022',
                    month: '10'
                })

                watch(hobby, (newValue, oldValue) => {
                    // console.log('newValue: ', newValue, 'oldValue:', oldValue)
                    if (newValue === '1') {
                        console.log('画画')
                    }
                })

                /*
                    watch 函数用于响应式地监听一个或多个数据源,并在数据源发生变化时执行回调函数
                    接受的第一个参数可以是以下几种类型:
                        响应式引用:例如 ref、computed 创建的引用。
                        getter 函数:一个返回响应式值的函数。
                        数组:包含多个响应式引用或 getter 函数。
                */
                // 监听data
                watch(data, (newValue, oldValue) => {
                    /**
                        JS中对象和数组是通过引用传递的,而不是通过值传递
                        当修改对象或数组的值时,实际上修改的是对象或数组的引用,而不是创建一个新的对象或数组
                        所以,如果修改了对象或数组的值,那么打印出来的结果则是修改后的值
                     */

                    console.log("oldValue", oldValue, "newValue", newValue)

                    if (newValue.year == "2025") {
                        console.log("2025")
                    }

                    if (newValue.month == '11') {
                        console.log("11")
                    }
                })

                // 监听 data 中的某个属性 year
                watch(() => data.year, (newValue, oldValue) => {
                    console.log("oldValue", oldValue, "newValue", newValue)

                    if (data.year == "2024") {
                        console.log("2024")
                    }
                })
               
                return {
                    hobby,
                    data
                }
            }
        }).mount("#app")
    </script>
</body>
</html>

自动侦听器 watchEffect

<!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>
    <!-- 渲染数据:v-text和v-html -->
    <div id="app">
        爱好
        <select v-model="hobby">
            <option value="">请选择</option>
            <option value="1">画画</option>
            <option value="2">运动</option>
            <option value="3">玩游戏</option>
        </select>

        <hr><select v-model="data.year">
            <option value="">请选择</option>
            <option value="2022">2022</option>
            <option value="2023">2023</option>
            <option value="2024">2024</option>
            <option value="2025">2025</option>
        </select>

        <hr><select v-model="data.month">
            <option value="">请选择</option>
            <option value="10">10</option>
            <option value="11">11</option>
            <option value="12">12</option>
        </select>
    </div>

    <script type="module">
        import { createApp, ref, reactive, watchEffect } from './vue.esm-browser.js'

        createApp({
            setup() {
                const hobby = ref("") // 爱好
                const data = reactive({
                    year: '2022',
                    month: '10'
                })

                // 自动监听
                // 建议手动监听
                watchEffect(() => {
                    console.log("----- 监听开始")

                    if (hobby.value == "1") {
                        console.log('画画')
                    }

                    if (data.year == '2025') {
                        console.log("2025")
                    }

                    if (data.month == '12') {
                        console.log("12")
                    }

                    console.log("----- 监听结束")
                })

                return {
                    hobby,
                    data
                }
            }
        }).mount("#app")
    </script>
</body>
</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>
<body>
    <div id="app">
        <h3>{{ number }}</h3>

        <img :src=`./imgs/${number}.jpg` style="width: 300px;"> <hr>
        <button @click="prev">上一张</button>
        <button @click="next">下一张</button>

        <hr>
        <ul>
            <li v-for="value in 3">
                <a href="#" @click="jump(value)">{{ value }}</a>
            </li>
        </ul>
    </div>

    <script type="module">
        import { createApp, reactive, ref } from './vue.esm-browser.js'

        createApp({
            setup() {
                const number = ref(1)

                const prev = () => {
                    number.value--

                    if (number.value == 0) {
                        number.value = 3
                    } 
                }

                const next = () => {
                    number.value++

                    if (number.value == 4) {
                        number.value = 1
                    }
                }

                // 跳转
                const jump = (value) => {
                    number.value = value
                }

                return {
                    number,
                    next,
                    prev,
                    jump
                }
            }
            
        }).mount("#app")
    </script>
</body>
</html>

以上内容基本涉及了vue3的一些基础语法知识。

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

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

相关文章

毕业项目推荐:基于yolov8/yolo11的野生菌菇检测识别系统(python+卷积神经网络)

文章目录 概要一、整体资源介绍技术要点功能展示&#xff1a;功能1 支持单张图片识别功能2 支持遍历文件夹识别功能3 支持识别视频文件功能4 支持摄像头识别功能5 支持结果文件导出&#xff08;xls格式&#xff09;功能6 支持切换检测到的目标查看 二、数据集三、算法介绍1. YO…

Android+SpringBoot的老年人健康饮食小程序平台

感兴趣的可以先收藏起来&#xff0c;还有大家在毕设选题&#xff0c;项目以及论文编写等相关问题都可以给我留言咨询&#xff0c;我会一一回复&#xff0c;希望帮助更多的人。 系统介绍 我将从经济、生活节奏、技术融合等方面入手&#xff0c;详细阐述居家养老管理模式兴起的…

【Redis】Redis 入门

借鉴枫枫知道 一、连接 redis 1.1 命令行连接 // 完整的命令 redis-cli -h 127.0.0.1 -p 6379 -a password// 简写 redis-cli// 认证&#xff0c;进行redis之后 auth password1.2 go 代码连接 package mainimport ("fmt""github.com/go-redis/redis" …

HVAC 设计:使用 Ansys Discovery 探索更好的设计

通过 Ansys Discovery 及其 2025 年新功能利用 CFD&#xff0c;通过 Computational Insights 应对 HVAC 行业的挑战。 挑战 HVAC 行业在设计高效可靠的管道系统方面面临多项挑战&#xff1a; 压力损失&#xff1a;设计不当的管道会增加能耗并降低热性能。复杂的几何形状&…

【Redis】Redis初阶

&#x1f525;个人主页&#xff1a; 中草药 一、认识Redis Redis&#xff08;Remote Dictionary Server&#xff09;是一个开源的、基于内存的键值对存储数据库&#xff0c;支持持久化、网络化访问&#xff0c;并提供多种数据结构操作&#xff0c;用作数据缓存。它由Salvatore …

帧中继+静态路由实验(大规模网络路由器技术)

一、帧中继实验 &#xff08;1&#xff09;实验拓扑图如下图所示: 帧中继交换机1接口两侧的DLCI值&#xff1a; 数据链路连接标识符&#xff08;DLCI&#xff0c;Data Link Connection Identifier&#xff09;&#xff0c;DLCI值用于标识 永久虚电路 &#xff08;PVC&#xf…

Azure Speech

1、文字转语音(Text-To-Speech, TTS) 2、语音转文字(Speech-To-Text): Azure Speech to Text 1- 环境配置&#xff1a;Microsoft Azure 注册使用免费服务&#xff1a; 需要信用卡&#xff0c;本人没有&#xff0c;所以没有完成注册

海洋cmsv9报错注入,order by 和limit注入

海洋cmsv9 1&#xff0c;我们拿到海洋cmsv9源码分析发现注入点&#xff0c;$rlist 2&#xff0c;seacms开源&#xff0c;可以知道seacmsv9系统数据库&#xff08;mysql&#xff09;为seacms&#xff0c;存放管理员账号的表为 sea_admin&#xff0c;表中存放管理员姓名的字段为…

Linux系统下基于mplayer媒体播放器

1、项目背景 随着多媒体技术的发展&#xff0c;各种音视频格式的流行&#xff0c;用户对媒体播放器的功能和性能要求 日益增加。MPlayer是一个强大的开源媒体播放器&#xff0c;支持多种音视频格式。本项目旨在 基于MPlayer构建一个轻量级的Linux媒体播放器&#xff0c;提供简洁…

牛客NC288803 和+和

​import java.util.Comparator;import java.util.PriorityQueue;import java.util.Scanner;​public class Main {public static void main(String[] args) {// 创建Scanner对象用于读取输入Scanner sc new Scanner(System.in);// 读取两个整数n和m&#xff0c;分别表示数组的…

2025 软件供应链安全情报预警平台建设与实践

何为数字安全供应链情报&#xff1f; 所谓的数字供应链开源安全情报主要针对目标是开源数字应用资产。包括开源组件&#xff0c;中间件和操作系统。开源安全情报类型可以分为三大类&#xff1a; 1 第一类是传统的安全漏洞风险情报&#xff0c;开源漏洞情报数据获取主要有2种渠…

红蓝对抗之常见网络安全事件研判、了解网络安全设备、Webshell入侵检测

文章目录 ​​研判&#xff08;入侵检测&#xff09;​​ ​​设备​​ ​​经典网络​​​​云网络​​ ​​异常HTTP请求​​​​Webshell分析​​ ​​Webshell 的分类​​​​Webshell 的检测​​ ​​主机层面​​​​流量层面​​ ​​附录​​ ​​常见端口漏洞…

【Python系列】Python 连接 PostgreSQL 数据库并查询数据

???欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老…

DeepSeek赋能智慧社区:提升社区治理,优化资源配置,带来全新变革

在数字化浪潮的推动下&#xff0c;智慧社区正逐渐成为城市发展的重要方向。作为一款先进的人工智能大模型&#xff0c;DeepSeek凭借其强大的多模态数据分析和智能决策能力&#xff0c;正在为智慧社区的建设注入新的活力。 标准规范及顶层设计指南、供应商整体解决方案合集、供应…

代理服务器与内网穿透/打洞

内网穿透 简单来说内网穿透就是让一个在私人IP的设备&#xff0c;能在公网上被别的主机访问到资源。 中间经过服务器将获取的数据转发给主机。 内网打洞 内网打洞&#xff0c;也叫 P2P 穿透或 NAT 穿越&#xff0c;是一种用于实现位于不同内网中的设备之间直接建立连接的技…

本地大模型编程实战(26)用langgraph实现基于SQL数据构建的问答系统(5)

本文将将扩展上一篇文章完成的 langgraph 链&#xff0c;继续使用基于 langgraph 链 &#xff0c;对结构化数据库 SQlite 进行查询的方法。该系统建立以后&#xff0c;我们不需要掌握专业的 SQL 技能&#xff0c;可以用自然语言询问有关数据库中数据的问题并返回答案。主要完善…

Geek卸载软件安装使用教程

文章目录 一、Geek下载二、使用步骤 一、Geek下载 Geek Uninstallers最新版是一款高效、快速、小巧、免费的软件卸载与清理工具&#xff0c;旨在帮助用户删除系统上安装的程序。不同于其他的卸载程序&#xff0c;Geek Uninstaller执行深入扫描进程&#xff0c;并清除软件卸载后…

BIO、NIO、AIO解析

一、基础概念 1、IO的含义 IO&#xff0c;Input/Output&#xff0c;即输入/输出。从计算机结构来看&#xff0c;IO描述了计算机系统和外部设备之间通讯的过程。从应用程序角度来看&#xff0c;一个进程的地址空间划分为 用户空间&#xff08;User space&#xff09; 和 内核空…

抖音生活服务加强探店内容治理,2024年达人违规率下降30%

发布 | 大力财经 2月27日&#xff0c;抖音生活服务发布《2024抖音生活服务消费者权益保护年度报告》&#xff08;以下简称“报告”&#xff09;。报告显示&#xff0c;过去一年&#xff0c;抖音生活服务针对消费者反感的虚假、夸张探店内容&#xff0c;开展了专项治理。通过一…

Apollo Cyber 学习笔记

目录 0 Introduction What Why Advantage 1 Example 2 Concept 3 Flow Chart 4 Module 4.1 Transport 4.1.1 Share Memory 4.1.1.1 Segment 4.1.1.1.1 State 4.1.1.1.2 Block 4.1.1.1.3 Common 4.1.1.2 Notifier 4.1.1.2.1 ConditionNotifier 4.1.1.2.2 Multi…