当前位置: 首页 > news >正文

javaWeb vue的简单语法

一、简介

两大核心优势:

声明式渲染:Vue 基于标准 HTML 拓展了一套模板语法,使得我们可以声明式地描述最终输出的 HTML 和 JavaScript 状态之间的关系。

响应性:Vue 会自动跟踪 JavaScript 状态并在其发生变化时响应式地更新 DOM  

二、单文件组件SFC

Single File Component。

(1)VUE的组件

 一个页面作为整体,是由多个部分组成的,每个部分在这里就可以理解为一个组件。也就是说,组件是页面的一个部分。

每个.vue文件就可以理解为一个组件,多个.vue文件可以构成一个整体页面

组件化给我们带来的另一个好处就是组件的复用和维护非常的方便

(2).vue文件

传统的页面由.html文件.css文件和.js文件三个文件组成(多文件组件)

 vue将这文件合并成一个.vue文件(Single-File Component,简称 SFC,单文件组件)

.vue文件对js/css/html统一封装,这是VUE中的概念 该文件由三个部分组成    `<script>    <template>    <style>`

    template标签     代表组件的html部分代码  代替传统的.html文件

    script标签           代表组件的js代码 代替传统的.js文件

    style标签            代表组件的css样式代码 代替传统的.css文件  

(3)工程化vue项目

index.html是项目的入口,其中 `<div id ='app'></div>` 用于挂载所有组建的元素

index.html中的script标签引入了一个main.js文件,具体的挂载过程在main.js中执行

main.js是vue工程中非常重要的文件,他决定这项目使用哪些依赖、导入的第一个组件是什么

App.vue是vue中的核心组件,所有的其他组件都要通过该组件进行导入,该组件通过路由可以控制页面的切换

三、响应式数据和setup语法糖

(1)响应式数据

非响应式数据:修改后VUE不会更新DOM

响应式数据:修改后VUE会更新DOM

VUE2中数据默认是响应式的

VUE3中数据要经过ref或者reactive处理后才是响应式的

ref是VUE3框架提供的一个函数,需要导入(目前在VSCode中可以实现使用ref时自动在文件开头script标签中实现导入)

    import {ref} from 'vue'

(ref相当于将counter转换为一个对象,其值代表此对象value属性的值{value:1})

ref处理的响应式数据在js编码修改的时候需要通过.value操作,但在绑定到html上时不需要。

数据变化时,vue框架会将变量更新后的值更新到dom树之中

<script type="module">

    import {ref} from 'vue'

    export default{

        setup(){

            //ref处理的响应式数据在js编码修改的时候需要通过.value操作

            //ref响应式数据在绑定到html上时不需要.value

            let counter = ref(1)

            function increase(){

                // 通过.value修改响应式数据

                counter.value++

            }

            function decrease(){

                counter.value--

            }

            return {

                counter,

                increase,

                decrease

            }

        }

    }

</script>

<template>

    <div>

      <button @click="decrease()">-</button>

      {{ counter }}

      <button @click="increase()">+</button>

    </div>

   

响应式数据的处理方式:

①ref:适用于单个变量

②reactive式:更加适用于对象

<script setup>

import { reactive, ref } from 'vue';

let counter=ref(10)

function fun1(){

  counter.value++

}

// 使用ref的方式  script标签中需要使用value调用,但是template中不需要。

let person=reactive({

name:"Qum",

age:18

})

// 使用reactive的方式  响应式数据,调用时与java调用属性基本相同,可以直接调用。

function agePlus(){

  person.age++

}

</script>

<template>

  <div>

    <button @click="fun1">+</button>

    <br>

    <button @click="counter++">++</button>

    {{ counter }}

   

    <br>

    <button @click="agePlus()">+</button>

    <br>

    <button @click="person.age++">++</button>

    {{ person.age }}

  </div>

</template>

<style scoped>

</style>

toRef函数

tiRefs

(2)setup语法糖

 <script type="module" setup> 通过setup关键字

可以省略 export default {setup(){   return{}}}这些冗余的语法结构

四、Vue 的视图渲染

1、插值表达式

写法:

{{写入具体代码}}

插值表达式不依赖标签,没有标签也可以单独使用

插值表达式中可以调用函数,将函数的返回值渲染到指定的位置

插值表达式支持一些常见的运算符

<script setup type="module">

  let msg ="hello vue3"

  let getMsg= ()=>{

    return 'hello vue3 message'

  }

  let age = 19

  let bee = '蜜 蜂'

  // 购物车

  const carts = [{name:'beer',price:15,number:2},{name:'cake',price:16,number:1}];

  //计算购物车总金额

  function compute(){

      let count = 0;

      for(let index in carts){

          count += carts[index].price*carts[index].number;

      }

      return count;

  }

</script>

<template>

  <div>

    <h1>{{ msg }}</h1>

    msg的值为: {{ msg }} <br>

    getMsg返回的值为:{{ getMsg() }}  <br>

    是否成年: {{ age>=18?'true':'false' }} <br>

    反转: {{ bee.split(' ').reverse().join('-') }} <br>

    购物车总金额: {{ compute() }} <br/>

    购物车总金额: {{carts[0].price*carts[0].number + carts[1].price*carts[1].number}} <br>

  </div>

</template>

2、文本渲染命令

为了渲染标签中的文本,我们也可以选择使用`v-text`和`v-html`命令

(1) v-*** 这种写法的方式使用的是vue的命令

(2) v-***的命令必须依赖元素,并且要写在元素的开始标签中

(3) v-***指令支持ES6中的字符串模板

(4) 文本渲染中支持javascript的运算表达式

(5) 文本渲染中也支持函数的调用

