Vue3基础知识(待续)

Vue是什么 

构用户界面的js的渐进式框架,基于htlm、css、js,并提供声明式组件化的编程模型,帮你高效开发用户界面。无论简单或复杂的界面Vue都可以胜任。

vue是一个框架,同时也是一个生态。因为有很多程序员支持vue,开发了很多如轮播图的东西就形成了一个生态。考虑到web世界的多样性,vue注重灵活性和可被逐步继承。可在一个完整项目中使用vue,或某一个功能上使用vue,或某一个html中使用vue的某个功能。

后期主要是一个完整的项目中使用Vue。

 vue分为vue2和vue3。vue3涵盖了vue2,vue3增加了很多新的特性。

官网:cn.vuejs.org   v2.cn.vuejs.org

Vue API风格

vue2和vue3新老版本的问题,代码书写风格不一样:选项式API(vue2)、组合式API(vue3)。

使用选项式API,我们可以用包含多个选项的对象来描述组件的逻辑,例如data 、methods 和(mounted。选项所定义的属性都会暴露在函数内部的this 上,它会指向当前的组件实例.

具体参见Vue2如Vue2基础入门_阳光明媚UPUP的博客-CSDN博客

通过组合式API,我们可以使用导入的API函数来描述组件逻辑。

组合式api如:

 这两种风格的api虽然写法完全不同,但是效果确实完全相同的。   

当你不需要使用构建工具,或者打算主要在低复杂度的场景中使用Vue,例如渐进增强的应用场景,推荐采用选项式API
当你打算用Vue构建完整的单页应用,推荐采用组合式API+单文件组件     

学习Vue前的准备

熟悉命令行

要求安装15.0或更高版本的nodejs  cmd下node -v检测 

nodejs简单了解

node.js:是一个开源的,跨平台的javaScript运行环境,简单来说它是一款应用程序,是一款软件,可运行javaScript。

nodejs可开发服务器端应用,nodejs就可在服务器中进行处理,将视频发给用户端。将资源返回给浏览器解析。nodejs就运行在服务器端,将用户的请求做处理,并把资源返回给浏览器。

nodejs可开发工具类应用如webpack、vite、babel,这三个工具可提高前端开发的效率和质量,都是借助于是借助于nodejs。

nodejs可以开发桌面端应用:vscoder、figma、postman,这三都借助于electron框架,electron又是借助于nodejs开发出来的。

nodejs下载安装

Node.js

选中LTS长期支持版下载

旧版本可在中文网站中全部按转包中CNPM Binaries Mirror



下载 | Node.js 中文网

下载.mis直接安装,途中不用勾选那个自动install的选框。

下载zip参考【转载】windows下Nodejs zip版下载安装及环境变量配置_nodezip版如何配置_AllTimeLow丶的博客-CSDN博客

创建Vue项目

进入空文件夹,上方cmd敲,会进入到该目录,然后 npm init vue@latest

D:\VueProject>npm init vue@latest

Vue.js - The Progressive JavaScript Framework

√ Project name: ... vue-base     起个项目名,不要有大写字母
√ Add TypeScript? ... No / Yes    //添加TS默认NO直接回车即可
√ Add JSX Support? ... No / Yes     
√ Add Vue Router for Single Page Application development? ... No / Yes    添加路由,先no
√ Add Pinia for state management? ... No / Yes   
√ Add Vitest for Unit Testing? ... No / Yes
√ Add an End-to-End Testing Solution? » No
√ Add ESLint for code quality? ... No / Yes

Scaffolding project in D:\VueProject\vue-base...    //全部no默认,然后回车即可。

Done. Now run:

  cd vue-base
  npm install
  npm run dev


D:\VueProject> 

然后执行它的提示代码即可:

先cd vue-base

然后执行cnpm install 也可安装cnpm后执行cnpm install

安装cnpm命令为npm install -g cnpm --registry=https://registry.npm.taobao.org

然后使用cnpm install

然后npm run dev运行项目  运行成功后复制地址到浏览器url输入访问即可。

也可使用vscoder打开一个空文件夹,然后ctrl+`在终端里敲上面的初始化代码等。 

开发环境

vscoder+volar扩展       

vscoder打开vue项目根目录 

由于App.vue是字体为灰色,我们在vsccoder左侧扩展里加上一个vue language feature volar

这时App.vue就有颜色了

Vue项目目录结构

.vscode  ---  vscode工具的配置文件
node_modules  --- Vue项目的运行依赖文件夹   执行npm install安装的就是它
public  ---  资源文件夹(浏览器图标)
src  ---  源码文件夹  进行编码的文件夹   写代码的文件夹
.gitignore  ---  git忽略文件
index.html  ---  入口的HTML文件
package.json  ---  信息描述文件   依赖vue3,开发环境dev详细依赖vite脚手架类似webpack
README. md  ---  注释文件
vite.config.js  --- vue配置文件  做配置,如跨域、打包

模板语法

基于html的模板语法,是我们能够声明式的将其组件实例的数据绑定到呈现的dom上,所有的vue模板都是语法层面合法的html,可被符合规范的浏览器和html解析器解析。

1.文本插值

最基本的数据绑定形式,采用双大括号mustache语法

我们可先删除vue项目src下的components目录下所有的东西,然后App.vue中只保留

  <script>  </script>  <template>  </template>   template和script上下顺序可颠倒,template建议放在script上面。

我们在App.vue中写入

  <template><h3>模板语法</h3><p>{{msg}}</p></template><script>export default{data(){return{msg:"神奇的语法"}}} </script>

重新运行终端npn run dev访问即可(后期保存自动更新页面)。发现还有样式剧中,样式在main.js中引入了资源文件夹assets文件夹下的main.css删除import语句即可。

assets为资源文件夹,日后公共css及实现都可放在这里,目前assets中资源直接删除掉即可。

2、使用js表达式

仅支持单一表达,即一个有结果的js表达式,可放在return语句中的。

不支持var,不支持for这种换行的表达式,可三元表达式。

  <template><h3>模板语法</h3><p>{{msg.split("").reverse().join("")}}</p><p>{{number+1}}</p><p>{{ok?'yes':'no'}}</p></template><script>export default{data(){return{msg:"神奇的语法",number:10,ok:true}}} </script>

 3、原始html

双大括号将会将数据插值为纯文本,而不是HTML。若想插入HTML,你需要使用vhtml指令

  <template><h3>模板语法</h3><p>{{url}}</p><p v-html="url"></p></template><script>export default{data(){return{url:"<a href='http://www.baidu.com'>百度</a>"}}} </script>

属性绑定

双大括号不能在HTML attributes 中使用。想要响应式地绑定一个attribute,应该使用v-bind指令。 

App.vue中改成引入组件文件夹中的HelloWorld.vue

<script setup>
import HelloWorld from './components/HelloWorld.vue'
</script>
<template><HelloWorld/>
</template>

src下components下的HelloWorld.vue 

<template><!-- v-bin:也可简写为:一个冒号 --><div v-bind:id="dynamicId" :class="msg" >测试</div><button :disabled="isButtonDisabled">button按钮</button><div v-bind="objectOfAttrs">一次性绑定多个属性</div>
</template>
<script>
export default{data(){return{msg:"active",//active为选中的意思dynamicId:"appId",dynamicTitle:null,//如果为null或undefined,那么该attribute将会从渲染的元素上移isButtonDisabled:false,//也可一次性绑定多个值objectOfAttrs:{id:"appId",class:"allClass"}}}
}
</script>

刷新网页即可。所有的标签的属性都可通过这个v-bind为其绑定vue的data值

条件渲染

在vue中,提供了条件渲染,这类似于JavaScript中的条件语句

v-if、v-else、v-else-if、v-show

先src的components文件夹下创建ifDemo.vue 

<template><h3>条件渲染</h3><div v-if="flag">你能看见我吗?</div><!-- v-if为假的时候显示 --><div v-else>那你还是看看我吧</div><div v-if="type === 'A'">A</div><div v-else-if="type==='B'">B</div><div v-else-if="type==='C'">C</div><div v-else>Not A/B/C</div><div v-show="flag">你能看见我吗?</div>
</template>
<script>
export default{data(){return{flag : true,type : "B"}}
}
</script>

在App.vue中引入:

<script setup>
import HelloWorld from './components/HelloWorld.vue'
import IfDemo from "./components/ifDemo.vue"
</script>
<template><HelloWorld /><IfDemo />
</template>

v-if是基于对标签的渲染与否,v-show是基于display属性设置为true或false。

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

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

列表渲染

我们可以使用v-for指令基于一个数组来渲染一个列表。v-or指令的值需要使用item in items 形式的特殊语法,其中items是源数据的数组,而item是迭代项的别名

src下的components中创建ListDemo.vue

<template><h3>列表渲染</h3><p v-for="item in names">{{item}}</p><p v-for="(item,index) in names">{{item}}--{{ index }}</p><!-- 使用in和使用of都一样 --><p v-for="item of names">{{item}}</p><p v-for="(item,index) of names">{{item}}--{{ index }}</p><hr/><!-- 对于复杂的json --><div v-for="item of results"><p>{{item.id}}</p><p>{{item.title}}</p><a :href="item.url">链接</a></div><!-- 对于一个对象也可遍历 --><div><p v-for="item in userInfo">{{ item }}</p><p v-for="(value,key,index) in userInfo">{{ value }}-{{ key }}--{{index}}</p></div>   
</template>
<script>export default{data(){return{names:["张三","李四","王二麻子"],//对于复杂的json数据results:[{"id":1,"title":"111hello你好","url":"http://www.baidu.com"},{"id":2,"title":"222hello你好","url":"http://www.baidu.com"},{"id":3,"title":"333hello你好","url":"http://www.baidu.com"}],//对于一个对象也可以遍历userInfo:{name:"张三",age:22,sex:"男"}}}}
</script>

App.vue中引入

<script setup>
import HelloWorld from './components/HelloWorld.vue'
import IfDemo from "./components/ifDemo.vue"
import ListDemo from "./components/ListDemo.vue"
</script>
<template><HelloWorld /><IfDemo /><ListDemo />
</template>

通过key管理状态

Vue默认按照"就地更新"的策略来更新通过v-for渲染的元素列表。当数据项的顺序改变时,Vue 不会随之移动DOM元素的顺序,而是就地更新每个元素,确保它们在原本指定的索引位置上渲染
为了给Vue一个提示,以便它可以跟踪每个节点的标识,从而重用和重新排序现有的元素,你需要为每个元素对应的块提供一个唯一的key attribute:

使用key可用节省开销。

src的component中创建KeyDemo.vue

<template>
<h3>key属性添加到v-for循环中</h3>
<p v-for="(item ,index) in names" :key="index">{{item}}</p>
<!-- 一般不推荐使用index作为key,一般使用result服务器返回的结果集中的id -->
<div v-for="item of result" :key="item.id">
<p>{{ item.name }}</p>
<a :href="url">链接</a>
</div>
</template>
<script>
export default{data(){return{names:["aaa","sss","ddd"],result:[{"id":1,"name":"aaa","url":"http://www.baidu.com"},{"id":2,"name":"bbb","url":"http://www.baidu.com"},{"id":3,"name":"ccc","url":"http://www.baidu.com"}]}}
}
</script>

App.vue中引入

<script setup>
import HelloWorld from './components/HelloWorld.vue'
import IfDemo from "./components/ifDemo.vue"
import ListDemo from "./components/ListDemo.vue"
import keyDemo from "./components/KeyDemo.vue"
</script>
<template><HelloWorld /><IfDemo /><ListDemo /><keyDemo />
</template>

事件处理

我们可以使用von指令(简写为 @)来监听DOM事件,并在事件触发时执行对应的JavaScript。用法:on:click="methodName”或@click="handler"
事件处理器的值可以是
内联事件处理器:事件被触发时执行的内联JavaScript语句(与onclick类似)

方法事件处理器:一个指向组件上定义的方法的属性名或是路径

事件参数

事件参数可以获取event对象和通过事件传递数据

事件修饰符

在处理事件时调用event.preventDefault(或event stopPropagation()是很常见的。尽管我们可以直接在方法内调用,但如果方法能更专注于数据逻辑而不用去处理DOM事件的细节会更好
为解决这一问题,Vue为v-on提供了事件修饰符,常用有以下几个:
.stop   阻止事件冒泡
.prevent    阻止默认事件
.once4     事件只会被触发一次
.enter   回车按键触发的

具体参考
地址:https://cn.vuejs.org/guide/essentials/event-handling.html#event-modifiers

demo如下

src下的component创建EventDemo.vue

<template>
<h3>事件处理</h3>
<!-- 内联事件处理器 -->
<button v-on:click="count++">(内联处理器)Add</button>
<p>{{ count }}</p>
<!-- 方法事件处理器 -->
<button @click="addNum">addNum</button>
<button @dblclick="addNum">addNum</button>
<p>{{ number }}</p>
<!-- 事件参数,传递event对象 -->
<button @click="addNum2">addNum222</button>
<p>{{ number }}</p>
<!-- 事件参数,传递事件参数 -->
<button @click="addNum3('hello')" >Add333</button>
<p>{{ number }}</p>
<p @click="getNamesHandler(item)" v-for="(item,index) of names" :key="index">{{ item }}</p>
<p @click="getNamesHandler2(item,$event)" v-for="(item,index) of names" :key="index">{{ item }}</p>
<!-- 阻止默认事件1,在click的方法中调用e.preventDefault(); -->
<a @click="clickHandle" href="http://www.baidu.com">百度链接</a><br/>
<!-- 阻止默认事件2,直接写-->
<a @click.prevent="clickHandle2" href="http://www.baidu.com">百度链接</a>
<!-- 阻止事件冒泡:事件冒泡就是如下 -->
<div @click="clickDiv">
<p @click="clickP">测试事件冒泡</p>
<!-- 还可通过.stop进阻止事件冒泡 -->
<p @click.stop="clickP">测试事件冒泡</p>
</div>
</template>
<script>
export default{data(){return{ count:0,number:0,names:["aaa","bbb","ccc"]}},methods:{addNum(){this.number++;},addNum2(e){console.log(e),e.target.innerHTML = "Add222"+this.numberthis.number++;},addNum3(msg){console.log(msg),this.number++;},getNamesHandler(item){console.log(item)},getNamesHandler2(item,e){console.log(e)console.log(item)},clickHandle(e){e.preventDefault();//这点击该a超链接标签后,就不会默认的跳转url事件了。console.log("点击了")},clickHandle2(){console.log("点击了")},clickDiv(){console.log("DIV");},clickP(e){//e.stopPropagation();//如果不加这个,就会出现事件冒泡,点击p中的测试事件冒泡clickP,会将div父标签的clickDiv也会执行。console.log("P");}}
}
</script>

App.vue中加上

<script setup>
import HelloWorld from './components/HelloWorld.vue'
import IfDemo from "./components/ifDemo.vue"
import ListDemo from "./components/ListDemo.vue"
import keyDemo from "./components/KeyDemo.vue"
import EventDemo from "./components/EventDemo.vue"
</script>
<template><HelloWorld /><IfDemo /><ListDemo /><keyDemo /><EventDemo />
</template>

数组变化的侦测

1变更方法:Vue能够侦听响应式数组的变更方法,并在它们被调用时触发相关的更新。这些变更方法包括:push()、pop()、shift()、unshift()、splice()、sort()、reverse()

2、替换一个数组
变更方法,顾名思义,就是会对调用它们的原数组进行变更。相对地,也有一些不可变
(immutable)方法,例如fiter),concat)和islice(),这些都不会更改原数组,而总是返回一个新数组。当遇到的是非变更方法时,我们需要将旧的数组替换为新的数组。

src下的components中创建ArraysDemo.vue

<template>
<h3>数组变化侦听</h3>
<button @click="addListHandle">添加数组</button>
<ul><li v-for="(item,index) of names" :key="index">{{ item }}</li>
</ul>
<button @click="concatHandle">合并数组</button>
<h3>数组1</h3>
<p v-for="(item ,index) of nums1" :key="index">{{ item }}</p>
<h3>数组2</h3>
<p v-for="(item ,index) of nums2" :key="index">{{ item }}</p>
</template>
<script>
export default{data(){return{names:["aaa","bbb","ccc"],nums1:[1,2,3,4,5],nums2:[6,7,8,9,10]}},methods:{addListHandle(){//引起ui自动更新//this.names.push("ddd")//不会引起ui自动更新this.names = this.names.concat(["ddd"])},concatHandle(){this.nums1 = this.nums1.concat(this.nums2)}}
}
</script>

App.vue中引入

<script setup>
import HelloWorld from './components/HelloWorld.vue'
import IfDemo from "./components/ifDemo.vue"
import ListDemo from "./components/ListDemo.vue"
import keyDemo from "./components/KeyDemo.vue"
import EventDemo from "./components/EventDemo.vue"
import ArrayDemo from "./components/ArrayDemo.vue"
</script>
<template><HelloWorld /><IfDemo /><ListDemo /><keyDemo /><EventDemo /><ArrayDemo />
</template>

计算属性

模板中的表达式虽然方便,但也只能用来做简单的操作。如果在模板中写太多逻辑,会让模板变得臃肿,难以维护。因此我们推荐使用计算属性来描述依赖响应式状态的复杂逻辑。

src下的components中新建ComputedDemo.vue文件 

<template>
<h3>{{ user.name}}</h3>
<p>{{ user.hobbies.length>0? 'yes':'no' }}</p>
<!-- 双花括号直接引用计算属性,不用加括号 -->
<p>{{ userContent }}</p>
<!-- 会使用传统的双花括号引一个函数,要加括号 -->
<p>{{ userContents() }}</p>
<p></p>
</template>
<script>
export default{data(){return{user:{name:"aaa",hobbies:["h111","h222","h333"]}}},computed:{//计算属性,用的时候直接写名,不用加括号userContent(){return this.user.hobbies.length >0 ? 'Yes':'No'}},methods:{userContents(){//函数,用加括号return this.user.hobbies.length >0 ? 'Yes':'No'}}
}
</script>

App.vue中引入

<script setup>
import HelloWorld from './components/HelloWorld.vue'
import IfDemo from "./components/ifDemo.vue"
import ListDemo from "./components/ListDemo.vue"
import keyDemo from "./components/KeyDemo.vue"
import EventDemo from "./components/EventDemo.vue"
import ArrayDemo from "./components/ArrayDemo.vue"
import computedDemo from "./components/computedDemo.vue"
</script>
<template><HelloWorld /><IfDemo /><ListDemo /><keyDemo /><EventDemo /><ArrayDemo /><computedDemo/>
</template>

计算属性缓存vs方法
你可能注意到我们在表达式中像这样调用一个函数也会获得和计算属性相同的结果:

计算属性:计算属性值会基于其响应式依赖被缓存。一个计算属性仅会在其响应式依赖更新时才重新计算

方法:方法调用总是会在重渲染发生时再次执行函数

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

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

相关文章

2023年第四届“华数杯”数学建模思路 - 案例:退火算法

## 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 退火算法原理 1.1 物理背景 在热力学上&#xff0c;退火&#xff08;annealing&#xff09;现象指物体逐渐降温的物理现象&#xff0c;温度愈低&#…

Git基础知识:常见功能和命令行

文章目录 1.Git介绍2.安装配置2.1 查看配置信息 3.文件管理3.1 创建仓库3.2 版本回退3.3 工作流程3.4 撤销修改3.5 删除文件 4.远程仓库4.1 连接远程库4.2 本地上传至远程4.3 从远程库克隆到本地 5.分支管理5.1 创建分支5.2 删除分支5.3 合并分支解决冲突 参考&#xff1a; Git…

《Kali渗透基础》12. 无线渗透(二)

kali渗透 1&#xff1a;无线协议栈1.1&#xff1a;ifconfig1.2&#xff1a;iwconfig1.3&#xff1a;iw1.4&#xff1a;iwlist 2&#xff1a;无线网卡配置2.1&#xff1a;查看无线网卡2.2&#xff1a;查看信道频率2.3&#xff1a;扫描附近 AP2.4&#xff1a;侦听接口添加与删除 …

键入网址到网页显示,期间发生了什么

HTTP 浏览器做的第一步工作是解析URL 首先浏览器做的第一步工作就是要对URL进行解析&#xff0c;从而生成发送给 web 服务器的请求信息。 所以图中长长的URL实际上是请求服务器里的文件资源。 如果图中的蓝色部分URL元素省略了&#xff0c;那应该请求哪个文件呢&#xff1f; 当…

ARM裸机-12(GPIO和LED)

1、点亮LED 1.1、硬件工作原理及原理图查阅 1.1.1、LED物理特性 LED本身有2个接线点&#xff0c;一个是LED的正极&#xff0c;一个是LED的负极。LED这个硬件的功能就是点亮或者不亮&#xff0c;物理上想要点亮一颗LED只需要给他的正负极上加正电压即可&#xff0c;要熄灭一颗…

智能化RFID耳机装配系统:提升效率、精准追踪与优化管理

智能化RFID耳机装配系统&#xff1a;提升效率、精准追踪与优化管理 在当今的智能化时代&#xff0c;无线射频识别技术&#xff08;RFID&#xff09;被广泛应用于各个行业。本文将介绍一种基于RFID技术的智能耳机装配案例&#xff0c;通过RFID技术实现耳机装配过程的自动化控制…

vue 新学习 04 css样式绑定,渲染,key的重要意义

之前的html文件如何去绑定css样式&#xff1f; 01.首先在html文件中&#xff0c;在<head>标签中&#xff0c;用<style>中去写样式&#xff0c;通过html标签(每一个标签都有这样子的属性)中的class或者是id属性来完成<style>中的描绘的样式的用。 例子&#x…

【计算机网络】NAT及Bridge介绍

OSI七层模型 七层模型介绍及举例 为通过网络将人类可读信息通过网络从一台设备传输到另一台设备&#xff0c;必须在发送设备沿 OSI 模型的七层结构向下传输数据&#xff0c;然后在接收端沿七层结构向上传输数据。 数据在 OSI 模型中如何流动 库珀先生想给帕尔梅女士发一封电…

回归预测 | MATLAB实现SO-CNN-GRU蛇群算法优化卷积门控循环单元多输入单输出回归预测

回归预测 | MATLAB实现SO-CNN-GRU蛇群算法优化卷积门控循环单元多输入单输出回归预测 目录 回归预测 | MATLAB实现SO-CNN-GRU蛇群算法优化卷积门控循环单元多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 MATLAB实现SO-CNN-GRU蛇群算法优化卷积门控循…

操作系统启动后网络还需要比较慢的时间才启动(差不多二分钟)

环境 linux 4.14.61 systemd version 247.3 问题 启动时发现网络其实很快就起来了&#xff0c;但是mqtt和docker启动的很慢&#xff0c;导致相关依赖启动很慢。 问题分析 实际通过systemctl list-units发现systemd-networkd-wait-online启动失败 而且从字面上看也有延时…

图解TCP 三次握手和四次挥手的高频面试题(2023最新版)

大家好&#xff0c;最近重新整理了一版 TCP 三次握手和四次挥手的面试题&#xff08;2023最新版&#xff09;。 ----- 任 TCP 虐我千百遍&#xff0c;我仍待 TCP 如初恋。 巨巨巨巨长的提纲&#xff0c;发车&#xff01;发车&#xff01; img TCP 基本认识 TCP 头格式有哪些…

【Selenimu+AutoIT】非input标签上传文件(带参数)

工具下载 非input标签上传文件&#xff0c;就需要借助第三方工具&#xff0c;如AutoIT。 AutoIT下载 安装步骤略 使用 1.打开Auto Window Info 找到这个打开 拖住红框里面的标到需要定位的地方记录下来 2.打开SciTE Script Editor 打开后&#xff0c;修改为UTF-8&am…

统信UOS安装mysql数据库(mariadb)-统信UOS安装JDK-统信UOS安装nginx(附安装包)

统信UOS离线全套安装教程&#xff08;手把手教程&#xff09; 银河麒麟的各种离线全套安装教程&#xff1a; https://blog.csdn.net/ACCPluzhiqi/article/details/131988147 1.统信UOS桌面系统安装mysql&#xff08;mariadb&#xff09; 2.统信UOS桌面系统安装JDK 3.统信UOS桌…

【iOS】App仿写--天气预报

文章目录 前言一、首页二、搜索界面三、添加界面四、浏览界面总结 前言 最近完成了暑假的最后一个任务——天气预报&#xff0c;特此记录博客总结。根据iPhone中天气App的功能大致可以将仿写的App分为四个界面——首页&#xff0c;搜索界面&#xff0c;添加界面&#xff0c;浏…

【NLP概念源和流】 04-过度到RNN(第 4/20 部分)

接上文 【NLP概念源和流】 03-基于计数的嵌入,GloVe(第 3/20 部分) 一、说明 词嵌入使许多NLP任务有了显著的改进。它对单词原理图的理解以及将不同长度的文本表示为固定向量的能力使其在许多复杂的NLP任务中非常受欢迎。大多数机器学习算法可以直接应用于分类和回归任务的…

【vue】 vue2 监听滚动条滚动事件

代码 直接上代码&#xff0c;vue单文件 index.vue <template><div class"content" scroll"onScroll"><p>内容</p><p>内容</p><p>内容</p><p>内容</p><p>内容</p><p>内容…

PyTorch - GPU入门教程1

1. 安装GPU版本的PyTorch 登录PyTorch官网https://pytorch.org/&#xff0c;下载对应CUDA版本的PyTorch【不能直接pip install&#xff0c;否则安装上的是CPU版本的】 2. 查看GPU信息 &#xff08;1&#xff09;重要信息 !nvidia-smi我的GPU版本很垃圾&#xff0c;本blog仅…

COMSOL三维多孔介质3D多相材料颗粒夹杂复合材料达西渗流模拟

在实际工程中渗流路径往往不是单一材料&#xff0c;如渗流发生在夹杂碎石的土体中&#xff0c;这就造成渗流的复杂性。这里采用两项材料通过COMSOL达西定律模块对渗流进行模拟。 模型采用CAD随机球体颗粒&过渡区插件建立后导入到COMSOL软件内。 模型包括渗流发生的外侧基…

SOP/详解*和**/python数据结构(iter,list,tuple,dict)/ 解包

一、错误解决合集 1. > combined_seq.named_children() 2. isinstance 2th parameter : must be a type or tuple of types > 改为tuple&#xff0c;不要用列表。改为 LLLayer (nn.Conv2d,nn.Linear) 3. File “test.py”, line 90, in calculate_fin_fout print(“hi”…

非线性弹簧摆的仿真(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…