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

Vue.js前端开发零基础教学(二)

目录

前言

2.1 单文件组件

 2.2 数据绑定

 2.2.2 响应式数据绑定

2.3 指令 

2.3.1 内容渲染指令

2.3.2    属性绑定指令 

​编辑 2.3.3  事件绑定指令

 2.3.4    双向数据绑定指令

2.3.5    条件渲染指令 

2.3.6    列表渲染指令

 2.4 事件对象

 2.5 事件修饰符


学习目标:

掌握内容渲染指令

掌握数据绑定,能够定义数据并将数据渲染到页面中

 掌握列表渲染指令等

前言

在搭建好Vue开发环境后,要想使用Vue开发实际项目,必须先学习Vue基础知识。只有掌握Vue框架的基础知识后,才能根据实际需求游刃有余地进行项目开发。本章将详细讲解Vue开发基础。

2.1 单文件组件

概念:在第1章中使用Vite创建Vue项目后,目录结构中包含一些扩展名为.vue的文件,每个.vue文件都可用来定义一个单文件组件。 Vue中的单文件组件是Vue组件的文件格式。

每个单文件组件由模板、样式和逻辑3个部分构成。

(1)模板

模板用于搭建当前组件的DOM结构,其代码写在<template>标签中。

(2)样式

样式是指通过CSS代码为当前组件设置样式,其代码写在<style>标签中。

(3)逻辑 

逻辑是指通过JavaScript代码处理组件的数据与业务,其代码写在<script>标签中。

演示如何定义一个基本的单文件组件。

<template><!-- 此处编写组件的结构 -->
</template>
<script>
/* 此处编写组件的逻辑 */
</script>
<style>
/* 此处编写组件的样式 */
</style>

演示单文件组件的使用方法 

打开命令提示符,切换到D:\vue\chapter02目录,在该目录下执行如下命令,创建项目。

yarn create vite vue-demo --template vue

项目创建完成后,执行如下命令进入项目目录,启动项目

cd vue-demo
yarn
yarn dev

项目启动后,可以使用URL地址http://127.0.0.1:5173/进行访问。

使用VS Code编辑器打开D:\vue\chapter02\vue-demo目录

 

将src\style.css文件中的样式代码全部删除,从而避免项目创建时自带的样式代码影响本案例的实现效果。

创建src\components\Demo.vue文件,该文件是Demo组件示例:

<template><div class="demo">Demo组件</div>
</template>
<style>
.demo {font-size: 22px;font-weight: bold;
}
</style>

修改src\main.js文件,切换页面中显示的组件

import App from './components/Demo.vue'

 保存上述代码后,Demo组件的页面效果如下图所示。

 2.2 数据绑定

概念:Vue通过数据绑定实现了数据与页面相分离,从而实现了数据驱动视图的效果。即将页面中的数据分离出来,放到组件的<script>标签中,通过程序操作数据,并且当数据改变时,页面会自动发生改变。

数据绑定分为定义数据和输出数据

(1)定义数据

由于数据和页面是分离的,在实现数据显示之前,需要先在<script>标签中定义组件所需的数据。

语法格式如下:

<script>
export default {setup() {return {数据名: 数据值,……}}
}
</script>

为了让代码更简洁,Vue 3提供了setup语法糖(Syntactic Sugar),使用它可以简化上述语法,提高开发效率。

使用setup语法糖来定义数据的语法格式如下:

<script setup>
const 数据名 = 数据值
</script>

(2)输出数据

Vue为开发者提供了Mustache语法(又称为双大括号语法),将数据输出到页面中。

Vue为开发者提供了Mustache语法(又称为双大括号语法),使用该语法时相当于在模板中放入占位符,其语法格式如下。

{{ 数据名 }}

在Mustache语法中还可以将表达式的值作为输出内容。表达式的值可以是字符串、数字等类型,示例代码如下。

{{ 'Hello Vue.js' }}
{{ number + 1 }}
{{ obj.name }}
{{ ok ? 'YES' : 'NO' }}
{{ '<div>HTML标签</div>' }}

 演示数据绑定的实现