(6) v-text可以将数据渲染成双标签中间的文本,但是不识别html元素结构的文本

(7) v-html可以将数据渲染成双标签中间的文本,识别html元素结构的文本

<script setup type="module">

  let msg ='hello vue3'

  let getMsg= ()=>{

    return msg

  }

  let age = 19

  let bee = '蜜 蜂'

  let redMsg ='<font color=\'red\'>msg</font>'

  let greenMsg =`<font color=\'green\'>${msg}</font>`

</script>

<template>

  <div>

    <span v-text='msg'></span> <br>

    <span v-text='redMsg'></span> <br>

    <span v-text='getMsg()'></span> <br>

    <span v-text='age>18?"成年":"未成年"'></span> <br>

    <span v-text='bee.split(" ").reverse().join("-")'></span> <br>

    <span v-html='msg'></span> <br>

    <span v-html='redMsg'></span> <br>

    <span v-html='greenMsg'></span> <br>

    <span v-html="`<font color='green'>${msg}</font>`"></span> <br>

  </div>

</template>

3、属性渲染命令

由于插值表达式不能直接放在标签的属性中,所有要渲染元素的属性就应该使用v-bind

v-bind可以用于渲染任何元素的属性,语法为 v-bind:属性名='数据名', 可以简写为 :属性名='数据名'

<script setup>

  const data = {

    name:'尚硅谷',

    url:"http://www.atguigu.com",

    logo:"http://www.atguigu.com/images/index_new/logo.png"

  }

</script>

<template>

  <div>

    <a

      v-bind:href='data.url'

      target="_self">

      <img

        :src="data.logo"

        :title="data.name">

        <!-- 此处省略了bind标签,只留下冒号。书写上存在方便,但阅读时可能会导致一些困难。 -->

      <br>

      <input type="button"

             :value="`点击访问${data.name}`">

    </a>

  </div>

</template>

4、事件渲染命令

v-on:事件名称=“函数名()”

v-on:事件名可以简写为@事件名

事件的修饰符:once  时间只绑定一次

Prevent  修饰符阻止组件的默认值

我们可以使用 `v-on` 来监听 DOM 事件,并在事件触发时执行对应的 Vue的JavaScript代码。

 用法:v-on:click="handler" 或简写为 @click="handler"

vue中的事件名=原生事件名去掉`on` 前缀   如:onClick --> click

handler的值可以是方法事件处理器,也可以是内联事件处理器

绑定事件时,可以通过一些绑定的修饰符,常见的事件修饰符如下

    + `.once:只触发一次事件[重点]`

    + `.prevent:阻止默认事件。[重点]`

    + .stop:阻止事件冒泡。

    + .capture:使用事件捕获模式而不是冒泡模式。

    + .self:只在事件发送者自身触发时才触发事件。

<script setup>

import { ref } from 'vue';

function fun1(){

  alert("hi")

}

let counter=ref(1)

function fun2(){

  counter.value++

}

function fun3(event){

  let flag=confirm("Are you sure to continue?")

  if(!flag){

    event.preventDefault()

  }

}

function fun4(){

  alert("be clicked!")

}

</script>

<template>

  <div>

    <!-- 事件的绑定函数 -->

     <button v-on:click="fun1()">hello</button>

     <!-- 内联事件处理器 可以在事件名中直接写入想要执行的函数的代码,依然生效。-->

      <br>

      <button v-on:click="counter++">+</button>

      <!-- 例如,此行代码与下一行等效。 -->

      <br>

      <button @click="fun2()" >click here</button>

      <br>

      <button @click.once="fun2()" >click three</button>

      <!-- 如果在事件名加上.once后缀,则只执行一次。 -->

      {{ counter }}

      <br>

      <a href="http://www.atguigu.com" @click="fun3()"></a>

      <!-- 原生js的阻止访问的方式 可以自主选择是否继续访问资源-->

       <a href="http://www.atguigu.com" @click.prevent="fun4()"></a>

       <!-- 直接进行对跳转链接的阻止 -->

  </div>

</template>

<style scoped>

</style>

 

5、条件渲染

(1)v-if和v-else

 v-if='表达式'  只有在指令的表达式返回true时才成功渲染,可以在页面中进行展示。

可以同时使用 v-else 为 `v-if` 添加一个“else 区块”。当v-if不显示的时候,显示v-else中的内容。

一个 v-else 元素必须跟在一个 v-if元素后面,否则将不会被识别,也就是说,v-else依赖于v-if  必须和v-if 成对出现。

<script setup>

import { reactive, ref } from 'vue';

let flag=ref(true)

</script>

<template>

  <div>

    <h1 v-if="flag"> miss miss</h1>

    <h1 v-else>oh yeah</h1>

    <!-- v-if绑定的内容不展示的时候,才展示v-else中的内容。 -->

    <h1 v-show="flag">芜湖</h1>

    <!-- v-show基本和v-if一样,表达式的值为true时进行展示。 -->

    <button @click="flag=!flag">toggle</button>

    <!-- 通过这种方法可以实现改变表达式的值。 -->

  </div>

</template>

<style scoped>

</style>

(2)v-show

v-show基本和v-if一样,表达式的值为true时进行展示。

v-if和v-show的辨析:

v-if          v-show

v-if  是“真实的”按条件渲染,因为它确保了在切换时,条件区块内的事件监听器和子组件都会被销毁与重建。

v-if  也是惰性的:如果在初次渲染时条件值为 false,则不会做任何事。条件区块只有当条件首次变为 true 时才被渲染。

相比之下,`v-show` 简单许多,元素无论初始条件如何,始终会被渲染,只有 CSS `display` 属性会被切换。

