Vue 快速入门:Vue初级

news2024/9/24 11:24:35

image.png
image.png
image.png

image.png

语法规则

前端渲染

image.png
渲染有几种方式:原生js、js模板、Vue模板语法

原生js

使用字符串拼接

js模板语法

Vue.js 模板语法概述

Vue.js 是一个用于构建用户界面的渐进式框架,其模板语法非常灵活和直观。Vue 的模板语法基于 HTML,可以通过指令、插值和特殊属性来实现数据绑定和事件处理。以下是 Vue.js 2 的模板语法的主要概念和示例。

1. 插值(Interpolation)

插值用于在模板中显示数据,可以使用双大括号 {{ }} 进行文本插值,或者使用 v-bind 进行属性插值。

<div id="app">
  <p>{{ message }}</p>
  <p v-bind:title="title">Hover to see the title</p>
</div>

<script>
new Vue({
  el: '#app',
  data: {
    message: 'Hello, Vue!',
    title: 'This is a title'
  }
})
</script>
2. 指令(Directives)

指令是带有 v- 前缀的特殊特性,用来在模板中做响应式数据绑定。常用指令包括 v-if, v-for, v-show, v-model, v-bind, v-on 等。

  • 条件渲染v-if, v-else-if, v-else
<div id="app">
  <p v-if="seen">Now you see me</p>
  <p v-else>Now you don't</p>
</div>

<script>
new Vue({
  el: '#app',
  data: {
    seen: true
  }
})
</script>
  • 列表渲染v-for
<div id="app">
  <ul>
    <li v-for="item in items" :key="item.id">{{ item.text }}</li>
  </ul>
</div>

<script>
new Vue({
  el: '#app',
  data: {
    items: [
      { id: 1, text: 'Item 1' },
      { id: 2, text: 'Item 2' },
      { id: 3, text: 'Item 3' }
    ]
  }
})
</script>
  • 事件处理v-on
<div id="app">
  <button v-on:click="sayHello">Click me</button>
</div>

<script>
new Vue({
  el: '#app',
  methods: {
    sayHello: function() {
      alert('Hello, Vue!');
    }
  }
})
</script>
  • 双向绑定v-model
<div id="app">
  <input v-model="message" placeholder="Edit me">
  <p>Message is: {{ message }}</p>
</div>

<script>
new Vue({
  el: '#app',
  data: {
    message: 'Hello, Vue!'
  }
})
</script>
3. 修饰符(Modifiers)

修饰符是以半角句号 . 指明的特殊后缀,用于指出一个指令应该以特殊方式绑定。例如,.prevent, .stop, .capture, .self, .once, .native, .number, .trim

<div id="app">
  <form v-on:submit.prevent="onSubmit">
    <button type="submit">Submit</button>
  </form>
</div>

<script>
new Vue({
  el: '#app',
  methods: {
    onSubmit: function() {
      alert('Form submitted!');
    }
  }
})
</script>
4. 计算属性和侦听器
  • 计算属性:用来对模板中复杂逻辑进行计算并返回结果,类似于 data 属性,但会基于其依赖项缓存结果。
<div id="app">
  <p>Reversed message: {{ reversedMessage }}</p>
</div>

<script>
new Vue({
  el: '#app',
  data: {
    message: 'Hello, Vue!'
  },
  computed: {
    reversedMessage: function() {
      return this.message.split('').reverse().join('');
    }
  }
})
</script>
  • 侦听器:用于监听数据属性的变化并执行相应的操作。
<div id="app">
  <p>{{ message }}</p>
</div>

<script>
new Vue({
  el: '#app',
  data: {
    message: 'Hello, Vue!'
  },
  watch: {
    message: function(newVal, oldVal) {
      console.log('Message changed from', oldVal, 'to', newVal);
    }
  }
})
</script>

以上是 Vue.js 2 模板语法的基本介绍和一些示例代码。这些概念和指令使得 Vue.js 非常灵活和易于使用,适用于各种规模的应用开发。

  • 插值表达式
  • 指令
  • 事件绑定
  • 属性绑定
  • 样式绑定
  • 分支循环结构