创建src\components\Demo.vue文件

<template>{{ message }}</template>
<script setup>
const message = '不积跬步,无以至千里'
</script>

修改src\main.js文件,切换页面中显示的组件。

import App from './components/Demo.vue'

 保存上述代码后,数据绑定的页面效果如下图所示。

其实Vue的使用方式非常灵活,它还提供了另一种使用方式,就是将Vue引入HTML页面中。但这种方式只能使用Vue的核心功能,所以只适合开发一些简单的页面,在实际开发中一般不用这种方式。

创建D:\vue\chapter02\helloworld.html文件,在该文件中通过<script>标签引入Vue。

<template>
<div>message的值:{{message}}</div>	
<div>obj.message的值:{{obj.message}}</div>	
</template><script setup>import {reactive,toRef} from "vue"const obj=reactive({message:'黑发不知勤学早'})const message=toRef(obj,'message')setTimeout(()=>{message.value='少壮不努力'},2000)
</script><style>
</style>

在页面中定义一个用于被Vue应用实例控制的DOM区域,使开发者可以将数据填充到该DOM区域中。

<div id="app"><p>{{ message }}</p>
</div>

运行结果:

 2.2.2 响应式数据绑定

概念:Vue为开发者提供了如下函数用于定义响应式数据。 ref()函数 reactive()函数 toRef()函数 toRefs()函数。

1. ref()函数

ref()函数用于将数据转换成响应式数据,其参数为数据,返回值为转换后的响应式数据。使用ref()函数定义响应式数据的语法格式如下。

响应式数据 = ref(数据)

 如果需要更改响应式数据的值,可以使用如下语法格式进行修改。

响应式数据.value = 新值

演示ref()函数的使用方法

<template>{{ message }}</template>
<script setup>
import { ref } from 'vue'
const message = ref('会当凌绝顶,一览众山小')
setTimeout(() => {message.value = '锲而不舍,金石可镂'
}, 2000)
</script>

修改src\main.js文件,切换页面中显示的组件。

import App from './components/Demo.vue'

 运行结果:

等待2秒后的页面效果如下图所示。

 2. reactive()函数

reactive()函数用于创建一个响应式对象或数组,将普通的对象或数组作为参数传给该函数即可。 使用reactive()函数定义响应式数据的语法格式如下。

响应式对象或数组 = reactive(普通的对象或数组)

创建src\components\Reactive.vue文件。

<template>{{ obj.message }}</template>
<script setup>
import { reactive } from 'vue'
const obj = reactive({ message: '不畏浮云遮望眼,自缘身在最高层' })
setTimeout(() => {obj.message = '欲穷千里目,更上一层楼'
}, 2000)
</script>

修改src\main.js文件,切换页面中显示的组件。

import App from './components/Reactive.vue'

 运行结果:

等待2秒后的页面效果如下图所示。

 3. toRef()函数

toRef()函数用于将响应式对象中的单个属性转换为响应式数据。 使用toRef()函数定义响应式数据的语法格式如下。

响应式数据 = toRef(响应式对象, '属性名')

演示toRef()函数的使用方法 

创建src\components\Demo.vue文件。

<template><div>message的值:{{ message }}</div><div>obj.message的值:{{ obj.message }}</div>
</template>
<script setup>
import { reactive, toRef } from 'vue'
const obj = reactive({ message: '黑发不知勤学早,白首方悔读书迟' })
const message = toRef(obj, 'message')
setTimeout(() => {message.value = '少壮不努力,老大徒伤悲'
}, 2000)
</script>

修改src\main.js文件,切换页面中显示的组件。

import App from './components/Demo.vue'

运行结果:

等待2秒后的页面效果如下图所示。

4. toRefs()函数

 toRefs()函数用于将响应式对象中的所有属性转换为响应式数据。 使用toRefs()函数定义响应式数据的语法格式如下。

所有属性组成的对象 = toRefs(响应式对象)

演示toRefs()函数的使用方法