+ 总的来说,`v-if` 有更高的切换开销,而 `v-show` 有更高的初始渲染开销。因此,如果需要频繁切换,则使用 `v-show` 较好;如果在运行时绑定条件很少改变,则 `v-if` 会更合适。

6、列表渲染

我们可以使用 `v-for` 指令基于一个数组来渲染一个列表。

 `v-for` 指令的值需要使用 `item in items` 形式的特殊语法,其中 `items` 是源数据的数组,而 `item` 是迭代项的别名。

在 `v-for` 块中可以完整地访问父作用域内的属性和变量。`v-for` 也支持使用可选的第二个参数表示当前项的位置索引。

<script type="module" setup>

    import {ref,reactive} from 'vue'

    let parentMessage= ref('产品')

    let items =reactive([

      {

        id:'item1',

        message:"薯片"

      },

      {

        id:'item2',

        message:"可乐"

      }

    ])

</script>

<template>

  <div>

    <ul>

      <!-- :key不写也可以,此处省略的是v-bind的属性渲染 -->

      <li v-for='item in items' :key='item.id'>

        {{ item.message }}

      </li>

    </ul>

    <!-- 此处代码呈现无序排列的具体数组内容。 -->

    <ul>

      <!-- index表示索引,取名上不做强制要求-->

      <li v-for="(item, index) in items" :key="index">

        {{ parentMessage }} - {{ index }} - {{ item.message }}

      </li>

    </ul>

   

  </div>

</template>

<style scoped>

</style>

7、双向绑定

单向绑定和双向绑定:

(1)单向绑定:响应式数据的变化会更新dom树,但是dom树上用户的操作造成的数据改变不会同步更新到响应式数据

(2)双向绑定: 响应式数据的变化会更新dom树,dom树上用户的操作造成的数据改变也会同步更新到响应式数据

    + 用户通过表单标签才能够输入数据,所以双向绑定都是应用到表单标签上的,其他标签不行

    + v-model专门用于双向绑定表单标签的value属性,语法为 `v-model:value=''`,可以简写为 v-model=""

    + v-model还可以用于各种不同类型的输入,`<textarea>`、`<select>` 元素。

v-model=""

<script type="module" setup>

import { reactive, ref, toValue } from 'vue';

  let message=ref("zhangsan")

  let user=reactive({name:"Qum",pwd:"123456",intro:""})

  //创建一个对象user

  let hbs=ref([])//需要绑定的value属性

  //一个清空数据的方法:

  function clearx(){

    //user = {};// 这种写法会将数据变成非响应的,应该是user.name=""

    user.name=''

    user.pwd=''

    user.intro=''

    hbs.value.splice(0,hbs.value.length);;

  }

</script>

<template>

   <div>

    <input type="text" placeholder="please input your username!" v-model="user.name"><br>

    hobby:

    sleep <input type="checkbox" v-model="hbs" value="break">

    stay with him <input type="checkbox" v-model="hbs" value="love">

    <br>

    <textarea v-model="user.intro"></textarea>

    {{ user }}

    {{ hbs }}

    <button @click="clearx()">重置</button>

   </div>

</template>

<style scoped>

</style>

8、计算属性

<script type="module" setup>

import { reactive, ref, toValue } from 'vue';

const author=reactive({name:"Qum",books:["不逢君","与君伤别离"]})

function hasBooks(){

  console.log("function")

  return author.books.length>0?'yes':'no'

}

// 调用一次,执行一次

let bookMessage=computed(()=>{

  console.log("variable")

 return author.books.length>0?'yes':'no'

})//每次执行时,如果和上一次的数据没有差别,若无改变,直接沿用上一次的值

</script>

<template>

   <div>

    <p>

      author:{{ author.name }}

    </p>

    Did publicize books:{{ hasBooks() }}

    <br>

    Did publicize books:{{ bookMessage }}

   </div>

</template>

<style scoped>

</style>

9、数据监听器

 watch主要用于以下场景:

    当数据发生变化时需要执行相应的操作

    监听数据变化,当满足一定条件时触发相应操作

    在异步操作前或操作后需要执行相应的操作

> 监控响应式数据(watch):

 

<script type="module" setup>

  //引入模块

  import { ref,reactive,watch} from 'vue'

 

  let firstname=ref('')

  let lastname=reactive({name:''})

  let fullname=ref('')

  //监听一个ref响应式数据

格式:watch(需要监听的ref数据,根据监听作出响应的处理函数)

  watch(firstname,(newValue,oldValue)=>{

    console.log(`${oldValue}变为${newValue}`)

    fullname.value=firstname.value+lastname.name

  })

  //监听reactive响应式数据的指定属性

格式:watch(函数返回要监听的响应式数据,处理函数) 

watch(()=>lastname.name,(newValue,oldValue)=>{

    console.log(`${oldValue}变为${newValue}`)

    fullname.value=firstname.value+lastname.name

  })

  //监听reactive响应式数据的所有属性(深度监视,一般不推荐)

  //deep:true 深度监视

  //immediate:true 深度监视在进入页面时立即执行一次

  watch(()=>lastname,(newValue,oldValue)=>{

    // 此时的newValueoldValue一样,都是lastname

    console.log(newValue)

    console.log(oldValue)

    fullname.value=firstname.value+lastname.name

  },{deep:true,immediate:false})

</script>

<template>

  <div>

    全名:{{fullname}} <br>

    姓氏:<input type="text" v-model="firstname"> <br>

    名字:<input type="text" v-model="lastname.name" > <br>

  </div>

</template>

<style scoped>

</style>

