Vue3+element-plus摘要
1.如果自己电脑vue版本是vue2版本,下面将详细介绍如何在vue2版本基础上继续安装
vue3版本且不会影响vue2版本的使用
1-1 在c盘或者别的盘建一个文件夹vue3
1-2 在这个文件夹里使用WIN+R 打开终端 输入命令 npm install @vue/cli 安装完即可
1-3 然后进入此文件夹中的node_modules中的.bin文件夹中,修改里面文件如下:
vue修改为vue3, vue.cmd修改为vue3.cmd
1-4 然后把vue3.cmd拖拽到命令窗口中加上-v即可看到版本号 如下图所示

1-5 接下来就是配置环境变量
1-5-1 打开电脑系统属性-高级-环境变量

1-5-2 点击系统变量下方的新建 配置新的变量
变量名:vue3_cli 变量值:"C:\vue3\node_modules\.bin"(根据自己位置就行)
1-5-3 点击变量中的path 点击编辑 完了把新增 把%vue_cli3%


1-5-5 如果是建vue3项目的话 具体命令是 vue3 create demo_project,然后根据具体内容去选择
2.element-plus新增组件库
2-1 Text 基本用法 具体代码如下(可以直接新建完项目以后粘贴验证):
<template><div class="div_container"><h3>Text 基本用法</h3><el-text class="mr-5">Default</el-text><el-text class="mr-5" type="primary">Primary</el-text><el-text class="mr-5" type="success">Success</el-text><el-text class="mr-5" type="info">Info</el-text><el-text class="mr-5" type="warning">Warning</el-text><el-text class="mr-5" type="danger">Danger</el-text><h3>Text 尺寸</h3><el-text class="mr-5" size="large">Large</el-text><el-text class="mr-5">Default</el-text><el-text class="mr-5" size="small">Small</el-text><h3 style="margin-bottom: 10px">Text 省略</h3><div style="margin-bottom: 10px">通过 truncated 属性,在文本超过视图或最大宽度设置时展示省略符。 通过line-clamp 属性控制多行的样式</div><div><el-text class="w-150px mb-2" truncated>Self element set width 100px</el-text><el-row class="w-150px mb-2"><el-text truncated>Squeezed by parent element</el-text></el-row><el-text line-clamp="2">The -webkit-line-clamp CSS property<br />allows limiting of the contents of<br />a block to the specified number of lines.</el-text></div><h3>Text 覆盖</h3><el-space direction="vertical"><el-text>span</el-text><el-text tag="p">This is a paragraph.</el-text><el-text tag="b">Bold</el-text><el-text tag="i">Italic</el-text><el-text>This is<el-text tag="sub" size="small">subscript</el-text></el-text><el-text>This is<el-text tag="sup" size="small">superscript</el-text></el-text><el-text tag="ins">Inserted</el-text><el-text tag="del">Deleted</el-text><el-text tag="mark">Marked</el-text></el-space></div>
</template><script setup>
import "@element-plus/icons-vue";
</script>
<style scoped>
.div_container {
}
.mr-5 {margin-right: 5px;
}
.w-150px {width: 150px;
}
.mb-2 {margin-bottom: 2px;
}
</style>
2-2 TreeSelect 树形选择
<template><h3>TreeSelect 树形选择 选择任意级别</h3><div style="color: lightseagreen">(注意:当属性 check-strictly=true时,任何节点都可以被选择,否则只有子节点可被选择。)</div><div class="node_css mt_15"><el-tree-selectv-model="value":data="data":check-strictly="checkStrictly":render-after-expand="false"style="width: 240px"/><div class="mt_15">show checkbox(only click checkbox to select):<el-tree-selectv-model="value2":data="data":check-strictly="checkStrictly":render-after-expand="false"show-checkboxstyle="width: 240px"/></div><div class="mt_15">show checkbox with `check-on-click-node`:<el-tree-selectv-model="value3":data="data":check-strictly="checkStrictly":render-after-expand="false"show-checkboxcheck-on-click-nodestyle="width: 240px"/></div></div><div style="display: flex; flex-direction: row"><div style="flex: 5"><el-watermark:width="130":height="30"image="https://element-plus.org/images/element-plus-logo.svg"><div style="height: 500px" /></el-watermark></div><div style="flex: 5"><el-watermark:font="font":content="['Element+', 'Element Plus']":width="130":height="40"><div style="height: 500px" /></el-watermark></div></div>
</template><script setup>
import { ref, reactive, toRaw, onMounted } from "vue";
const value = ref();
const value2 = ref();
const value3 = ref();
const checkStrictly = ref(false);
const demolist = reactive({list: [{title: "一般",// icon: h(Home),name: "home",value: "0",},{title: "还好",// icon: h(Category),name: "category",value: "0",},{title: "很好",// icon: h(Find),name: "find",value: "0",},{title: "最爱",// icon: h(Cart),name: "cart",value: "0",},{title: "改进",// icon: h(My),name: "my",value: "0",},],
});
const data = [{value: "1",label: "Level one 1",children: [{value: "1-1",label: "Level two 1-1",children: [{value: "1-1-1",label: "Level three 1-1-1",},],},],},{value: "2",label: "Level one 2",children: [{value: "2-1",label: "Level two 2-1",children: [{value: "2-1-1",label: "Level three 2-1-1",},],},{value: "2-2",label: "Level two 2-2",children: [{value: "2-2-1",label: "Level three 2-2-1",},],},],},{value: "3",label: "Level one 3",children: [{value: "3-1",label: "Level two 3-1",children: [{value: "3-1-1",label: "Level three 3-1-1",},],},{value: "3-2",label: "Level two 3-2",children: [{value: "3-2-1",label: "Level three 3-2-1",},],},],},
];
onMounted(() => {console.log(demolist, "demolist");console.log(toRaw(demolist));// console.log(JSON.parse(JSON.stringify(demolist)));
});
</script>
<style scoped>
.mt_15 {margin-top: 15px;
}
.node_css {display: flex;flex-direction: column;
}
</style>
3.vue3新增属性-setup使用俩种方式
3-1 第一种方式 标签以外写 setup 函数,需要显式导入 defineComponent,但上下文指向组件实例,可以使用传统的生命周期钩子和直接访问组件的属性和方法。
3-2 第二种方式 语法更简洁,但上下文不指向组件实例。
<script setup>import {onMounted, ref} from 'vue';const value=ref();const showFlag=ref(false);const handleClick=()=>{};onMounted(()=>{ console.log(showFlag)})
</script>
4.vue3已废除$set向对象中添加响应式的属性 以下是常用的集中方法
4-1 使用ES6属性 Reflect
<script setup>import { ref, reactive, toRaw, onMounted } from "vue";const demolist = reactive({list: [{title: "一般",// icon: h(Home),name: "home",value: "0",},{title: "还好",// icon: h(Category),name: "category",value: "0",},{title: "很好",// icon: h(Find),name: "find",value: "0",},{title: "最爱",// icon: h(Cart),name: "cart",value: "0",},{title: "改进",// icon: h(My),name: "my",value: "0",},],}); const inpChange = () => {for (var e = 0; e < toRaw(demolist.list).length; e++) {Reflect.set(toRaw(demolist.list)[e], "index", e + 1);}console.log(toRaw(demolist), "demolist");}
</script>
4-2 使用vue3响应式
<script setup>import { ref, reactive, toRaw, onMounted } from "vue";const demolist = reactive({list: [{title: "一般",// icon: h(Home),name: "home",value: "0",},{title: "还好",// icon: h(Category),name: "category",value: "0",},{title: "很好",// icon: h(Find),name: "find",value: "0",},{title: "最爱",// icon: h(Cart),name: "cart",value: "0",},{title: "改进",// icon: h(My),name: "my",value: "0",},],}); const inpChange = () => {for (var e = 0; e < toRaw(demolist.list).length; e++) {toRaw(demolist.list)[e].index = e + 1;}console.log(toRaw(demolist), "demolist");}
</script>
效果图如下:

4-3 上述俩种是有一定规律添加 如果是特定的添加 用以下这种方法
<script setup>import { ref, reactive, toRaw, onMounted } from "vue";const demolist = reactive({list: [{title: "一般",// icon: h(Home),name: "home",value: "0",},{title: "还好",// icon: h(Category),name: "category",value: "0",},{title: "很好",// icon: h(Find),name: "find",value: "0",},{title: "最爱",// icon: h(Cart),name: "cart",value: "0",},{title: "改进",// icon: h(My),name: "my",value: "0",},],}); const inpChange = () => {for (var e = 0; e < toRaw(demolist.list).length; e++) {if (e % 2 == 0) {console.log(toRaw(demolist.list[e]),"toRaw(demolist.list[e] %2===0";toRaw(demolist.list)[e].index = e + 1;} else {console.log(toRaw(demolist.list[e]),"toRaw(demolist.list[e] %2!==0");toRaw(demolist.list)[e].index = e + 2;}}console.log(toRaw(demolist), "demolist");}
</script>
效果图如下:

4-4 vue3写法归总 持续更新中......
1.获取输入框 下拉框的值 使用.value去拿2.但是如果你这个属性是还包了一层 reactive 那么你就这样就代理了 打印出的值是包在了Proxy里想要获取值有俩种方式:第一种是vue自带的 toRaw(objectTarget) 第二种是序列化使用 JSON.parse(JSON.stringfy(objectTarget))
5.vue3七种传值方式
5-1 Props方式
父组件代码
<template><child-components :list="list"></child-components><div><input v-model="value" type="text" placeholder="请输入"/><button @click="handleAdd" type="button">添加</button></div>
</template>
<script setup>
import { ref } from 'vue'
import ChildComponents from './child.vue'
const list = ref(['JavaScript', 'HTML', 'CSS'])
const value= ref('')
// add 触发后的事件处理函数
const handleAdd = () => list.value.push(value.value)
</script>子组件代码(子组件只需要对父组件传递的值进行渲染即可)
<template><ul ><li v-for="i in props.list" :key="i">{{ i }}</li></ul>
</template>
<script setup>
import { defineProps } from 'vue'
const props = defineProps({list: {type: Array,default: () => [],},
})
</script>
效果图如下:


5-2 emit方式 (emit方式也是Vue中最常见的组件通信方式,该方式用于子传父) 效果图如上所述 就不展示了
父组件 在父组件中只需要监听子组件自定义的事件,然后执行对应的添加操作。
<template><h8>我是父组件</h8><ul><li v-for="i in list" :key="i">{{ i }}</li></ul><child-components @add="handleAdd"></child-components>
</template>
<script setup>
import { ref } from "vue";
import ChildComponents from "./MainPage.vue";
const list = ref(["JavaScript", "HTML", "CSS"]);
// add 触发后的事件处理函数
const handleAdd = (value) => {list.value.push(value);
};
</script>子组件 在子组件中点击【添加】按钮后,emit一个自定义事件,并将添加的值作为参数传递。
<template><h8>我是子组件</h8><div><input v-model="value" type="text" placeholder="请输入" /><button @click="handleSubmit" type="button">添加</button></div>
</template>
<script setup>
import { ref, defineEmits } from "vue";
const value = ref("");
const emits = defineEmits(["add"]);
const handleSubmit = () => {emits("add", value.value);value.value = "";
};
</script>
5-3 v-model 是vue3 比较出色的语法糖 将会着重讲
5-3-1 单独传值如下:
父组件
<template><h8>我是父组件</h8><ul><li v-for="i in list" :key="i">{{ i }}</li></ul><child-components v-model:list="list"></child-components>
</template>
<script setup>
import { ref } from "vue";
import ChildComponents from "./MainPage.vue";
const list = ref(["JavaScript", "HTML", "CSS"]);
</script>子组件
<template><h8>我是子组件</h8><div><input v-model="value" type="text" placeholder="请输入" /><button @click="handleAdd" type="button">添加</button></div>
</template>
<script setup>
import { ref, defineEmits, defineProps } from "vue";
const value = ref("");
const props = defineProps({list: {type: Array,default: () => [],},
});
const emits = defineEmits(["update:list"]);
// 添加操作
const handleAdd = () => {const arr = props.list;arr.push(value.value);emits("update:list", arr);value.value = "";
};
</script>
5-3-2 多个传值情况写法如下:
特别需要注意俩点:1.在父组件中 绑俩个v-model<child-components v-model:list="list" v-model:listCopy='listCopy'></child-components>2.在子组件中 const emits = defineEmits(["update:list","update:listCopy"]);
父组件
<template><h4>我是父组件</h4><ul><li v-for="i in list" :key="i">{{ i }}</li></ul><h4>我是父组件Copy</h4><ul><li v-for="i in listCopy" :key="i">{{ i }}</li></ul><child-components v-model:list="list" v-model:listCopy='listCopy'></child-components>
</template>
<script setup>
import { ref } from "vue";
import ChildComponents from "./MainPage.vue";
const list = ref(["JavaScript", "HTML", "CSS"]);
const list = ref(["JavaScriptCopy", "HTMLCopy", "CSSCopy"]);
</script>子组件
<template><h4>我是子组件</h4><div><input v-model="value" type="text" placeholder="请输入" /><button @click="handleAdd" type="button">添加</button></div><h4>我是子组件Copy</h4><div><input v-model="valueCopy" type="text" placeholder="请输入" /><button @click="handleAddCopy" type="button">添加</button></div>
</template>
<script setup>
import { ref, defineEmits, defineProps } from "vue";
const value = ref("");
const valueCopy = ref("");
const props = defineProps({list: {type: Array,default: () => [],},listCopy: {type: Array,default: () => [],},
});
const emits = defineEmits(["update:list","update:listCopy"]);
// 添加操作
const handleAdd = () => {const arr = props.list;arr.push(value.value);emits("update:list", arr);value.value = "";
};
const handleAddCopy = () => {const arr = props.listCopy;arr.push(valueCopy.value);emits("update:listCopy", arr);valueCopy.value = "";
};
</script>


5-4 refs
在使用选项式API时,我们可以通过this.$refs.name的方式获取指定元素或者组件,但是组合式API中就无法使用哪种方式获取。如果我们想要通过ref的方式获取组件或者元素,需要定义一个同名的Ref对象,在组件挂载后就可以访问了。
父组件
<template><ul><li v-for="i in childRefs?.list" :key="i">{{ i }}</li></ul><!-- 子组件 ref的值与<script>中的保持一致 --><child-components ref="childRefs"></child-components><!-- 父组件 -->
</template>
<script setup>
import { ref } from 'vue'
import ChildComponents from './MainPage.vue'
const childRefs = ref(null)
</script>子组件
<template><div><input v-model="value" placeholder="请输入"/><button @click="handleAdd" type="button">添加</button></div>
</template>
<script setup>
import { ref, defineExpose } from 'vue'
const list = ref(['JavaScript', 'HTML', 'CSS'])
const value= ref('1')
// add触发后的事件处理函数
const handleAdd = () => {list.value.push(value.value)value.value = ''
}
defineExpose({ list })
</script>
5-5 provide/inject
provide和inject是Vue中提供的一对API,该API可以实现父组件向子组件传递数据,无论层级有 多深,都可以通过这对API实现。示例代码如下所示:
父组件
<template><!-- 子组件 --><child-components></child-components><!-- 父组件 --><div><input v-model="value" placeholder="请输入"/><button @click="handleAdd" type="button">添加</button></div>
</template>
<script setup>
import { ref, provide } from 'vue'
import ChildComponents from './MainPage.vue'
const list = ref(['JavaScript', 'HTML', 'CSS'])
const value= ref('')
// 向子组件提供数据
provide('list', list.value)
// add 触发后的事件处理函数
const handleAdd = () => {list.value.push(value.value)value.value = ''
}
</script>子组件
<template><ul ><li v-for="i in list" :key="i">{{ i }}</li></ul>
</template>
<script setup>
import { inject } from 'vue'
// 接受父组件提供的数据
const list = inject('list')
</script>
5-6 事件总线 结合外部第三方库来完成 官方推荐了俩种 mitt和tiny-emitter
我这里以mitt为例来说
5-6-1 首先安装mitt
npm install mitt
5-6-2 找到vue项目中的utils文件夹,新建一个bus.js,代码:
import mitt from "mitt";
const mitter = mitt();
export default mitter;
5-6-3 使用 我现在使用mitt进行兄弟组件之间的通信实现
父组件
<template><child1></child1> <child2></child2>
</template>
<script setup>import Child1 from "./MainPage.vue";import Child2 from "./GoodsPage.vue";
</script>
子组件-child1
<template><div>child1<button @click="click">给child2 传值</button></div>
</template>
<script setup>
import emitter from "@/utils/bus";function click() {emitter.emit("child2Data", { name: "小米" });}
</script>
子组件-child2
<template><div>child2---{{ str }}</div>
</template>
<script setup>
import emitter from "@/utils/bus";
import { onBeforeUnmount, ref } from "vue";
let str = ref();
emitter.on("child2Data", (data) => {str.value = data.name;
});
onBeforeUnmount(() => {emitter.off("child2Data"); //关闭
});
</script>
效果图如下:


6.后续会陆续补充:
6-1 创建vue3项目的时候一些选择
6-2 element-plus新增组件在实际项目中使用
6-3 vue3新增属性及生命周期及写法+element-plus 在实际项目中使用
持续更新中......
相关文章:
Vue3+element-plus摘要
1.如果自己电脑vue版本是vue2版本,下面将详细介绍如何在vue2版本基础上继续安装 vue3版本且不会影响vue2版本的使用 1-1 在c盘或者别的盘建一个文件夹vue3 1-2 在这个文件夹里使用WINR 打开终端 输入命令 npm install vue/cli 安装完即可 1-3 然后进入此文件夹中的n…...
Android Studio 将项目打包成apk文件
第一步:选择Build -> Generate Signed APK 会出现: 我们选择 Create new… 然后选择你要存放密钥的地方 点击ok之后,则选择好了文件,并生成了jks文件了。 点击ok之后, 会出现: 选择release…...
贪心算法day2(最长递增子序列)
目录 1.最长递增子序列 方法一:动态规划 方法二:贪心二分查找 1.最长递增子序列 链接:. - 力扣(LeetCode) 方法一:动态规划 思路:我们定义dp[i]为最长递增子序列,那么dp[j]就是…...
arcgis pro 学习笔记
二维三维集合在一起,与arcgis不同 一、首次使用,几个基本设置 1.选项——常规里面设置自动保存时间 2.新建工程文件,会自动加载地图,可以在选项里面设置为无,以提高启动效率。 3.设置缓存位置,可勾选每次…...
OpenGL 进阶系列06 - OpenGL变换反馈(TransformFeedback)
一:概述 变换反馈(Transform Feedback)是 OpenGL 中的一项技术,允许你将顶点着色器的输出(例如变换后的顶点数据)直接传输到缓冲区,而不是将结果渲染到屏幕上。它在图形计算中非常有用,尤其在粒子系统、模拟、几何处理等场景中,可以用来获取顶点处理的中间结果,并将其…...
elementUI 点击弹出时间 date-picker
elementUI的日期组件,有完整的UI样式及弹窗,但是我的页面不要它的UI样式,点击的时候却要弹出类似的日期选择器,那怎么办呢? 以下是elementUI自带的UI风格,一定要一个输入框来触发。 这是我的项目中要用到的…...
【浙江大学大模型系列】启真医疗大模型(国内大模型)
启真大模型是一款专注于医疗领域的AI大模型,它坚持“数据知识双轮驱动”的技术路线,通过大模型技术和医学知识库的紧密结合,致力于推动大模型技术在医疗行业的落地和应用实践。 启真大模型的特点在于其强大的数据整合能力和医学知识库的支持。…...
NestJS 项目中如何使用 class-validator 进行数据验证
前言 在现代Web开发中,数据验证是必不可少的一环,它不仅能够确保数据的准确性,还能提高系统的安全性。在使用NestJS框架进行项目开发时,class-validator与class-transformer这两个库为我们提供了方便的数据验证解决方案。 本文将…...
【AI抠图整合包及教程】Meta SAM2:引领图像和视频分割技术的新纪元
在人工智能的浪潮中,Meta公司再次以Segment Anything Model 2(SAM 2)引领了图像和视频分割技术的新纪元。SAM 2的发布不仅为计算机视觉领域的研究和发展注入了新的活力,还预示着这一技术将在多个行业中找到广泛的应用场景。这一创…...
小菜家教平台(三):基于SpringBoot+Vue打造一站式学习管理系统
目录 前言 今日进度 详细过程 相关知识点 前言 昨天重构了数据库并实现了登录功能,今天继续进行开发,创作不易,请多多支持~ 今日进度 添加过滤器、实现登出功能、实现用户授权功能校验 详细过程 一、添加过滤器 自定义过滤器作用&…...
ArcGIS/QGIS按掩膜提取或栅格裁剪后栅格数据的值为什么变了?
问题描述: 现有一栅格数据,使用ArcGIS或者QGIS按照矢量边界进行按掩膜提取或者栅格裁剪以后,其值的范围发生了变化,如下: 可以看到,不论是按掩膜提取还是进行栅格裁剪后,其值的范围均与原来栅…...
Linux的基本指令(一)
1.ls指令 功能:对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及信息。 常用选项: -a列出目录下的所有文件,包括以 . 开头的隐含文件。 -l列出文件的详细信息 举例: rooti…...
python导入包失败 in <module> import pandas as pd
如果安装不成功就更新一下pip python.exe -m pip install --upgrade pip 再删掉原来的pandas pip uninstall pandas 再安装一次 pip install pandas...
不惧风雨,硬核防护!雷孜LaCie小金刚三防移动硬盘颠覆认知
不惧风雨,硬核防护!雷孜LaCie小金刚三防移动硬盘颠覆认知 哈喽小伙伴们好,我是Stark-C~ 说到移动硬盘大家潜意识的认为是一件很娇贵的数码产品,很怕湿,摔不得。所以我们在使用传统移动硬盘的时候不能摔,远…...
Yocto 项目下通过网络更新内核、设备树及模块
Yocto 项目下通过网络更新内核、设备树及模块 前言 在 Yocto 项目的开发过程中,特别是在进行 BSP(Board Support Package)开发时,经常需要调整特定软件包的版本,修改内核、设备树以及内核模块。然而,每次…...
Scheduled Sampling工作原理【小白记笔记】
Scheduled Sampling(计划采样)是一种在序列生成任务中用于逐步引导模型的训练策略。该方法最早由 Bengio 等人在 2015 年提出,主要用于解决序列到序列(sequence-to-sequence)模型中的曝光偏差(exposure bia…...
C++:C++的IO流
目录 一.C标准IO流 1.operator bool 二.C文件IO流 1.文件读取 ifstream (1)ifstream继承istream (2)ifstream 构造函数 (3)ifstream,get读取整个文件 (4)>&g…...
「QT」几何数据类 之 QLine 整型直线类
✨博客主页何曾参静谧的博客📌文章专栏「QT」QT5程序设计📚全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasolid…...
day58 图论章节刷题Part09(dijkstra(堆优化版)、Bellman_ford 算法)
dijkstra(堆优化版) 朴素版的dijkstra解法的时间复杂度为 O(n^2),时间复杂度只和 n(节点数量)有关系。如果n很大的话,可以从边的角度来考虑。因为是稀疏图,从边的角度考虑的话,我们在堆优化算法中最好使用…...
【计网不挂科】计算机网络期末考试——【选择题&填空题&判断题&简述题】试卷(1)
前言 大家好吖,欢迎来到 YY 滴计算机网络 系列 ,热烈欢迎! 本章主要内容面向接触过C的老铁 本博客主要内容,收纳了一部门基本的计算机网络题目,供yy应对期中考试复习。大家可以参考 本章是去答案版本。带答案的版本在下…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...
在软件开发中正确使用MySQL日期时间类型的深度解析
在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...
屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...
Cinnamon修改面板小工具图标
Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...
安卓基础(aar)
重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...
【Linux】Linux 系统默认的目录及作用说明
博主介绍:✌全网粉丝23W,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...