创建src\components\Demo.vue文件。

<template><div>message的值:{{ message }}</div><div>obj.message的值:{{ obj.message }}</div>
</template>
<script setup>
import { reactive, toRefs } from 'vue'
const obj = reactive({ message: '盛年不重来,一日难再晨' })
let { message } = toRefs(obj)
setTimeout(() => {message.value = '及时当勉励,岁月不待人'
}, 2000)
</script>

修改src\main.js文件,切换页面中显示的组件。

import App from './components/Demo.vue'

运行效果:

等待2秒后的页面效果如下图所示。

2.3 指令 

2.3.1 内容渲染指令

内容渲染指令用于渲染DOM元素的内容。

常见的内容渲染指令,v-text  和  v-html

1. v-text

v-text用于渲染DOM元素的文本内容,如果文本内容中包含HTML标签,那么浏览器不会对其进行解析。v-text的语法格式如下。

<标签名 v-text="数据名"></标签名>

演示v-text的使用方法

创建src\components\Demo.vue文件。

<template><div v-text="message"></div>
</template>
<script setup>
const message = '<span>咬定青山不放松,立根原在破岩中</span>'
</script>

修改src\main.js文件,切换页面中显示的组件。

import App from './components/Demo.vue'

 运行结果:

 2. v-html

在使用Vue进行内容渲染时,如果内容中包含HTML标签并且希望这些标签被浏览器解析,则可以使用v-html。v-html用于渲染DOM元素的HTML内容,其用法与v-text相似。v-html的语法格式如下。

<标签名 v-html="数据名"></标签名>

创建src\components\Demo.vue文件。

<template><div v-html="html"></div>
</template>
<script setup>
const html = '<strong>千磨万击还坚劲,任尔东西南北风</strong>'
</script>

 修改src\main.js文件,切换页面中显示的组件。

import App from './components/Demo.vue'

运行结果:

2.3.2    属性绑定指令 

在Vue开发中,有时需要绑定DOM元素的属性,从而更好地控制属性的值,此时可以使用属性绑定指令v-bind来实现。v-bind的语法格式如下。

<标签名 v-bind:属性名="数据名"></标签名>

v-bind还支持将属性与字符串拼接表达式绑定,示例代码如下。

<div :id="'list' + index"></div>

演示v-bind的使用方法 

创建src\components\Demo.vue文件。

<template><p><input type="text" v-bind:placeholder="username"></p><p><input type="password" :placeholder="password"></p>
</template>
<script setup>
const username = '请输入用户名'
const password = '请输入密码'
</script>

  修改src\main.js文件,切换页面中显示的组件。

import App from './components/Demo.vue'

运行结果:

 2.3.3  事件绑定指令

在Vue开发中,有时需要给DOM元素绑定事件,从而利用事件实现交互效果,这时可以利用事件绑定指令v-on来实现。v-on的语法格式如下。

<标签名 v-on:事件名="事件处理器"></标签名>

 在上述语法格式中,事件名即DOM中的事件名,例如click、input、keyup等;事件处理器可以是方法名或内联JavaScript语句。如果逻辑复杂,事件处理器建议使用方法名,方法需要在<script>标签中定义;如果逻辑简单,只有一行代码,则可以使用内联JavaScript语句。另外,v-on还有简写形式,可以将“v-on:事件名”简写为“@事件名”。

演示v-on的使用方法

创建src\components\Dmeo文件。

<template><button @click="showInfo">输出信息</button>
</template>
<script setup>
const showInfo = () => {console.log('欢迎来到Vue.js的世界!')
}
</script>

 修改src\main.js文件,切换页面中显示的组件。

import App from './components/Demo.vue'

运行结果:

 2.3.4    双向数据绑定指令

Vue为开发者提供了v-model指令来实现双向数据绑定,使用它可以在input、textarea和select元素上创建双向数据绑定,它会根据使用的元素自动选取对应的属性和事件组合,负责监听用户的输入事件并更新数据。v-model的语法格式如下。

<标签名 v-model="数据名"></标签名>