指令

什么是指令:

  • 什么是自定义属性
  • 指令的本质就是自定义属性
  • 指令的格式:以v-开始(比如V-cloak)

v-clock指令用法

在频繁刷新的时候可能会出现插值表达式,造成用户体验不好

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Vue</title>
    <style type="text/css">
        [v-clock]{
             display:none;
         }
    </style>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<div id="app">
    <div v-clock>{{msg}}</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
    // v-clock指令用法
    // 1.提供样式
    // [v-clock]{
    //     display:none;
    // }
    // 2.在插值表达式所在的标签添加v-cloak指令
    var vm =new Vue({
        el:'#app',
        data:{
            msg:'HelloWord'
        }
    });
</script>
</body>
</html>

使用v-clock就可以不显示插值表达式,刷新页面直接出来数据
背后原理:

先通过样式隐藏内容,在内存中进行值的替换,替换好之后在显示最终的结果。

v-text 纯文本信息 v-html(容易遭遇跨站脚本攻击) v-pre 填充原始信息
v-once:如果显示的信息后期不需要再修改可以使用,可以提高性能。
v-model 双向绑定
image.png

MVVM设置思想

M(model)
V(view)
VM(View-Model)
image.png
重点是双向绑定

事件绑定

v-on指令语法 当然因为经常使用还提供一种简写方法@
当然在vue中我们可以给时间绑定一个方法写在,methods里面
image.png

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Vue</title>
    <style type="text/css">
        [v-clock]{
             display:none;
         }
    </style>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<div id="app">
  <div>{{num}}</div>
    <div>
        <button v-on:click="num++">增加</button>
        <button @click="num++">点击1</button>
        <button @click="handle">点击1</button>
        <button @click="handle()">点击1</button>
    </div>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>

    var vm =new Vue({
        el:'#app',
        data:{
            num:0
        },
        methods:{
            handle:function (){
                //这里的this是vue的实例对象
                console.log(this)
                this.num++
            }
        }
    });
</script>
</body>
</html>

事件参数传递
1.如果时间直接绑定函数名称,那末默认会传递事件对象作为时间函数的第一个函数
2.如果事件绑定函数调用,事件对象必须作为最后一个参数显示传递,必须对象名称必须$event

 <button @click="handle($event)">点击1</button>

事件修饰符

image.png

按键修饰符

image.png

自定义按键修饰符

全局config.keyCodes对象
Vue.config.keyCodes.f1 = 112;
自定义按键修饰符名字是自定义的,但是对应的值必须是按键对应event对象中keyCode值
Vue.config.keyCodes.aaa = 65

Vue动态处理属性

v-bind指令用法
跳转
缩写形式
跳转

image.png

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Vue</title>
    <style type="text/css">
        [v-clock]{
            display:none;
        }
    </style>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<div id="app">
    <a v-bind:href="url">百度</a>
    <button @click="handle"></button>
    //v-model事件双向绑定其实就是使用了v-bind:value,和@input
    <div>{{msg}}</div>
    <input type="text" v-bind:value="msg" @input="handle">
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>

    var vm =new Vue({
        el:'#app',
        data:{
            url:'http://www.baidu.com',
            msg:'hello'
        },
        methods:{
            handle:function (event){
                //修改url地址
                this.url='https://www.imooc.com/';
                this.msg = event.target.value;
            }
        }
    });
</script>
</body>
</html>

样式绑定

控制类名
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Vue</title>
    <style type="text/css">
        .active{
            border: 1px solid red;
            width: 100px;
            height: 100px;
        }
        .error{
            background-color: orange;
        }
    </style>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<div id="app">
    <div v-bind:class="{active: isAcrive,error: isError}"></div>
    <button @click="handle">切换</button>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>

    var vm =new Vue({
        el:'#app',
        data:{
            url:'http://www.baidu.com',
            msg:'hello',
            isAcrive:true,
            isError:true
        },
        methods:{
            handle:function (){
                //控制isActive在true和false之间切换
                this.isAcrive = !this.isAcrive;
            }
        }
    });