```

监控响应式数据(watchEffect):

watchEffect默认监听所有的响应式数据

<script type="module" setup>

  //引入模块

  import { ref,reactive,watch, watchEffect} from 'vue'

 

  let firstname=ref('')

  let lastname=reactive({name:''})

  let fullname=ref('')

  //监听所有响应式数据

  watchEffect(()=>{

    //直接在内部使用监听属性即可,不用外部声明

    //也不需要即时回调设置,默认初始化就加载

    console.log(firstname.value)

    console.log(lastname.name)

    fullname.value=`${firstname.value}${lastname.name}`

  })

</script>

<template>

  <div>

    全名:{{fullname}} <br>

    姓氏:<input type="text" v-model="firstname"> <br>

    名字:<input type="text" v-model="lastname.name" > <br>

  </div>

</template>

<style scoped>

</style>
watchwatchEffect的对比:

> `watch` vs. `watchEffect`

+ `watch` `watchEffect` 都能响应式地执行有副作用的回调。它们之间的主要区别是追踪响应式依赖的方式:

watch 只追踪明确侦听的数据源。它不会追踪任何在回调中访问到的东西。另外,仅在数据源确实改变时才会触发回调。`watch` 会避免在发生副作用时追踪依赖,因此,我们能更加精确地控制回调函数的触发时机。

watchEffect,则会在副作用发生期间追踪依赖。它会在同步执行过程中,自动追踪所有能访问到的响应式属性。这更方便,而且代码往往更简洁,但有时其响应性依赖关系会不那么明确。

watchEffect函数

在watchEffect函数中,如果想监听数据,直接调用即可,无需将要监听的响应式数据传入参数。

在watchEffect函数中调用后的响应式数据才会被监视,否则不会被监视。

在watchEffect函数中,所有被调用的响应式数据指的都是newValue,不能使用oldValue。

10、生命周期

> 每个 Vue 组件实例在创建时都需要经历一系列的初始化步骤,比如设置好数据侦听,编译模板,挂载实例到 DOM,以及在数据改变时更新 DOM。在此过程中,它也会运行被称为`生命周期钩子的函数`,让开发者有机会在特定阶段运行自己的代码!

常见钩子函数

+ onBeforeMount()       注册一个钩子,在组件被挂载之前被调用。

    + onMounted()              注册一个回调函数,在组件挂载完成后执行。

+ onBeforeUpdate()      注册一个钩子,在组件即将因为响应式状态变更而更新其 DOM 树之前调用。

    + onUpdated()               注册一个回调函数,在组件因为响应式状态变更而更新其 DOM 树之后调用。

        + onBeforeUnmount()  注册一个钩子,在组件实例被卸载之前调用。

    + onUnmounted()         注册一个回调函数,在组件实例被卸载之后调用。

先执行 onBeforeMount() onMounted()    实现挂载。

11、组件

(1)组件概述

组件允许我们将 UI 划分为独立的、可重用的部分,并且可以对每个部分进行单独的思考。组件就是实现应用中局部功能代码和资源的集合!在实际应用中,组件常常被组织成层层嵌套的树状结构:

这和我们嵌套 HTML 元素的方式类似,Vue 实现了自己的组件模型,使我们可以在每个组件内封装自定义内容与逻辑

组件化:对js/css/html统一封装,这是VUE中的概念

模块化:对js的统一封装,这是ES6中的概念

 组件化中,对js部分代码的处理使用ES6中的模块化

(2)使用组件的代码案例

三个组件文件:

Header.vue

<script setup type="module">

</script>

<template>

    <div>

        欢迎: xx <a href="#">退出登录</a>

    </div>

</template>

<style>

</style>

 

 

Navigator.vue

<script setup type="module">

</script>

<template>

    <!-- 推荐写一个根标签-->

    <div>

       <ul>

          <li>学员管理</li>

          <li>图书管理</li>

          <li>请假管理</li>

          <li>考试管理</li>

          <li>讲师管理</li>

       </ul>

    </div>

</template>

<style>

</style>

 

Content.vue

<script setup type="module">

</script>

<template>

    <div>

       show principal conment

    </div>

</template>

<style>

</style>

 

使用方法:在App.vue中引入已经写好的组件。

App.vue

<script setup>

    import Header  from './components/Header.vue'

    import Navigator  from './components/Navigator.vue'

    import Content  from './components/Content.vue'

</script>

<template>

  <div>

     <Header class="header"></Header>

     <Navigator class="navigator"></Navigator>

     <Content class="content"></Content>

  </div>

</template>

<style scoped>

    .header{

       height: 80px;

       border: 1px solid red;

    }

    .navigator{

      width: 15%;

      height: 800px;

      display: inline-block;

      border: 1px blue solid;

      float: left;

    }

    .content{

      width: 83%;

      height: 800px;

      display: inline-block;

      border: 1px goldenrod solid;

      float: right;

    }

</style>

 

(3)组件的传参

①父传子

 Vue3 中父组件向子组件传值可以通过 props 进行,具体操作如下:

1. 首先,在父组件中定义需要传递给子组件的值。

接着,在父组件的模板中引入子组件,同时在引入子组件的标签中添加 props 属性并为其设置需要传递的值

2. 在 Vue3 中,父组件通过 props 传递给子组件的值是响应式的。也就是说,如果在父组件中的传递的值发生了改变,子组件中的值也会相应地更新。

父组件代码:App.vue

导入子组件。在template标签中,使用子组件标签,并且使用属性渲染传递数据。

在script标签中,可以实现对传递数据的修改。

<script setup>

  import Son from './components/Son.vue'

  import {ref,reactive,toRefs} from 'vue'

  let message = ref('parent data!')

  let title = ref(42)

  function changeMessage(){

    message.value = '修改数据!'

    title.value++

  }

</script>

 

<template>

  <div>

    <h2>{{ message }}</h2>

    <hr>

    <!-- 使用子组件,并且传递数据! -->

    <Son :message="message" :title="title"></Son>

    <hr>

    <button @click="changeMessage">点击更新</button>

  </div>

</template>

 

<style scoped>

</style>

 

 

子组件代码:Son.vue

从vue中导入defineProps,并且在defineProps中声明父组件传递参数的属性类型。

<script setup type="module">

    import {ref,isRef,defineProps} from 'vue'

    //声明父组件传递属性值

    defineProps({

        message:String ,

        title:Number

    })

</script>

 

<template>

    <div>

    <div>{{ message }}</div>

    <div>{{ title }}</div>

    </div>

</template>

<style>

</style>

②子传父

父组件中导入子组件,自定义函数接收子组件中传输的数据。使用事件渲染绑定自定义函数,实现参数的接收。

父组件: App.vue

<script setup>

    import Son from './components/Son.vue'

    import {ref} from 'vue'

    let pdata = ref('')

    const padd = (data) => {

        console.log('2222');

        pdata.value =data;

    }

    //自定义接收,子组件传递数据方法! 参数为数据!

    const psub = (data) => {

        console.log('11111');

        pdata.value = data;

    }

</script>

<template>

    <div>

        <!-- 声明@事件名应该等于子模块对应事件名!调用方法可以是当前自定义!-->

        <Son @add="padd" @sub="psub"></Son>

        <hr>

        {{ pdata }}

    </div>

</template>

<style>

</style>

 

 

子组件:Son.vue

子组件从vue包中导入defineEmits,并且通过defineEmits的方法,创建emites实例,函数内调用对应属性,并将函数绑定在temp标签中的的button标签内。

<script setup>

    import {ref,defineEmits} from 'vue'

    //1.定义要发送给父组件的方法,可以1或者多个

    let emites = defineEmits(['add','sub']);

    let data = ref(1);

    function sendMsgToParent(){

        console.log('-------son--------');

        //2.触发父组件对应的方法,调用defineEmites对应的属性

        emites('add','add data!'+data.value)

        emites('sub','sub data!'+data.value)

        data.value ++;

    }

</script>

<template>

    <div>

      <button @click="sendMsgToParent">发送消息给父组件</button>

    </div>

</template>

相关文章:

javaWeb vue的简单语法

一、简介 两大核心优势&#xff1a; 声明式渲染&#xff1a;Vue 基于标准 HTML 拓展了一套模板语法&#xff0c;使得我们可以声明式地描述最终输出的 HTML 和 JavaScript 状态之间的关系。 响应性&#xff1a;Vue 会自动跟踪 JavaScript 状态并在其发生变化时响应式地更新 D…...

Android 中隐藏标题栏和状态栏的方法

在Android开发中&#xff0c;隐藏标题栏和状态栏是实现全屏显示的常见需求。 一、隐藏标题栏 1、通过代码隐藏 对于继承自 AppCompatActivity 的 Activty&#xff0c;可在 onCreate() 方法中调用supportRequestWindowFeature 或 getSupportActionBar 方法来隐藏标题栏。 ove…...

Tof 深度相机原理

深度相机(TOF)的工作原理_tof相机原理-CSDN博客 深度剖析 ToF 技术&#xff1a;原理、优劣、数据纠错与工业应用全解析_tof技术-CSDN博客 飞行时间技术TOF_tof计算公式-CSDN博客 深度相机&#xff08;二&#xff09;——飞行时间&#xff08;TOF&#xff09;_飞行时间技术-C…...

boost.asio

as&#xff08;async&#xff09;:异步 同步io&#xff1a; reactor (非阻塞)&#xff08;需要注册一次&#xff0c;在等待消息时可以干别的事&#xff09; 阻塞io网络模型 接口&#xff1a;read\accept\connect\write 接口返回时&#xff0c;io完成 异步…...

Python 装饰器(Decorators)

什么是装饰器&#xff1f; 装饰器&#xff08;Decorator&#xff09;本质上是一个 修改其他函数功能的函数。它的核心思想是&#xff1a;不修改原函数代码&#xff0c;动态添加新功能。比如&#xff1a; 记录函数执行时间 检查用户权限 缓存计算结果 自动重试失败操作 理解…...

django orm的优缺点

Django ORM&#xff08;对象关系映射&#xff09;是 Django 框架的核心组件之一&#xff0c;它通过将数据库表映射为 Python 类&#xff0c;简化了数据库操作。以下是其优缺点总结&#xff1a; 优点 开发效率高 用 Python 类定义数据模型&#xff0c;无需手写 SQL&#xff0c…...

国产RISC-V车规芯片当前现状分析——从市场与技术角度出发

摘要 随着汽车产业的智能化、电动化转型加速&#xff0c;车规级芯片的战略地位日益凸显。RISC-V指令集凭借其开源、灵活、低功耗等优势&#xff0c;成为国产车规芯片的重要发展方向。本文从市场与技术两个维度出发&#xff0c;深入分析国产RISC-V车规芯片的现状。通过梳理国内…...

不落因果与不昧因果

在佛教浩瀚的哲学体系中&#xff0c;“因果”是贯穿修行始终的核心命题。而“不落因果”与“不昧因果”这对看似矛盾的概念&#xff0c;恰似明镜的两面&#xff0c;映照出修行者对因果法则的不同认知层次。二者虽仅一字之差&#xff0c;却如天堑般分隔了迷悟两岸&#xff0c;其…...

《论语别裁》第02章 为政(08) 诗的伟大

孔子说我整理诗三百篇的宗旨在什么地方&#xff1f;“一言以蔽之”——一句话&#xff0c;“思无邪”。人不能没有思想&#xff0c;只要是思想不走歪曲的路&#xff0c;引导走上正路就好&#xff0c;譬如男女之爱。如果作学问的人&#xff0c;男女之爱都不能要&#xff0c;世界…...

在学校图书馆知识库中进行论文检索报告生成

首先登录信息门户—>科研服务—>机构知识库 在成果认领页面&#xff0c;查看自己的成果情况。如果发现自己的有些成果未被录入&#xff0c;可以发邮件给管理员。 最后&#xff0c;进入成果管理&#xff0c;选择需要的成果进行检索报告的生成...

《寒门枭雄传》章回体拟目与故事设计

《寒门枭雄传》章回体拟目与故事设计 主题&#xff1a;寒门逆袭的制度性困境与个人成长的撕裂性代价 第一回 贩履郎寒冬逢逼债 落魄汉雪夜定从戎 地点&#xff1a;京口草鞋摊→北府军营 人物&#xff1a;刘裕、刁逵&#xff08;士族豪强&#xff09;、刘母 故事&#xff1a; …...

头歌 | Linux之用户高级管理

若未实现预期结果, 可私信我帮你解答 2025-3-28 第1关&#xff1a;创建/删除用户组 > /data/workspace/myshixun/case1/evaluating.sh # 写入新内容 echo "echo 创建newGroup用户组成功 创建newGroupID用户组成功 设置newGroupID用户组ID成功 删除oldGroup用户组成功…...

常用的测试用例

登录、添加、删除、查询模块是我们经常遇到的&#xff0c;这些模块的测试点该如何考虑 1)登录 ① 用户名和密码都符合要求(格式上的要求) ② 用户名和密码都不符合要求(格式上的要求) ③ 用户名符合要求&#xff0c;密码不符合要求(格式上的要求) ④ 密码符合要求&#xf…...

数据结构与算法——顺序表的实现以及增、插、删、查、印、毁

文章目录 一、前言二、顺序表的概念与结构2.1顺序表的概念2.2顺序表的结构 三、顺序表的分类3.1静态顺序表3.1.1静态顺序表的弊端 3.2动态顺序表3.2.1动态顺序表的相对利弊3.2.2动态顺序表的增容方式 四、顺序表的增、插、删、查、印、毁4.1 顺序表的增容4.2顺序表的尾插和头插…...

环境 tensorflow ERROR: No matching distribution found for ai-edge-litert

提示&#xff1a;环境搭建 文章目录 前言多依赖安装 前言 提示&#xff1a;版本 之前文章 condajupyter 环境搭建 PyTorch 2.6 cpu 环境搭建 系统 &#xff1a;ubuntu 22.0 python &#xff1a;3.8 ERROR: No matching distribution found for ai-edge-litert PyTorch: sta…...

基于深度强化学习的智能机器人路径规划技术研究

在人工智能与机器人技术飞速发展的今天&#xff0c;智能机器人在工业、服务、物流等领域的应用日益广泛。路径规划作为智能机器人运动的核心技术之一&#xff0c;直接影响机器人的工作效率和安全性。近年来&#xff0c;深度强化学习&#xff08;Deep Reinforcement Learning, D…...

【ManiSkill】环境success条件和reward函数学习笔记

1. “PickCube-v1” info["success"]&#xff1a;用于指示任务是否成功完成 布尔型张量&#xff0c;在环境的evaluate()方法中计算并返回&#xff1a; "success": is_obj_placed & is_robot_static这确保了机器人不仅能将物体准确放置在目标位置&am…...

畅捷通T+与吉客云数据集成案例解析

畅捷通T与吉客云的高效数据集成案例分享 在企业信息化系统中&#xff0c;数据的高效流转和准确对接是确保业务顺畅运行的关键。本文将聚焦于一个具体的系统对接集成案例&#xff1a;如何将畅捷通T中的采购入库单&#xff08;红字&#xff09;数据无缝集成到吉客云中&#xff0…...

Vue 项目中使用$refs来访问组件实例或 DOM 元素,有哪些注意事项?

大白话Vue 项目中使用$refs来访问组件实例或 DOM 元素&#xff0c;有哪些注意事项&#xff1f; 在 Vue 项目里&#xff0c;$refs 是个超实用的工具&#xff0c;它能让你直接访问组件实例或者 DOM 元素。不过使用的时候&#xff0c;有一些地方可得注意&#xff0c;下面咱就详细…...

Docker Compose 基础知识

一. Docker Compose 引言 Docker Compose 是 Docker 官方提供的一个用于定义和运行多容器 Docker 应用程序的工具。它通过一个yaml格式的配置文件&#xff08;通常命名为 docker-compose.yml &#xff09;&#xff0c;文件中定义多个服务、网络和卷&#xff0c;从而简化复杂应…...

科技赋能|ZGIS综合管网智能管理平台守护地下城市生命线

地下管网作为城市公共安全的重要组成部分&#xff0c;担负着城市的信息传递、能源输送、排涝减灾等重要任务&#xff0c;是维系城市正常运行、满足群众生产生活需要的重要基础设施&#xff0c;是城市各功能区有机连接和运转的维系&#xff0c;因此&#xff0c;也被称为城市“生…...

EXCEL报错:无法共享此工作薄,因表包含excel表或xml映射的解决方法

在分享工作薄是&#xff0c;如果出现了“无法共享此工作薄&#xff0c;因表包含excel表或xml映射”的报错&#xff0c;那么有两个原因&#xff1a; 1.包含Excel表格&#xff0c;这个也是相对比较常见的原因。 首先选中表格。如果你不知道表的位置在哪&#xff0c;那么在Excel左…...

Go 语言标准库中path模块详细功能介绍与示例

Go语言的 path 模块提供了处理斜杠分隔路径的通用方法&#xff0c;适用于跨平台路径操作&#xff08;如 URL 路径或 Unix 风格路径&#xff09;。以下是 path 模块的核心方法及示例说明&#xff1a; 1. path.Base 返回路径的最后一个元素&#xff08;类似 Unix 的 basename 命…...

在Vue 3 + TypeScript + Vite 项目中安装和使用 SCSS

在Vue 3 TypeScript Vite 项目中安装和使用 SCSS 1、安装 SCSS 的相关依赖 npm install sass --save-dev2、配置 Vite 对于 Vue 3&#xff0c;Vite 已经内置了对 SCSS 的支持&#xff0c;通常不需要额外的配置。但是&#xff0c;如果需要自定义配置&#xff0c;可以在路径…...

洛谷题单1-B2005 字符三角形-python-流程图重构

题目描述 给定一个字符&#xff0c;用它构造一个底边长 5 5 5 个字符&#xff0c;高 3 3 3 个字符的等腰字符三角形。 输入格式 输入只有一行&#xff0c;包含一个字符。 输出格式 该字符构成的等腰三角形&#xff0c;底边长 5 5 5 个字符&#xff0c;高 3 3 3 个字符…...

实现金蝶与钉钉无缝对接以高效管理银行账号信息

【资料】金蝶&钉钉—银行账号 在企业信息化管理中&#xff0c;数据的高效集成和实时同步至关重要。本文将分享一个实际的系统对接集成案例&#xff1a;如何将金蝶云星空的数据集成到钉钉平台&#xff0c;实现银行账号信息的无缝对接。 本次集成方案【资料】金蝶&钉钉…...

正则表达式-万能表达式

1、正则 正则表达式是一组由字母和符号组成的特殊文本, 它可以用来从文本中找 出满足你想要的格式的句子. {“basketId”: 0, “count”: 1, “prodId”: #prodId#, “shopId”: 1, “skuId”: #skuId#} #prodId# re相关的文章&#xff1a; https://www.cnblogs.com/Simple-S…...

ComfyUi教程之阿里的万象2.1视频模型

ComfyUi教程之阿里的万象2.1视频模型 官网Wan 2.1 特点 一、本地安装1.1克隆仓库1.2 安装依赖&#xff08;1.3&#xff09;下载模型&#xff08;1.4&#xff09;CUDA和CUDNN 二、 使用体验&#xff08;2.1&#xff09;官方例子&#xff08;2.2&#xff09;执行过程&#xff08;…...

如何在一个图片上添加另外一个图片

如果你使用的windows10 系统&#xff0c;可以使用系统自带的画图工具 1. 打开windows搜索&#xff0c; 画图工具 2. 在画图软件内&#xff0c; ctrlc 复制图片 &#xff0c; ctrlv粘贴图片 3. 调整想要粘贴的图片&#xff0c;到上图汇总&#xff0c;最后保存&#xff0c;或者…...

【面试题】在 CSS 中,实现一个 div 中的子 div 水平垂直居中

1. 使用 Flexbox 特点&#xff1a;简单、直观&#xff0c;现代浏览器支持良好。 代码&#xff1a; css .parent {display: flex;justify-content: center; /* 水平居中 */align-items: center; /* 垂直居中 */height: 200px; /* 父容器需有高度 */ } .child {…...

Electron 项目开机自启动

app.setLoginItemSettings 与 auto-launch 对比分析 一、稳定性对比 1. app.setLoginItemSettings 优点&#xff1a;作为Electron官方API&#xff0c;有官方维护和支持缺点&#xff1a; 在某些Windows版本上存在已知问题部分Windows 10/11更新后可能失效在macOS权限更严格的…...

sql基础

本文多数内容属于个人基于网上资料的理解&#xff0c;如果有问题请告知修改&#xff0c;十分感谢 定义 百度百科&#xff1a;SQL (Structured Query Language) 是具有数据操纵和数据定义等多种功能的数据库语言&#xff0c;这种语言具有交互性特点&#xff0c;能为用户提供极…...

【C++数据库】SQLite3数据库连接与操作

注意:本文代码均为C++20标准下实现 一、SQLite3库安装 1.1 安装库文件 【工具】跨平台C++包管理利器vcpkg完全指南 vcpkg install sqlite3# 集成至系统目录,之前执行过此命令的无需再次执行 vcpkg integrate install1.2 验证代码 在VS2022中新建控制台项目,测试代码如下…...

数据结构——Map和Set

1. 搜索树 1. 概念 ⼆叉搜索树⼜称⼆叉排序树&#xff0c;它可以是⼀棵空树&#xff0c;或者是具有以下性质的⼆叉树: • 若它的左⼦树不为空&#xff0c;则左⼦树上所有节点的值都⼩于根节点的值 • 若它的右⼦树不为空&#xff0c;则右⼦树上所有节点的值都⼤于根节点的值…...

zsh安装以及安装配置oh-my-zsh安装zsh-autosuggestionszsh-syntax-highlighting

下面是安装 zsh 及配置 oh‑my‑zsh 的详细步骤&#xff0c;适用于 Linux 和 macOS 环境&#xff1a; 1. 安装 zsh 1.1 在 macOS 上安装 zsh macOS 通常预装了 zsh&#xff0c;但建议升级到最新版本。你可以通过 Homebrew 来安装最新版&#xff1a; brew install zsh安装完成…...

VMware 安装 Ubuntu 实战分享

VMware 安装 Ubuntu 实战分享 VMware 是一款强大的虚拟机软件&#xff0c;广泛用于多操作系统环境的搭建。本文将详细介绍如何在 VMware 中安装 Ubuntu&#xff0c;并分享安装过程中的常见问题及解决方法。 1. 安装前的准备工作 (1) 系统要求 主机操作系统&#xff1a;Windo…...

【SpringCloud】Eureka的使用

3. Eureka 3.1 Eureka 介绍 Eureka主要分为两个部分&#xff1a; EurekaServer: 作为注册中心Server端&#xff0c;向微服务应用程序提供服务注册&#xff0c;发现&#xff0c;健康检查等能力。 EurekaClient: 服务提供者&#xff0c;服务启动时&#xff0c;会向 EurekaS…...

Redis:List 类型 内部实现、命令及应用场景

Redis 中的 List&#xff08;列表&#xff09;类型是一种有序的数据结构&#xff0c;它可以存储多个字符串元素&#xff0c;并且这些元素按照插入顺序排列。可以将它理解为一个双向链表&#xff0c;支持在链表的两端进行快速的插入和删除操作。它允许元素重复&#xff0c;并且可…...

Python 字符串正则表达式详解

Python 字符串正则表达式详解 一、正则表达式核心语法 元字符含义正确示例与说明常见错误修正.匹配任意字符&#xff08;换行符除外&#xff09;a.b → 匹配"acb"、“a1b”不匹配换行符&#xff08;需用re.S模式&#xff09;^匹配字符串开头^Hello → 匹配以"H…...

重试机制之指针退避策略算法

一、目的&#xff1a;随着重试次数增加&#xff0c;逐步延长重连等待时间&#xff0c;避免加重服务器负担。 二、计算公式&#xff1a; 每次重试的延迟时间 初始间隔 (退避基数 ^ 重试次数) 通常设置上限防止等待时间过长。 const delay Math.min(initialDelay * Math.pow…...

pyqt第一个窗口程序

文章目录 官方文档相手动创建窗口程序designer创建ui布局 官方文档相 https://doc.qt.io/qtforpython-6/ 手动创建窗口程序 import sys # 导入系统模块&#xff0c;用于获取命令行参数和系统功能 from PySide6.QtWidgets import QApplication, QLabel # 导入Qt组件&#x…...

【蓝桥杯】单片机设计与开发,PWM

一、PWM概述 用来输出特定的模拟电压。 二、PWM的输出 三、例程一&#xff1a;单片机P34引脚输出1kHZ的频率 void Timer0Init(void);unsigned char PWMtt 0;void main(void) {P20XA0;P00X00;P20X80;P00XFF;Timer0Init();EA1;ET01;ET11;while(1);}void Timer0Init(void) //1…...

CSS学习笔记5——渐变属性+盒子模型阶段案例

目录 通俗易懂的解释 渐变的类型 1、线性渐变 渐变过程 2、径向渐变 如何理解CSS的径向渐变&#xff0c;以及其渐变属性 通俗易懂的解释 渐变属性 1. 形状&#xff08;Shape&#xff09; 2. 大小&#xff08;Size&#xff09; 3. 颜色停靠点&#xff08;Color Sto…...

频谱分析仪的最大保持功能

专门应用于例如遥控器之类的&#xff0c;按一下&#xff0c;一瞬间出现的信号的测量。 把仪器连接天线&#xff0c;观测空间中的一些信号&#xff0c;比如WIFI的信号&#xff0c;我们可以看到仪器接收到的信号其实是一直变化的&#xff0c;并不是每一次扫描都能扫到我们想要的这…...

权值线段树算法讲解及例题

算法思想 普通的线段树一般是求区间之和或区间最值&#xff0c;所以这些线段树的每个节点的下标是原数组中的区间范围&#xff0c;每个节点存的是区间和或最值&#xff0c;而权值线段树的每个节点的下标是数组中元素的值&#xff0c;而权值线段树每个节点存的是当前元素出现的…...

3.26刷题(矩阵模拟专题)

1.59. 螺旋矩阵 II - 力扣&#xff08;LeetCode&#xff09; //方法一&#xff1a;变换方向法 class Solution { public:vector<vector<int>> generateMatrix(int n) {vector<vector<int>> dirct {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};vector<vect…...

深入解析 JSON-RPC:从基础到高级应用(附调用示例)

在当今的软件开发领域&#xff0c;远程过程调用&#xff08;RPC&#xff09;技术是实现分布式系统间通信的关键手段之一。JSON-RPC&#xff0c;作为一种基于 JSON 数据格式的轻量级 RPC 协议&#xff0c;因其简洁性和高效性而备受青睐。本文将全面深入地探讨 JSON-RPC 的核心概…...

MAC环境给docker换源

2025-03-28 MAC环境给docker换源 在官网下载docker ,dmg 文件 参考&#xff1a; https://blog.csdn.net/qq_73162098/article/details/145014490 {"builder": {"gc": {"defaultKeepStorage": "20GB","enabled": true}},&q…...

Ollama及HuggingFace路径环境变量设置

日常经常用到这俩的一些环境变量&#xff0c;特记录下来&#xff0c;如有错误&#xff0c;还请指正。 1. Ollama路径环境变量设置 Ollama 模型路径变量名为OLLAMA_MODELS&#xff0c;设置示例&#xff1a; 变量名示例OLLAMA_MODELS C:\Users\Administrator\.ollama\models D…...

Redis | 基于 Redis 实现机器列表 Token 缓存的 Java 实现

关注&#xff1a;CodingTechWork 引言 在分布式系统中&#xff0c;Token 缓存是一种常见的需求。它可以帮助我们快速验证用户身份&#xff0c;减少对数据库的频繁访问&#xff0c;提高系统的性能和响应速度。本文将介绍如何使用 Redis 来实现机器列表的 Token 缓存&#xff0c…...