v-model内部会为不同的元素绑定不同的属性和事件,具体如下。

textarea元素和text类型的input元素会绑定value属性和input事件。

checkbox类型的input元素和radio类型的input元素会绑定checked属性和change事件。

select元素会绑定value属性和change事件。 例如,使用v-model实现输入框的值与变量保持同步,示例代码如下。 

<input v-model="info">

为了方便对用户输入的内容进行处理,v-model提供了3个修饰符。v-model的修饰符如下表所示。

演示v-model的使用方法

创建src\components\Demo.vue文件

<template>请输入姓名:<input type="text" v-model="username"><div>姓名是:{{ username }}</div>
</template>
<script setup>
import { ref } from 'vue'
const username = ref('zhangsan')
</script>

  修改src\main.js文件,切换页面中显示的组件。

import App from './components/Demo.vue'

运行结果:

 在输入框中输入“xiaoming”,页面效果如下图所示。

演示.number修饰符的使用方法

在src\components\VModel.vue文件的<script>标签中添加代码,定义响应式数据n1和n2。

const n1 = ref(1)
const n2 = ref(2)

在src\components\Demo.vue文件的<template>标签中添加代码,通过v-model实现双向数据绑定。

<template>请输入用户名:<input type="text" v-model="username" /><div>您的名字是:{{username}}</div><input type="text" v-model.number="number1"/>+<input type="text" v-model.number="number2"/>={{number1+number2}}
</template>
<script setup>import{ref}from'vue';const username=ref('liu')const number1=ref(1)const number2=ref(2)</script>
<style>
</style>

运行结果: 

2.3.5    条件渲染指令 

在Vue中,当需要根据不同的判断结果显示不同的DOM元素时,可以通过条件渲染指令来实现。条件渲染指令可以辅助开发者按需控制DOM元素的显示与隐藏。 条件渲染指令 v-if 和v-show

1. v-if

v-if是根据布尔值切换元素的显示或隐藏状态,本质是通过操作DOM元素来切换显示状态。

当给定的值为true时,元素存在于DOM树中;

当给定的值为false时,元素从DOM树中移除。

v-if有两种使用方式。

 演示v-if的使用方法

创建src\components\Demo.vue文件

<template>小明的学习评定等级为:<p v-if="type === 'A'">优秀</p><p v-else-if="type === 'B'">良好</p><p v-else>差</p><button @click="type = 'A'">切换成优秀</button><button @click="type = 'B'">切换成良好</button><button @click="type = 'C'">切换成差</button>
</template>
<script setup>import { ref } from 'vue'
const type = ref('B')
</script>

 修改src\main.js文件,切换页面中显示的组件。

import App from './components/Demo.vue'

运行效果: 

2. v-show

v-show与v-if都用来决定某一个元素是否在页面上显示出来。 v-show的原理是通过为元素添加或移除display: none样式来实现元素的显示或隐藏。 当需要频繁切换某个元素的显示或隐藏时,使用v-show会更节省性能开销;而当只需要切换一次显示或隐藏时,使用v-if更合理。

演示v-show的使用方法

<template><p v-if="flag">通过v-if控制的元素</p><p v-show="flag">通过v-show控制的元素</p><button @click="flag = !flag">显示/隐藏</button>
</template>
<script setup>
import { ref } from 'vue'
const flag = ref(true)
</script>

修改src\main.js文件,切换页面中显示的组件。

import App from './components/Demo.vue'

运行效果:

2.3.6    列表渲染指令

在开发购物应用时,为了方便用户查找商品信息,通常会以商品列表的形式展示商品信息。在商品列表中,每件商品的结构都是相同的,如果每件商品的结构都要手动定义,会非常麻烦。为此,Vue提供了列表渲染指令v-for。开发者只需在模板中定义一件商品的结构,v-for便会根据开发者提供的数据自动渲染商品列表中所有的商品。

使用v-for(根据list数组中的元素)渲染列表后,当在list数组中删除一个元素后,index会发生变化,v-for会重新渲染列表,导致性能下降。