</script>
</body>
</html>

image.png

style样式处理

image.png

分支循环结构

  • v-if
  • v-else
  • v-else-fi
  • v-show
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Vue</title>
    <style type="text/css">
        [v-clock]{
            display:none;
        }
    </style>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<div id="app">
    <div v-if="score>=90">优秀</div>
    <div v-else-if="score<90&&score>=80">良好</div>
    <div v-if="score<80&&score>=60">一般</div>
    <div v-else>比较差</div>
    <div v-show="flag">11</div>
    <button @click="handle">取反</button>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>

    var vm =new Vue({
        el:'#app',
        data:{
            score:76,
            flag:false
        },
        methods:{
            handle:function (){
                this.flag = !this.flag
            }
        }
    });
</script>
</body>
</html>

循环结构

image.png
在Vue中如果有对象遍历最好加上key这样的话就不会报错,唯一的key

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Vue</title>
    <style type="text/css">
        [v-clock]{
             display:none;
         }
    </style>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<div id="app">
    <div>水果列表</div>
    <ul>
        <li v-for="item in fruits">{{item}}</li>
        <li v-for="(item,index) in fruits">{{item + '____'+ index}}</li>
    </ul>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>

    var vm =new Vue({
        el:'#app',
        data:{
            fruits:['apple','organg','banana']
        },
        methods:{

        }
    });
</script>
</body>
</html>

image.png
image.png

Vue的常用特性

  • 表单操作
  • 自定义指令
  • 计算属性
  • 过滤器
  • 监听器
  • 生命周期

表单操作

表单修饰符

  • number:转化为数值
  • trim:去掉开始和结尾的空格
  • lazy:将input时间切换为change事件
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<div id="app">
    <input type="text" v-model.number="age">
    <input type="text" v-model.trim="text">
    <input type="text" v-model.lazy="msg">
    <div>{{msg}}</div>
    <button @click="handle">点击</button>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
    var vm = new Vue({
        el:'#app',
        data:{
            age:'',
            text:'',
            msg:''
        },
        methods:{
            handle:function (){
                console.log(this.age+1)
                console.log(this.text)
            }
        }
    })
</script>
</body>
</html>

自定义指令

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<div id="app">
    <input type="text" v-focus>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
    Vue.directive('focus',{
        inserted:function (el){
            //el表示指令绑定的元素
            el.focus();
        }
    })
    var vm = new Vue({
        el:'#app',
        data:{

        },
        methods:{

        }
    })
</script>
</body>
</html>

inserted是钩子函数,当dom绑定的时候使用运行
image.png

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<div id="app">
    <input type="text" v-colors="msg">
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script type="text/javascript">
    //自定义指令带参数
    Vue.directive('colors',{
        bind:function (el,bind){
           el.style.backgroundColor = bind.value.color;
           //通过携带参数来控制指令的一些具体行为
        }
    });
    var vm = new Vue({
        el:'#app',
        data:{
            msg:{
                color:'orange'
            }
        },
        methods:{

        }
    })
</script>
</body>
</html>

局部指令

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<div id="app">
    <input type="text" v-colors="msg">
    <input type="text" v-focus>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script type="text/javascript">
    //自定义指令带参数
    var vm = new Vue({
        el:'#app',
        data:{
            msg:{
                color:'orange'
            }
        },
        methods:{

        },
        directives:{
            colors:{
                bind:function (el,bind){
                    el.style.backgroundColor = bind.value.color;
                    //通过携带参数来控制指令的一些具体行为
                }
            },
            focus:{
                inserted:function (el){
                    el.focus();
                }
            }
        }
    })
</script>
</body>
</html>

局部指令应用范围是有所限制的,全局指令是没有限制的

