鸿蒙 HarmonyOS NEXT星河版APP应用开发阶段三-热门组件使用及案例

一、样式和结果重用

介绍

/*
@Extend:扩展组件(样式、事件)
@Styles: 抽取通用数据、事件
@Builder:自定义构建函数(结构、样式、事件)
*/

@Extend

/*
作用:扩展组件(样式、事件)
场景:两个文本组件,大部分样式类似,事件类似,抽取类似代码,定义成一个方法,将不同的内容用参数获取
*/ 
/*
语法:
@Extend(扩展的组件名)
function 自定义函数名(参数1...){抽取类似的样式和事件
}
*/
@Extend(Text)
function TextStyle(fontSize:number=24,textColor:string=Color.White.toString(),fontWeight:number=700){.fontColor(Color.Red).fontWeight(fontWeight).textAlign(TextAlign.Center).backgroundColor(textColor).borderRadius(10).fontSize(fontSize)
}
@Entry
@Component
struct Index {build() {Column(){Swiper(){Text("1").TextStyle(16,"#f00",700)Text("1").TextStyle(34,"#ff0",700)Text("2").TextStyle(66,"#fff",700)Text("3").TextStyle(40,"#00f",700)}.width("100%").aspectRatio(2.4).loop(true).autoPlay(true).interval(5000).padding(2).borderRadius(10).indicator(Indicator.dot()// 默认.itemWidth(15).itemHeight(4).color("#80737272")// 选中.selectedItemWidth(30).selectedItemHeight(4).selectedColor("#ffffffff"))}.width("100%").height("100%").backgroundColor("#ffe7dddd")}
}

@Styles

/* 
构建不同组件的通用样式和事件
场景:如文本和图片框宽和高都是相同的,背景颜色也是一样的,就可以用该注解
注意:@Styles不支持传递参数
*/
// 示例
@Styles
function commonStyle(){.width(100).height(100).margin({top:10})
}
@Entry
@Component
struct Index {@State bgColor:string = "#f00"@Styles commonBgColorStyle(){.backgroundColor(this.bgColor)}@Styles CommonClickStyles(){.onClick(()=>{this.bgColor= "#ff0"})}build() {Column(){Text("文本1").commonStyle().commonBgColorStyle().CommonClickStyles()Text("文本2").commonStyle().commonBgColorStyle().CommonClickStyles()Text("文本3").commonStyle().commonBgColorStyle().CommonClickStyles()Image($r("app.media.hos")).commonStyle().commonBgColorStyle().CommonClickStyles()}.width("100%").height("100%").backgroundColor("#ffe7dddd")}
}

image.png

@Builder

/*
@Builder:自定义构建函数(结构、样式、事件)
注意:想使用状态变量,定义为局部的Builder
*/
@Extend(Column)
function ColumnExtend(color:ResourceColor){.width("100%").height("100%").backgroundColor(color)
}
@Builder
function itemTab(src:ResourceStr,title:string){Column(){Image(src).width(20)Text(title).fontSize(14).margin({top:5})}.layoutWeight(1)
}
@Entry
@Component
struct Index {@State bgColor:ResourceColor = "#fff68f8f"@BuilderitemTab(src:ResourceStr,title:string, bgColor:ResourceColor){Column(){Image(src).width(20)Text(title).fontSize(14).margin({top:5})}.layoutWeight(1).onClick(()=>{// 点击切换Column颜色this.bgColor = bgColor})
}build() {Column(){Stack({alignContent:Alignment.Bottom}){Column().ColumnExtend(this.bgColor)Row(){// 全局itemTab($r("app.media.zfb_tab_home"),"")itemTab($r("app.media.zfb_tab_money"),"支付宝")// 局部this.itemTab($r("app.media.zfb_tab_chat"),"聊天","#fff6d6d6")this.itemTab($r("app.media.zfb_tab_me"),"我的","#ffca0c0c")}.width("100%").height(60).backgroundColor(Color.White)}.width("100%").height("100%")}.ColumnExtend("#ffb7b7b7")}
}

image.png

二、组件

Swiper轮图

  • 基本语法
/*
Swiper(){//内容
}.width("100%").height(100)*/@Entry
@Component
struct Index {build() {Column(){Swiper(){Text("1").backgroundColor(Color.Red).textAlign(TextAlign.Center)Text("1").backgroundColor(Color.Yellow).textAlign(TextAlign.Center)Text("1").backgroundColor(Color.Gray).textAlign(TextAlign.Center)Text("1").backgroundColor(Color.Orange).textAlign(TextAlign.Center)}.width("100%").height(200)}.width("100%").height("100%").backgroundColor("#fffdd1d1")}
}
  • 效果

image.png

  • 常用属性
/*
是否开启循环:loop(boolean)true
是否自动播放:autoPlay(boolean)false
自动播放时间间隔:interval(number)3000
纵向滚动轮播:vertical(boolean)false
*/
// 功能:每隔5秒纵向自动播放图片
@Entry
@Component
struct Index {build() {Column(){Swiper(){Image($r("app.media.hw"))Image($r("app.media.hos"))}.width("100%").height(200).loop(true).autoPlay(true).interval(5000).vertical(true)}.width("100%").height("100%").backgroundColor("#fffdd1d1")}
}

image.png

  • 小圆点样式自定义

image.png

Scroll滚动

  • 作用:当子组件的长度超过scroll,内容就可以滚动了。
  • 核心用法
/*
基本参数:
滚动方向:默认纵向
scroll组件中,只支持一个子组件
需要设置scroll的尺寸
扩展:
快速创建任意长度的数组:Array.from({length:长度})
*/
@Extend(Column)
function ColumnExtend(color:ResourceColor){.width("100%").height("100%").backgroundColor(color)
}
@Builder
function TextItem(title:string){Text(title).borderRadius(10).textAlign(TextAlign.Center).padding(10).width("100%").height(100).backgroundColor("#fff8a9a9")}
@Entry
@Component
struct Index {build() {Column(){Scroll() {Column({ space: 10 }) {ForEach(Array.from({ length: 10 }), (item: string, index) => {TextItem((index + 1).toString())})}.width("100%").padding(10)}.width("100%").height("100%")}.ColumnExtend("#ffffffff")}
}

image.png

  • 常见属性
  • image.png
@Extend(Column)
function ColumnExtend(color:ResourceColor){.width("100%").height("100%").backgroundColor(color)
}
@Builder
function TextItem(title:string){Text(title).borderRadius(10).textAlign(TextAlign.Center).padding(10).width("100%").height(100).backgroundColor("#fff8a9a9")}
@Entry
@Component
struct Index {build() {Column(){Scroll() {Column({ space: 10 }) {ForEach(Array.from({ length: 10 }), (item: string, index) => {TextItem((index + 1).toString())})}.width("100%").padding(10)}.width("100%").height("100%").scrollBar(BarState.Auto) // 滑动显示,不滑动隐藏.scrollBarColor(Color.Black) // 滚动条颜色.scrollBarWidth(2) // 滚动条宽度.edgeEffect(EdgeEffect.Spring) // 弹框效果}.ColumnExtend("#ffffffff")}
}

image.png

  • 控制器
/*
使用步骤:
1 实例化Scroller控制器  ( new 一个scroll对象)
2 绑定给Scroll组件
3 控制器方法控制滚动,属性控制距离
*/import { AlertDialog } from '@ohos.arkui.advanced.Dialog'@Extend(Column)
function ColumnExtend(color:ResourceColor){.width("100%").height("100%").backgroundColor(color)
}
@Builder
function TextItem(title:string){Text(title).borderRadius(10).textAlign(TextAlign.Center).padding(10).width("100%").height(100).backgroundColor("#fff8a9a9")}
@Entry
@Component
struct Index {scroll:Scroller= new Scroller() // 步骤一:new Scroller对象build() {Column(){Scroll(this.scroll) { // 2 绑定Column({ space: 10 }) {ForEach(Array.from({ length: 20 }), (item: string, index) => {TextItem((index + 1).toString())})}.width("100%").padding(10)}.width("100%").height("100%").scrollBar(BarState.Auto) // 滑动显示,不滑动隐藏.scrollBarColor(Color.Black) // 滚动条颜色.scrollBarWidth(2) // 滚动条宽度.edgeEffect(EdgeEffect.Spring) // 弹框效果Image($r("app.media.ic_shangjiantou")).width(30).border({width:1,color:Color.Black}).borderRadius(15).padding(5).position({x:290,y:700}).zIndex(999).onClick(()=>{this.scroll.scrollEdge(Edge.Top)})}.ColumnExtend("#ffffffff")}
}

image.png

  • 事件
/*
onScroll((x,y)=>{
// 滚动时,实时触发,
})
*/

Tabs

  • 基本使用
/*
TabContent(){} 内只能有一个字组件
*/@Extend(Column)
function ColumnExtend(color:ResourceColor){.width("100%").height("100%").backgroundColor(color)
}@Entry
@Component
struct Index {build() {Column(){Tabs(){TabContent(){Text("首页") // 子组件只能有一个}.tabBar("首页")TabContent(){Text("推荐")}.tabBar("推荐")TabContent(){Text("发现")}.tabBar("发现")TabContent(){Text("我的")}.tabBar("我的")}}.ColumnExtend("#ffffffff")}
}

image.png

  • 常用属性
  • image.png
/*
第一个配置使用参数形式,其余都是属性方法
*/ 
import { AlertDialog } from '@ohos.arkui.advanced.Dialog'@Extend(Column)
function ColumnExtend(color:ResourceColor){.width("100%").height("100%").backgroundColor(color)
}@Entry
@Component
struct Index {build() {Column(){Tabs({barPosition:BarPosition.End}){TabContent(){Text("首页") // 子组件只能有一个}.tabBar("首页")TabContent(){Text("推荐")}.tabBar("推荐")TabContent(){Text("发现")}.tabBar("发现")TabContent(){Text("我的")}.tabBar("我的")}.scrollable(true) // 手滑.animationDuration(0) // 动画}.ColumnExtend("#ffffffff")}
}

image.png

  • 滚动导航栏
/*
添加属性:.barMode(BarMode.Scrollable)
*/
@Extend(Column)
function ColumnExtend(color:ResourceColor){.width("100%").height("100%").backgroundColor(color)
}@Entry
@Component
struct Index {build() {Column(){Tabs({barPosition:BarPosition.Start}){ForEach(Array.from({length:100}),(item:string,index)=>{TabContent(){Text(index.toString())}.tabBar(index.toString())})}.scrollable(true) // 手滑.animationDuration(0) // 动画.barMode(BarMode.Scrollable)}.ColumnExtend("#ffffffff")}
}

image.png

  • 自定义TabBar栏
/*
基础结构
自定义导航栏就是使用@Builder重新编写导航栏组件*/ 

二、案例

生肖抽卡

扩展知识

Badge角标组件
  • 语法
@Entry
@Component
struct Index {build() {Column(){Badge({count:111, // 次数,超过100 变为99+position:BadgePosition.RightTop, // 三个方向:style:{ // 角标样式fontSize:12,fontWeight:700,badgeColor:Color.Red}}){Image($r("app.media.hos")).width(200).borderRadius(10)}}.width("100%").height("100%").backgroundColor("#ffe3dfdf").padding(15)}
}
  • 效果

image.png

Grid布局
  • 场景:常用于 有规则的布局
  • 语法:
@Entry
@Component
struct Index {build() {Column(){Grid(){ForEach([0,1,2,3,4,5],(item:number,index)=>{GridItem(){Image($r(`app.media.img_0${item}`)).width(80)}})}.width("100%").height(300).rowsTemplate("1fr 1fr").columnsTemplate("1fr 1fr 1fr").margin({top:100}).padding(25)Button("立即抽奖").width(200).backgroundColor("#fff66363")}}
}
  • 效果:

image.png

涉及知识点及注意点
// 知识
1.badge角标组件
2.grid布局,stack布局
3.数组对象动态渲染,动态更新
4.遮罩层动画,图像动画效果animation
5.随机抽奖math.random,math.floor
6.假设成立法,判断是否中奖
// 注意点:
鸿蒙对象数组在修改某一个对象的值时,需要将整个对象重新赋值页面才会重新渲染新数据。

image.png

实现效果图

image.png

代码
interface Animal{id:number,name:string,goodNum:number,url:string, url1:string
}
@Entry
@Component
struct Index {
@State pageStatus:number=0@State pagw2Title:string= "获取的生肖卡"@State randomNum:number=0@State sum:number=0
@State animals:Animal[]=[{ id:1, name:"龙", goodNum:0, url:"app.media.img_00" ,url1:"app.media.bg_00"},{ id:2, name:"马", goodNum:0, url:"app.media.img_01" ,url1:"app.media.bg_01"},{ id:3, name:"蛇", goodNum:0, url:"app.media.img_02" ,url1:"app.media.bg_02"},{ id:4, name:"牛", goodNum:0, url:"app.media.img_03" ,url1:"app.media.bg_03"},{ id:5, name:"虎", goodNum:0, url:"app.media.img_04",url1:"app.media.bg_04"},{ id:6, name:"兔", goodNum:0, url:"app.media.img_05" ,url1:"app.media.bg_05"}
]build() {Stack(){// page1Column(){Grid(){ForEach(this.animals,(item:Animal,index)=>{GridItem(){Badge({count:item.goodNum,position:BadgePosition.RightTop,style:{fontSize:12,badgeSize:20,badgeColor:Color.Red}}){Image($r(item.url1)).width(80)}}})}.width("100%").height(300).rowsTemplate("1fr 1fr").columnsTemplate("1fr 1fr 1fr").margin({top:100}).padding(25)Button("立即抽奖").width(200).backgroundColor("#fff66363").onClick(()=>{this.sum=0for (let item of this.animals) {if (item.goodNum > 0) {this.sum+=1}}if(this.sum==6){this.pageStatus=2this.pagw2Title= `恭喜获得手机一台`}else{this.pageStatus = 1this.randomNum = Math.floor(Math.random()*6)console.log("result=>>",this.randomNum)this.pagw2Title= `获取生肖${this.animals[this.randomNum].name}卡`}})}.width("100%").height("100%")if(this.pageStatus==1){//page2Column({space:30}){Text(this.pagw2Title).fontSize(24).fontWeight(700).fontColor("#ffe3d7b2")Image($r(this.animals[this.randomNum].goodNum==0?this.animals[this.randomNum].url:this.animals[this.randomNum].url1)).width(200)Button("开心收下").width(160).backgroundColor(Color.Transparent).border({width:2,color:"#ffd0cdcd"}).onClick(()=>{this.pageStatus= 0this.animals[this.randomNum]={id:this.randomNum+1,name:  this.animals[this.randomNum].name,goodNum:  this.animals[this.randomNum].goodNum+1, url:"app.media.img_0" +this.randomNum,url1:"app.media.img_0"+this.randomNum}// this.animals[this.randomNum].url=  this.animals[this.randomNum].url1console.log( JSON.stringify( this.animals[this.randomNum]))//   this.animals=this.animals})}.width("100%").height("100%").backgroundColor("#cc000000").justifyContent(FlexAlign.Center)}else if(this.pageStatus==2){//page3Column({space:30}){Text(this.pagw2Title).fontSize(24).fontWeight(700).fontColor("#ffe3d7b2")Image($r("app.media.xm")).width(400)Button("再来一次").width(160).backgroundColor(Color.Transparent).border({width:2,color:"#ffd0cdcd"}).onClick(()=>{this.pageStatus= 0this.animals=[{ id:1, name:"龙", goodNum:0, url:"app.media.img_00" ,url1:"app.media.bg_00"},{ id:2, name:"马", goodNum:0, url:"app.media.img_01" ,url1:"app.media.bg_01"},{ id:3, name:"蛇", goodNum:0, url:"app.media.img_02", url1:"app.media.bg_02"},{ id:4, name:"牛", goodNum:0, url:"app.media.img_03" ,url1:"app.media.bg_03"},{ id:5, name:"虎", goodNum:0, url:"app.media.img_04", url1:"app.media.bg_04"},{ id:6, name:"兔", goodNum:0 ,url:"app.media.img_05" ,url1:"app.media.bg_05"}]})}.width("100%").height("100%").backgroundColor("#cc000000").justifyContent(FlexAlign.Center)}}}
}

小米轮播

  • 实现效果
/*
宽高比=宽/高
属性:aspectRatio()*/ @Entry
@Component
struct Index {build() {Column(){Swiper(){Image($r("app.media.ic_swiper_xmyp01")).borderRadius(10)Image($r("app.media.ic_swiper_xmyp02")).borderRadius(10)Image($r("app.media.ic_swiper_xmyp03")).borderRadius(10)Image($r("app.media.ic_swiper_xmyp04")).borderRadius(10)}.width("100%").aspectRatio(2.4).loop(true).autoPlay(true).interval(5000).padding(2).borderRadius(10).indicator(Indicator.dot()// 默认.itemWidth(15).itemHeight(4).color("#80737272")// 选中.selectedItemWidth(30).selectedItemHeight(4).selectedColor("#ffffffff"))}.width("100%").height("100%").backgroundColor("#ffe7dddd")}
}

image.png

点图标回到顶部

import { AlertDialog } from '@ohos.arkui.advanced.Dialog'@Extend(Column)
function ColumnExtend(color:ResourceColor){.width("100%").height("100%").backgroundColor(color)
}
@Builder
function TextItem(title:string){Text(title).borderRadius(10).textAlign(TextAlign.Center).padding(10).width("100%").height(100).backgroundColor("#fff8a9a9")}
@Entry
@Component
struct Index {@State status :boolean =falsescroll:Scroller= new Scroller() // 步骤一:new Scroller对象build() {Column(){Scroll(this.scroll) { // 2 绑定Column({ space: 10 }) {ForEach(Array.from({ length: 20 }), (item: string, index) => {TextItem((index + 1).toString())})}.width("100%").padding(10)}.width("100%").height("100%").scrollBar(BarState.Auto) // 滑动显示,不滑动隐藏.scrollBarColor(Color.Black) // 滚动条颜色.scrollBarWidth(2) // 滚动条宽度.edgeEffect(EdgeEffect.Spring) // 弹框效果.onScroll((x,y)=>{if(this.scroll.currentOffset().yOffset>150){this.status = true}else{this.status=false}})if(this.status){Image($r("app.media.ic_shangjiantou")).width(30).border({width:1,color:Color.Black}).borderRadius(15).padding(5).offset({x:110,y:-50}).zIndex(999).onClick(()=>{this.scroll.scrollEdge(Edge.Top)})}}.ColumnExtend("#ffffffff")}
}
  1. 实现效果:
    1. 滚动到大于150显示图标,点击图标滚动到最顶部

image.png
image.png

自定义导航栏切换

效果:点击导航标题时,切换到对应的页面,并修改当前页面导航的状态。

@Entry
@Component
struct Index {@State iconIndex:number = 0@BuildercenterBuilder(){Image($r("app.media.flower")).width(40)}@BuildertabBarItem(numIndex:number,title:string,icon:ResourceStr,selectIcon:ResourceStr){Column(){Image(this.iconIndex==numIndex? icon :selectIcon).width(30)Text(title).fontColor(this.iconIndex==numIndex? "#ffe99607" :Color.Black)}}build() {Tabs({barPosition:BarPosition.End}){TabContent(){Text("内容1")}.tabBar(this.tabBarItem(0,"首页",$r("app.media.ic_tabbar_icon_0_selected"),$r("app.media.ic_tabbar_icon_0")))TabContent(){Text("内容2")}.tabBar(this.tabBarItem(1,"分类",$r("app.media.ic_tabbar_icon_1_selected"),$r("app.media.ic_tabbar_icon_1")))TabContent(){Text("内容3")}.tabBar(this.centerBuilder())TabContent(){Text("内容4")}.tabBar(this.tabBarItem(3,"购物车",$r("app.media.ic_tabbar_icon_1_selected"),$r("app.media.ic_tabbar_icon_2")))TabContent(){Text("内容5")}.tabBar(this.tabBarItem(4,"我的",$r("app.media.ic_tabbar_icon_3_selected"),$r("app.media.ic_tabbar_icon_3")))}.onChange((index)=>{this.iconIndex= index})}
}

image.png

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

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

相关文章

封装图片占位图组件

<laze-image class="image" :url="item.image" :game_name="item.game_name" :placeholder="require(@/static/images/common/placeholder.png)"></laze-image> 1.通过调用组件实现 先加载预览图片,再加载真实的图片 2…

中国杀出全球首个烹饪大模型

什么&#xff1f;烹饪也有大模型&#xff1f;&#xff01; 没有听错&#xff0c;这就是国产厨电龙头老板电器最新发布——“食神”大模型。 数十亿级行业数据&#xff0c;数千万级知识图谱加持&#xff0c;据称还是全球首个。 它能为每个人提供个性化量身定制的解决方案&…

TikTok短视频矩阵系统

随着数字化时代的到来&#xff0c;短视频已成为人们获取信息、娱乐消遣的重要渠道。TikTok&#xff0c;作为全球最受欢迎的短视频平台之一&#xff0c;其背后的短视频矩阵系统是支撑其成功的关键因素。本文将深入探讨TikTok短视频矩阵系统的构成、功能以及它在新媒体时代中的影…

什么领夹麦的音质最好又降噪?揭秘多款降噪出色的无线领夹麦克风

随着短视频的兴起&#xff0c;将视频拍摄方面的外设推到了风口浪尖上&#xff0c;麦克风作为视频拍摄或者现场直播使用的主要拾音工具&#xff0c;自然成为了大家非常关注的一个摄影外设工具&#xff0c;毕竟一款好的拾音工具能够给视频创作者或者直播博主带来更好的使用体验。…

汇川H5u小型PLC作modbusRTU从站设置及测试

目录 新建工程COM通讯参数配置协议选择协议配置 查看手册Modbus地址对应关系仿真测试 新建工程 新建一个H5U工程&#xff0c;不使用临时工程 系列选择H5U即可 COM通讯参数配置 协议选择 选择ModbusRTU从站 协议配置 端口号默认不可选择 波特率这里使用9600 数据长度&…

Nuxt3 实战 (十二):SEO 搜索引擎优化指南

添加 favicon 图标和 TDK&#xff08;标题、描述、关键词&#xff09; nuxt.config.ts 添加配置&#xff1a; export default defineNuxtConfig({app: {title:Dream Site,meta: [{ name: keywords, content: Nuxt.js,导航,网站 },{ name: description, content: 致力于打造程…

CCF秀湖会议:“第五存储架构”引发关注

近日&#xff0c;中国计算机学会第十三期CCF秀湖会议在苏州CCF业务总部&学术交流中心正式召开。本次会议就“新应用与硬件驱动下的存储技术创新”主题进行深入交流和探讨。中国工程院院士、清华大学郑纬民教授&#xff0c;华中科技大学金海教授&#xff0c;清华大学舒继武教…

计算机毕业设计Thinkphp/Laravel+vue高校图书馆借阅系统_i0521

图书馆借阅系统&#xff0c;主要的模块包括首页、个人中心、会员管理、会员等级管理、图书分类管理、图书信息管理、图书借阅管理、借阅服务评价管理、超时费用管理、留言板管理、系统管理等功能。系统中管理员主要是为了安全有效地存储和管理各类信息&#xff0c;还可以对系统…

浅学JVM

一、基本概念 目录 一、基本概念 二、JVM 运行时内存 1、新生代 1.1 Eden 区 1.2. ServivorFrom 1.3. ServivorTo 1.4 MinorGC 的过程 &#xff08;复制- >清空- >互换&#xff09; 1.4.1&#xff1a;eden 、servicorFrom 复制到ServicorTo&#xff0c;年龄1 …

力扣每日一题 特别的排列 DFS 记忆化搜索 位运算 状态压缩DP

Problem: 2741. 特别的排列 &#x1f468;‍&#x1f3eb; 参考题解 &#x1f37b; 暴搜 ⏰ 时间复杂度&#xff1a; O ( N ) O(N) O(N) class Solution {public int specialPerm(int[] nums) {boolean[] visited new boolean[nums.length];return dfs(nums, 0, -1, visit…

目标检测系列(二)yolov1的全面讲解

目录 1、网络结构 2、检测原理 3、制作训练正样本方法 4、损失函数 5、前向推理 6、模型缺限 YOLO的全称是you only look once&#xff0c;指只需要浏览一次就可以识别出图中的物体的类别和位置。YOLO被称为Region-free方法&#xff0c;相比于Region-based方法&#xff0…

AI已经火了一年了,真正属于普通人的机会在哪里?

对普通人来说&#xff0c;AI的机会在哪里&#xff1f; 这是过去一年来&#xff0c;我收到过最多的问题 在这篇文章里&#xff0c;我会把我目前对AI的理解阐述出来&#xff0c;分享3个普通人能够把握的方向 讲清楚在现在这个时间节点&#xff0c;当我们在说搞AI的时候&#x…

RAG应用要如何吃到大模型长上下文的红利?-LongRAG

去年底的时候&#xff0c;笔者写过&#xff0c;与其在RAG系统上雕花&#xff0c;可以重新思考一下&#xff0c;自己的业务场景是否非RAG不可吗&#xff1f;随着去年大模型的蓬勃发展&#xff0c;长度外推、更长的上下文模型&#xff0c;更厉害的中文底座大模型&#xff0c;都可…

RabbitMq camel

真实的项目如果 交换器/ 队列很多 建议在管理页面新建exchange / queue/ rootingKey /vhost, 而不要写死在springboot项目里 camel按rooting key发送消息: 最推荐 .to("rabbitmq:sino.nannan?routingKeysino.key&skipExchangeDeclaretrue&skipQueueDeclaretru…

Python 挖坑式填充Excel模板内容(包括页眉/SheetName/logo)

纵览 Python处理Excel的方式--解压缩方式1、导包2、对模板文件进行解压缩3、对解压缩后文件层级进行介绍4、准备需要载入的数据5、模板挖坑6、运行替换代码7、压缩文件8、生成文件9、完成代码10、可能遇到的问题 结语 Python处理Excel的方式–解压缩方式 在处理Excel中过程中&…

《人人都是产品经理》:项目的坎坷一生

《人人都是产品经理》&#xff1a;项目的坎坷一生 产品VS项目产品经理和项目经理 一切项目从kick off 开始工作量预估Kick Off的大致也就15分钟 写文档咯UML图用例文档UCdemo也得做 需求活在项目中bug等级有多高bug流转过程 以终为始 产品VS项目 项目定义&#xff1a;是只会进…

怎么压缩pdf文件大小,如何压缩pdf文件大小

pdf文件怎么压缩&#xff1f;在当下这个信息爆炸的时代&#xff0c;无论是在工作场所还是校园中&#xff0c;我们经常会面临需要处理大文件的情况&#xff0c;而PDF格式作为一种保留文档结构和布局完整性的理想选择&#xff0c;有时候pdf文件太大&#xff0c;因此&#xff0c;对…

typec密封胶防水用什么胶好?

typec密封胶防水用什么胶好&#xff1f; 对于Type-C连接器的防水密封&#xff0c;行业内普遍推荐使用单组份环氧型热固化胶。这种胶水具有以下优点&#xff0c;使其成为Type-C防水密封的理想选择&#xff1a; 粘稠度易于调整&#xff1a;这有助于胶水在点胶过程中更好地渗透到T…

2024年二级建造师机电工程专业考试题库分享。

1.调查表法通常与&#xff08;&#xff09;结合使用&#xff0c;以便更快地发现问题原因。 A.经验法 B.分层法 C.样本调查法 D.对比分析法 答案&#xff1a;B 解析&#xff1a;题干内容提示调查表法往往会与分层法结合起来应用&#xff0c;故B选项正确。 2.在质量统计分…

压缩图片png格式该怎么操作?试试下面这3个图片压缩工具吧

png是经常用于储存图片的一种格式&#xff0c;随着现在图片在日常工作和生活中的广泛使用&#xff0c;在很多的使用场景中都有应用。png的图片质量高而且支持无损压缩&#xff0c;在缩小图片的时候不会因为压缩而影响图片的清晰度&#xff0c;更适合在网上的存储、分享或者传输…