为了给v-for一个提示,以便它能跟踪每个节点的身份,从而对现有元素进行重用和重新排序,建议通过key属性为列表中的每一项提供具有唯一性的值,示例代码如下。

<div v-for="item in items" :key="item.id"></div>

创建src\components\ll.vue文件。

<template><div v-for="(item,index) in arr" :key="index">索引是:{{index}}  ----元素的内容是:{{item}}</div><div v-for="item in arr2" :key="item.id">id是:{{item.id}}  ---- 元素的内容:{{item.message}}</div><div v-for="(item,name) in obj" :key="name">属性名:{{name}} ---属性值是: {{value}}</div></template><script setup>import {reactive} from 'vue'const arr=reactive(['你好','学习新课程','学习vue.js']);const arr2=reactive([{id:1,message:'梅花'},{id:2,message:'玫瑰花'},{id:3,message:'西兰花'},{id:4,message:'没钱花'}]);const arr3=reactive({id: 11,name: '刘',gender: '女'})
</script><style>
</style>

 修改src\main.js文件,切换页面中显示的组件。

import App from './components/ll.vue'

运行效果: 

 2.4 事件对象

事件对象是在事件触发时产生的对象,该对象保存了事件触发时的相关信息。

事件对象有以下两种获取方式。

通过事件方法的参数获取事件对象

通过$event获取事件对象

1. 通过事件方法的参数获取事件对象

在v-on绑定的用于处理事件的方法中,可以接收到一个参数,这个参数就是事件对象,示例代码如下。

<template><button @click="greet">Greet</button>
</template>
<script setup>
const greet = event => console.log(event)
</script>

 修改src\main.js文件,切换页面中显示的组件。

import App from './components/Demo.vue'

运行结果:

 2. 通过$event获取事件对象

$event是Vue提供的内置变量,使用它可以获取事件对象,示例代码如下。

<template><button @click="change($event)">change</button>
</template>
<script setup>
const change = event => console.log(event)
</script>

 修改src\main.js文件,切换页面中显示的组件。

import App from './components/Demo.vue'

运行结果:

演示事件对象的使用方法

 创建src\components\Demo.vue文件。

<template><div>count的值为:{{ count }}</div><button @click="addCount">count+1</button>
</template>
<script setup>
import { ref } from 'vue'
const count = ref(1)
const addCount = event => {count.value++if (count.value % 2 === 0) { event.target.style.border = '3px dotted' } else { event.target.style.border = '3px solid' } }
</script>

 修改src\main.js文件,切换页面中显示的组件。

import App from './components/Demo.vue'

运行结果持续增加数字:

演示通过$event获取事件对象的方式

修改src\components\Demo.vue文件,编写addCountN()方法。

const addCountN = (n, event) => {count.value += nif (count.value % 2 === 0) {event.target.style.border = '3px dotted'} else {event.target.style.border = '3px solid'}
}

 页面结构代码,增加一个按钮。

<button @click="addCountN(3, $event)">count+n</button>

 2.5 事件修饰符

为了简化开发,Vue为开发者提供了事件修饰符,它可以与v-on配合使用,以便于对事件进行控制,让开发者更专注于逻辑。 事件修饰符用于修饰事件的行为,写在事件名称之后,多个事件修饰符可以串联使用。

通过事件修饰符可以实现的一些功能。

1. 阻止默认事件行为

 通过.prevent事件修饰符可以实现阻止默认事件行为的功能。例如,在单击<a>标签时页面会自动跳转,这就是<a>标签的默认事件行为。 在实际开发中,如果默认事件行为与事件发生冲突,可以使用.prevent事件修饰符阻止默认事件行为,示例代码如下。

<a href="test.html" v-on:click.prevent>阻止默认行为</a>

2. 阻止事件冒泡

 通过.stop事件修饰符可以实现阻止事件冒泡的功能,示例代码如下。