计算属性computed

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<div id="app">
    <div>{{msg}}</div>
    <div>{{reversString}}</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>

    var vm = new Vue({
        el:'#app',
        data:{
            msg:'Hello '
        },
        methods:{

        },
        //计算属性,让模板变得更加简单
        computed:{
            reversString:function (){
                return this.msg.split('').reverse().join('')
            }
        }
    })
</script>
</body>
</html>

计算属性computed和methods方法存在什么差异
**
缓存特性在比较耗时的计算节省性能,计算属性他是基于依赖来做缓存的,当发布存在缓存机制。

计算属性依赖:data

侦听器

image.png
数据变化时异步或者开销比较大

侦听器用法

image.png

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<div id="app">
    <div>
        <span></span>
        <span>
        <input type="text" v-model="firstName">
    </span>
    </div>
    <div>
        <span></span>
        <input type="text" v-model="lastName">
    </div>
    <div>{{msg}}</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>

    var vm = new Vue({
        el:'#app',
        data:{
            firstName:'Jim',
            lastName:'Green',
            msg:''
        },
        watch:{
            firstName: function (val){
                this.msg = val + '' + this.lastName;
            },
            lastName: function (val){
                this.msg = this.firstName + '' + val;
            }
        }

    })
</script>
</body>
</html>

监听器属性的方法必须和数据里面的方法名称一致,这样的监听才可以实现

监听器应用场景

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<div id="app">
    <div>
        <span>用户名:</span>
        <span>
            <input type="text" v-model.lazy="uname">
        </span>
        <span>{{tip}}</span>
    </div>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
    //1.采用监听器用户名称变化
    //2.调用后台接口验证
    //3.根据验证结果调整提示信息

    var vm = new Vue({
        el:'#app',
        data:{
            uname:'',
            tip:''
        },
        methods:{
            checkName:function (uname){
                //调用接口,但是可以使用定时任务方式模拟接口调用
                var that = this;
                setTimeout(function (){
                    if (uname == 'admin'){
                        that.tip = '用户名存在请更换一个';
                    }else{
                        that.tip = '用户名可以使用';
                    }
                },2000)
            }
        },
        watch:{
            uname:function (val){
                 //调用后台接口验证用户名合法性
                this.checkName(val);
                //修改提示信息
                this.tip = '正在验证。。。';
            }
        },

    })
</script>
</body>
</html>

过滤器

作用:格式化数据,比如将字符串格式化到首字母大写,将日期格式化为指定的格式等。
image.png

自定义过滤器

image.png

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<div id="app">
    <input type="text" v-model="msg">
    <div>{{ msg | upper}}</div>
    <div>{{msg | upper | lower}}</div>
    <div :abc="msg| upper">测试数据</div>

</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
    //过滤器
    // Vue.filter('upper',function (val){
    //     return val.charAt(0).toUpperCase()+val.slice(1);
    // });
    // Vue.filter('lower',function (val){
    //     return val.charAt(0).toLowerCase()+val.slice(1);
    // });
    var vm = new Vue({
        el:'#app',
        data:{
            msg:''
        },
        filters:{
            upper: function (val){
                return val.charAt(0).toUpperCase()+val.slice(1);
            }
        }
    });
</script>
</body>
</html>

带参数的过滤器
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<div id="app">
    <div>{{date | format('yyyy-MM-dd')}}</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
    //过滤器
    Vue.filter('format',function (val,arg){
        if (arg == 'yyyy-MM-dd'){
            var ret = '';
            ret += val.getFullYear()+'-'+(val.getMonth()+1) + '-' + val.getDate();
            console.log(ret)
            return ret;
        }
        console.log(1)
    })
    var vm = new Vue({
        el:'#app',
        data:{
            date:new Date()
        },

    });
</script>
</body>
</html>

生命周器

主要阶段

  • 挂载(初始化相关属性)
    • beforeCreate
    • created
    • beforeMount
    • mounted
  • 更新(元素或组线的变更操作)
    • beforeUpdate
    • updated
  • 销毁(销毁相关属性)
    • beforeDestroy
    • destroyed