<template><button @click="addCount">Count+1</button><a href="../test03.html" v-on:click.prevent>默认阻止事件行为</a><div v-on:click="show('我是祖先元素事件')"><button @click="show('我是子元素的事件')">事件冒泡</button><button @click.stop="show('我是子元素的事件')">阻止事件冒泡</button></div></template><script setup>import {ref} from 'vue'
const show =message => console.log(message)
const count = ref(1);
const addCount = event =>{count.value++if(count.value%2 == 0){event.target.style.border = '3px dotted'}else{event.target.style.border = '3px solid'}
}
</script><style>
</style>

3. 事件捕获

 代码示例:

<template><div v-on:click.capture="show('我是父元素的事件')"><button v-on:click="show('我是子元素的事件')">事件捕获</button></div>
</template>
<script setup>
let show = message =>  console.log(message)
</script>

运行效果: 

4. 使事件只触发一次

 通过.once事件修饰符可以实现使事件只触发一次的功能。.once事件修饰符用于阻止事件的多次触发,让事件只触发一次,示例代码如下。

<template><button v-on:click.once ="show('我是当前元素的单击事件且只执行一次')">只执行一次</button>
</template>
<script setup>
let show = message => console.log(message)
</script>

运行效果:

5. 使DOM元素只有自身触发事件时才执行事件方法

 通过.self事件修饰符可以实现只有DOM元素自身触发事件时才执行事件方法的功能,示例代码如下。

代码:

<template><div v-on:click="show('我是祖先元素的事件')">祖先元素<div v-on:click.self="show('我是父元素的事件')">父元素<div v-on:click="show('我是子元素的事件')">子元素</div></div></div>
</template>
<script setup>
let show = message => console.log(message)
</script>

运行效果:

相关文章:

Vue.js前端开发零基础教学(二)

目录 前言 2.1 单文件组件 2.2 数据绑定 2.2.2 响应式数据绑定 2.3 指令 2.3.1 内容渲染指令 2.3.2 属性绑定指令 ​编辑 2.3.3 事件绑定指令 2.3.4 双向数据绑定指令 2.3.5 条件渲染指令 2.3.6 列表渲染指令 2.4 事件对象 2.5 事件修饰符 学习目标&am…...

Bert模型输出:last_hidden_state转换为pooler_output

1. BERT模型的输出 在BERT模型中&#xff0c;last_hidden_state和pooler_output是两个不同的输出。 (1) last_hidden_state: last_hidden_state是指BERT模型中最后一个隐藏层的隐藏状态。它是一个三维张量&#xff0c;其形状为[batch_size, sequence_length, hidden_size]。其…...

Docker Compose 基本语法

services 是顶级节点&#xff0c;也就是你要启动的服务全部放在这里。 MySOL就是我们预期中的一个服务。 mysql8:指的是我们这个服务叫 mysql8. image:我们这个服务里运行的是什么镜像&#xff0c;或者说跑的是什么。这里指定了使用 mysql:8.0.29 这个版本。 command:启动命令&…...

【算法集训】基础算法:贪心