image.png
Vue实例产生会经过8个生命周期

Vue中对于数组的新概念

变异方法(修改原始数据)

  • push()
  • pop()
  • shift()
  • unshift()
  • splice()
  • sort()
  • reverse()
替换数组(形成新的数组)
  • filter()
  • concat()
  • slice()

变异方法都会影响到数组的原始数据,替换方法不会影响到数组的原始数据他会形成一个新的数组。

修改响应式数据

  • Vue.set(vm.items,indexOfltem,newValue)
  • vm.$set(vm.items,indexOfItem,newValue)

1.参数一表示要处理的数组名称
2.参数2表示要处理的数组索引
3.参数3表示要处理的数组的值

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

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

相关文章

Pytorch读取自己的数据集

数据集 流程图 导包设置tfs创建datasets.ImageFolder创建torch.utils.data.DataLoader() import time import os from tqdm import tqdm import pandas as pd import numpy as np import torch import torchvision import torch.nn as nn import torch.nn.functional as F im…

UV:展uv

1.3dmax 选中物体 修改器列表选中“UV展开” 打开UV编辑器 断开圆圈 同理断开瓶底 展开侧面 剥离 拉直 排列 纹理盘格 用于查看排列位置 渲染UV模板 PS图片 将不要的部分填充为黑色 复制图片 删除多余 保存图片 添加材质球和位图 按M打开材质球编辑器 重置UV 将uv变为初始…

激光切割机价格多少钱一台?

随着科技的飞速发展&#xff0c;激光切割技术在制造业中的应用越来越广泛。它以高精度、高效率和高质量著称&#xff0c;是金属加工行业的理想选择。然而&#xff0c;对于初次接触或打算购买激光切割机的用户来说&#xff0c;最关心的问题之一就是价格。那么&#xff0c;激光切…

Google Veo发布:AI生成视频的重大突破

在Google I/O 2024大会上&#xff0c;Google推出了Veo&#xff0c;这是一款能够根据文本提示生成1080p视频的AI模型。这次发布标志着Google在生成式AI领域的又一重大突破。 Veo的强大功能 Veo不仅能够生成各种视觉和电影风格的视频片段&#xff0c;包括风景镜头和延时摄影&am…

RPKI资源公共密钥基础架构体系的搭建

Ubuntu系统下RPKI体系的搭建 Ubuntu安装Nginx 一、安装 apt-get update apt-get install nginx nginx -v #查看安装版本二、目录说明 /usr/sbin/nginx&#xff1a;主程序&#xff0c;启动文件 /etc/nginx&#xff1a;存放配置文件 /var/www/html&#xff1a;存放项目目录 …

python数据分析——数据可视化(图形绘制基础)

数据可视化&#xff08;图形绘制基础&#xff09; 前言一、图形绘制基础Matplotlib简介使用过程sin函数示例 二、常用图形绘制折线图的绘制plot示例 散点图的绘制plot示例 柱状图的绘制bar示例 箱型图绘制plot.box示例 饼状图的绘制pie示例 三、图形绘制的组合情况多个折线图的…

Google在我的网站显示不同的SEO元标题/描述

Rank Math使您可以比以往更轻松地为您的博客文章、页面和其他自定义帖子类型编写完美的SEO元标题和描述。但正如您可能已经注意到的那样&#xff0c;谷歌&#xff08;以及其他搜索引擎&#xff09;经常不简单地选择使用您设置的元描述&#xff0c;并且这种情况正变得越来越普遍…

rocketmq的基础概念

生产者 生产者生产的过程&#xff1a; producer会在接入nameserver时&#xff0c;获取所有topic和队列的信息&#xff0c;然后在每次发送时&#xff0c;根据负载均衡在topic中选择发送的队列。 生产者的消息是发送给具体的queue&#xff0c;而消费者消费是从具体的queue消费 …

Git系列:git add 被忽视的操作技巧

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

C语言——栈和队列

文章目录 一、栈1. 栈的概念2. 栈的基本功能3. 栈的实现 二、 队列1. 队列的概念2. 队列的基本功能3. 队列的实现 一、栈 1. 栈的概念 栈是一种特殊的线性表&#xff0c;限定仅在表尾进行插入和删除的线性表。这一端称之为栈顶&#xff0c;另一端称为栈底。 栈又称为后进先出…

python将两张图片对齐

目录 需要对齐的照片如下&#xff1a; 源码&#xff1a; 结果&#xff1a; 需要对齐的照片如下&#xff1a; 源码&#xff1a; import cv2 import numpy as np from matplotlib import pyplot as plt# 读取两张图片 imgA cv2.imread(./out/out/3.png) imgB cv2.imread(./…

工具:资源包提取

1.提取unity资源包的工具 一定要通过文件夹的方式选择unity文件否则导出来后的资源不完整

锚点组件--支持点击、滚动高亮锚点

实现一个锚点组件&#xff0c;页面滚动时高亮当前位置锚点、点击锚点时跳转到指定冒点位置&#xff0c;同时选中锚点也高亮 效果图 父组件 import ./index.less; import Anchor from ./Anchor; import Content from ./Content;export default function index() {return (<…

rocketmq的流程

生产过程 消费过程 存储 在RocketMQ中&#xff0c;一个Broker的所有Topic的消息都会被写入到同一个CommitLog文件中。 每个队列&#xff08;Queue&#xff09;都有对应的ConsumeQueue文件。 ConsumeQueue每个记录定长&#xff0c;20字节&#xff0c;消息在commitlog中的偏移量…

【软件的安装与基本设置】AD21软件的PCB规则设置

在绘制PCB之前&#xff0c;要进行规则的创建&#xff0c;因为在绘制PCB的过程中&#xff0c;难免会出现很多错误&#xff0c;所以需要先对绘制PCB创建规则&#xff0c;即所有的打孔&#xff0c;走线&#xff0c;铺铜都要基于电气性能规则去设计&#xff0c;等到后期&#xff0c…

[vue] nvm

nvm ls // 看安装的所有node.js的版本nvm list available // 查显示可以安装的所有node.js的版本可以在可选列表里。选择任意版本安装&#xff0c;比如安装16.15.0 执行&#xff1a; nvm install 16.15.0安装好了之后。可以执行&#xff1a; …

云服务器修改端口通常涉及几个步骤

云服务器修改端口通常涉及几个步骤 远程连接并登录到Linux云服务器&#xff1a; 使用SSH工具&#xff08;如PuTTY、SecureCRT等&#xff09;远程连接到云服务器。 输入云服务器的IP地址、用户名和密码&#xff08;或密钥&#xff09;进行登录。 修改SSH配置文件&#xff1a…

智能数据提取:在严格数据治理与安全标准下的实践路径

一、引言 随着信息技术的飞速发展&#xff0c;数据已成为企业最宝贵的资产之一。然而&#xff0c;数据量的爆炸式增长和数据格式的多样化&#xff0c;使得传统的数据提取方法变得效率低下且难以满足业务需求。智能数据提取技术应运而生&#xff0c;它通过应用人工智能和机器学…

Unity里的Time

Time and frame rate management Time类&#xff1a; Time script reference page. 一些常见的属性有&#xff1a; Time.time 返回从游戏开始经历的时间.Time.deltaTime 返回从上帧结束到现在经历的时间&#xff0c;和帧率成反比Time.timeScale 控制时间流逝的因子Time.fixe…

一个制剂生产人眼中的精益管理

精益管理&#xff08;Lean Management&#xff09;是一种通过减少浪费和提高价值创造的方法&#xff0c;广泛应用于各个行业中&#xff0c;包括药品制剂生产领域。 本文&#xff0c;以一个多年从事药品制剂生产的人的角度&#xff0c;从优点、功能以及与其他管理方法的比较等方…