1913. 两个数对之间的最大乘积差 void insertSort(int * a, int n) {for(int i 1; i < n; i) {int temp a[i];int j i - 1;while(j > 0 && temp < a[j]) {a[j 1] a[j];j--;}a[j 1] temp;} }int maxProductDifference(int* nums, int numsSize){insert…...

Centos7部署单节点MongoDB(V4.2.25)

&#x1f388; 作者&#xff1a;互联网-小啊宇 &#x1f388; 简介&#xff1a; CSDN 运维领域创作者、阿里云专家博主。目前从事 Kubernetes运维相关工作&#xff0c;擅长Linux系统运维、开源监控软件维护、Kubernetes容器技术、CI/CD持续集成、自动化运维、开源软件部署维护…...

隐私计算笔记(1)

一、可信流通体系 建立数据来源可确认、使用范围可界定、流通过程可追溯、安全风险可防范的数据可流通体系。 二、产生信任的基石 身份可确认利益可依赖能力有预期行为有后果 三、数据流通不可信风险 内循环&#xff1a;在内部循环中&#xff0c;数据持有方在其自身的运维…...

查询方法需要使用事务吗?

当数据库隔离级别是默认的可重复读&#xff08;Repeatable Read&#xff09;时&#xff0c;如果查询语句只有一条则不需要事务. 当有多条查询sql语句且需要确保多条sql语句处于同一时间维度时则需要使用事务来确保多条SQL语句处于同一时间节点. 相关知识点 mysql查询当前事务隔…...

剑指offer面试题40 数组中只出现一次的数字

考察点 异或运算&#xff0c;与运算知识点 题目 分析 本题目要求数组中只出现一次的俩个数字&#xff0c;并且要求O(1)时间复杂度和空间复杂度。试想一下如果只有一个数字出现一次&#xff0c;那么针对全部元素做异或运算就可以了&#xff0c;因为相同元素异或为0。现在有俩…...

gitLab server version 13.12.1 is not supported

拉代码的时候&#xff0c;报的这个错&#xff0c;实际上就是因为gitLab 版本太低了&#xff0c;这里不准备升级版本&#xff0c;打算继续使用账号密码来拉取代码 在idea已经安装的插件中&#xff0c;去掉gitlab插件&#xff0c;如下&#xff1a; 之后再拉取代码&#xff0c;就…...

如何在 iPhone 上使用蓝牙鼠标

iPhone 不支持使用传统的鼠标指针。 然而&#xff0c;有一个名为“AssistiveTouch”的功能可以在屏幕上模拟类似光标的指针。 启用它的方法如下&#xff1a; 打开 iPhone 上的“设置”应用程序。转到“辅助功能”。向下滚动并选择“触摸”。点击“辅助触控”。切换开关以打开 …...

matlab simulink 电力系统同步发电机励磁系统的建模与仿真

1、内容简介 略 77-可以交流、咨询、答疑 电力系统同步发电机励磁系统的建模与仿真 建立MATLAB的同步发电机励磁调节系统仿真模型&#xff0c;最后建立了以PID和PSS为励磁控制方式的同步发电机励磁调节系统数学模型&#xff0c;在Simulink环境下进行了仿真&#xff0c;收到…...

AI新工具(20240320) AI创作一首属于自己的音乐; 轻松制作具有透明背景的高质量图像

✨ 1: Suno AI创作一首属于自己的音乐 Suno是一个革命性的人工智能平台&#xff0c;专注于音乐创作。在通俗的语言中&#xff0c;Suno允许用户仅通过提供歌词&#xff0c;自动为其创作旋律和演唱&#xff0c;产生完整的音乐作品。使用Suno的过程简单直观&#xff0c;不需要用…...

IT服务ITIL4 认证:助力企业数字化转型的必杀技!

随着科技的不断展和企业竞争的加剧&#xff0c;如何实现数字化转型成为了当今企业面临的重要课题。而学习ITIL4认证&#xff0c;尤其是ITIL4中级&#xff0c;将为企业的数字化转型提供有力的支持和帮助。 ITIL4认证 ITIL&#xff08;Information Technology Infrastructure Li…...

微软聘请了谷歌DeepMind的联合创始人

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…...

JavaMySQL高级一(下)

目录 1.常用函数 1.字符串函数 2.时间日期函数 3.聚合函数 4.数学函数 2.分布查询 3.子查询基础 1.简单子查询 1.常用函数 在程序开发过程中&#xff0c;除了简单的数据查询&#xff0c;还有基于已数据进行数据的统计分析计算等需求。因此&#xff0c;在SQL中将一…...

HCIA复习

上面的文件里有思维导图哦~ 一、情景再现&#xff1a;ISP网络为学校提供了DNS服务&#xff0c;所以&#xff0c;DNS服务器驻留在ISP网络内&#xff0c;而不再学校网络内。DHCP服务器运行在学校网络的路由器上。 小明拿了一台电脑&#xff0c;通过网线&#xff0c;接入到校园网…...

5G里面NR,gNB,en-gNB,ng-eNB是什么意思

不得不提一个国际组织&#xff0c;叫国际电信联盟(ITU, International Telecommunication Union)&#xff0c;简称国际电联。我们先看看国际电联的自我介绍&#xff1a; 国际电信联盟 『国际电联 (国际电信联盟) 是主管信息通信技术事务&#xff08;ICT&#xff09;的联合国机…...

android 网络检测简单方法

如果连接的WiFi没有网络&#xff0c;无法通过简单的网络状态检查来判断其可用性。在这种情况下&#xff0c;你可以尝试使用以下方法来检测当前连接的WiFi是否可用&#xff1a; Ping测试&#xff1a;尝试通过向一个已知的可靠服务器发送Ping请求来检测连接的WiFi是否可用。如果…...

列表(list)篇(二)

文章目录 2.10 insert()函数2.11 list()函数2.12 pop() 函数2.13 remove()函数2.14 reverse()函数2.15 sort()函数2.16 sorted()函数2.17 sum()函数 2.10 insert()函数 在Python中&#xff0c;list.insert()是一个列表方法&#xff0c;用于在指定索引位置插入一个元素。这个方…...

Python的反射机制

本篇文章讨论Python中非常有趣且强大的概念——反射&#xff08;Reflection&#xff09;。想象一下&#xff0c;你正在编写一段代码&#xff0c;并希望这段代码能够具备自我认知和动态调整的能力。就好比一面镜子&#xff0c;能反映出它自身的属性和行为。在编程领域&#xff0…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

Angular微前端架构:Module Federation + ngx-build-plus (Webpack)

以下是一个完整的 Angular 微前端示例&#xff0c;其中使用的是 Module Federation 和 npx-build-plus 实现了主应用&#xff08;Shell&#xff09;与子应用&#xff08;Remote&#xff09;的集成。 &#x1f6e0;️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...

PAN/FPN

import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...

如何更改默认 Crontab 编辑器 ?

在 Linux 领域中&#xff0c;crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用&#xff0c;用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益&#xff0c;允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...

GitHub 趋势日报 (2025年06月06日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...

GO协程(Goroutine)问题总结

在使用Go语言来编写代码时&#xff0c;遇到的一些问题总结一下 [参考文档]&#xff1a;https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现&#xff1a; 今天在看到这个教程的时候&#xff0c;在自己的电…...

深入理解Optional:处理空指针异常

1. 使用Optional处理可能为空的集合 在Java开发中&#xff0c;集合判空是一个常见但容易出错的场景。传统方式虽然可行&#xff0c;但存在一些潜在问题&#xff1a; // 传统判空方式 if (!CollectionUtils.isEmpty(userInfoList)) {for (UserInfo userInfo : userInfoList) {…...

关于easyexcel动态下拉选问题处理

前些日子突然碰到一个问题&#xff0c;说是客户的导入文件模版想支持部分导入内容的下拉选&#xff0c;于是我就找了easyexcel官网寻找解决方案&#xff0c;并没有找到合适的方案&#xff0c;没办法只能自己动手并分享出来&#xff0c;针对Java生成Excel下拉菜单时因选项过多导…...

零知开源——STM32F103RBT6驱动 ICM20948 九轴传感器及 vofa + 上位机可视化教程

STM32F1 本教程使用零知标准板&#xff08;STM32F103RBT6&#xff09;通过I2C驱动ICM20948九轴传感器&#xff0c;实现姿态解算&#xff0c;并通过串口将数据实时发送至VOFA上位机进行3D可视化。代码基于开源库修改优化&#xff0c;适合嵌入式及物联网开发者。在基础驱动上新增…...

【堆垛策略】设计方法

堆垛策略的设计是积木堆叠系统的核心&#xff0c;直接影响堆叠的稳定性、效率和容错能力。以下是分层次的堆垛策略设计方法&#xff0c;涵盖基础规则、优化算法和容错机制&#xff1a; 1. 基础堆垛规则 (1) 物理稳定性优先 重心原则&#xff1a; 大尺寸/重量积木在下&#xf…...