【b站咸虾米】chapter5_uniapp-API_新课uniapp零基础入门到项目打包(微信小程序/H5/vue/安卓apk)全掌握

课程地址:【新课uniapp零基础入门到项目打包(微信小程序/H5/vue/安卓apk)全掌握】 https://www.bilibili.com/video/BV1mT411K7nW/?p=12&share_source=copy_web&vd_source=b1cb921b73fe3808550eaf2224d1c155

目录

5 API

5.1 页面和路由

5.1.1 uni.navigateTo

5.1.2 uni.redirectTo

5.1.3 uni.reLaunch

5.1.4 uni.switchTab

5.1.5 uni.navigateBack

5.1.6 EventChannel

5.1.7 uni.preloadPage

5.2 onLoad接收页面跳转时的传参

5.2.1 vueroute路由传参

5.2.2 onLoad传参

5.2.3 传递多个参数

5.3 界面

5.3.1 交互反馈

5.3.1.1 uni.showToast消息提示框

5.3.1.2 uni.hideToast

5.3.1.3 uni.showLoading(OBJECT)显示loading提示框

5.3.1.4 uni.hideLoading()

5.3.1.5 uni.showModal(OBJECT)模态弹窗

5.3.1.6 uni.showActionSheet(OBJECT)弹出操作菜单

5.3.2 设置导航条

5.3.3 设置TabBar

5.3.4 其他

5.4 网络

5.4.1 发起请求

5.4.1.1 uni.request(OBJECT)

 5.4.2 uni.request的其他参数

1 timeout

2 data

 3 dataType

4 methods

5.5 案例

5.5.1 list页面

5.5.2 跳转详情页

1 从list页面跳转详情页

2 动态展示详情页数据

3 添加加载效果

4 列表页向详情页传参

 5.5.3 动态展示每条详情下的评论列表

1 评论模块的template

2 样式

3 逻辑

5.6 uniapp数据缓存Storage

5.6.1 uni.setStorage & uni.setStorageSync

1 uni.setStorage 异步

2 uni.setStorageSync

 5.6.2 uni.getStorage & uni.getStorageSync

5.6.3 清除缓存

5.7 总结


5 API

API 概述 | uni-app官网

uniapp和微信小程序的文档是一致的。uniapp的api与微信小程序的api命名保持一致。

5.1 页面和路由

uniapp官网-组件-内置组件-路由和页面跳转-navigator,2种跳转方式:1 navigatei标签;2 uni.navigateTo跳转(js逻辑实现跳转)

uni.navigateTo(OBJECT) | uni-app官网

wx.switchTab(Object object) | 微信开放文档

区别在于微信小程序前面有wx.xxx,uniapp前面有uni.xxxx

5.1.1 uni.navigateTo

uni.navigateTo(OBJECT) | uni-app官网

相当于跳转到某一个页面。

navigate标签实现页面跳转

<navigator url="/pages/demo4/demo4" open-type="redirect">demo4</navigator>

效果

点击demo4,跳转到demo4页面

问题:我想让一个view块点击时实现页面跳转。

方法:给view加一个点击事件,在事件处理函数里用uni.navigateTo方法实现页面跳转。

<view style="height: 100px; width: 200px;background-color: aqua;" @click="goDemo4"> </view>

事件处理函数 

		methods: {goDemo4() {uni.navigateTo({url: '/pages/demo4/demo4'})}}
  • 总结:页面跳转形式
    • 1、navigator标签实现页面跳转
    • 2、uni.navigateTo方法实现页面跳转(在要跳转的view里添加click事件,事件处理函数里使用uni.navigateTo方法)

参数的其他属性

举例

		methods: {goDemo4() {uni.navigateTo({url: '/pages/demo4/demo4',success:res=> {console.log(res);}})}}

5.1.2 uni.redirectTo

uni.navigateTo(OBJECT) | uni-app官网

跳转时关闭当前页面

uni.navigateTo方法,在跳转时,跳转后的页面左上角有箭头,表示可以回到上一个页面。

而uni.redirectTo方法,跳转后的页面左上方没有箭头,即不能回到上一个页面。

5.1.3 uni.reLaunch

uni.navigateTo(OBJECT) | uni-app官网

打开导航页面(tabBar页面)。uni.navigateTo和uni.redirectTo方法不能打开导航页面。

比如项目里的about页面,就是导航页面。只能用uni.reLaunch方法跳转到。

使用

		methods: {goDemo4() {uni.reLaunch({url: '/pages/about/about'})}}

导航页面,比如首页,新闻列表和关于我们(about)是导航页面。

5.1.4 uni.switchTab

uni.navigateTo(OBJECT) | uni-app官网

与uni.reLaunch方法的功能是一致的,但是不能携带参数(uni.reLaunch可以携带参数)

下面num就是url里携带的参数,uni.reLaunch方法可以这样,uni.switchTab不可以。

		methods: {goDemo4() {uni.reLaunch({url: '/pages/about/about?num=3'})}}

5.1.5 uni.navigateBack

uni.navigateTo(OBJECT) | uni-app官网

返回上一个页面

在跳转后的页面中,view里绑定一个click事件,事件处理函数里使用uni.navigateBack返回上一页。

		<view class="" @click="goBack">< 返回上一页</view>
		methods: {goBack() {uni.navigateBack();}}

效果

点击箭头处,返回首页。

5.1.6 EventChannel

页面通信

5.1.7 uni.preloadPage

有平台差异,就不展开了。

5.2 onLoad接收页面跳转时的传参

5.2.1 vueroute路由传参

在navigator标签的url属性里添加字段wd字段,值为uniapp

<navigator url="/pages/demo4/demo4?wd=uniapp" open-type="redirect">demo4</navigator>

在index首页点击该标签,跳转到demo4页面,可以在地址栏看到成功传值

要想在页面获取到wd字段,可以使用vuerouter。要传递的wd字段在this.$route.query里

因此在生命周期mounted里,打印demo4页面接收的wd值。

		mounted() {console.log(this.$route.query.wd);}

上面使用navigator标签实现页面跳转,uni.navigateTo方法是一样的,也是在方法的url里添加要传递的字段。

需要兼容小程序

5.2.2 onLoad传参

小程序不支持以上的route路由跳转。

规范:使用小程序的onLoad生命周期,此时onLoad参数即为传递的参数。

		onLoad(e) {console.log(e);}

总结:可以直接使用onLoad获取传递的参数。

5.2.3 传递多个参数

url的参数用&连接。

<navigator url="/pages/demo4/demo4?wd=uniapp&author=瑶瑶" open-type="redirect">demo4</navigator>

效果

5.3 界面

比如页面提示“操作失败”、“发布成功”等提示信息。

uni.showToast(OBJECT) | uni-app官网

(这里新建一个demo2项目)

5.3.1 交互反馈

5.3.1.1 uni.showToast消息提示框

uni.showToast(OBJECT) | uni-app官网

使用

给图标加了个点击事件,事件处理函数如下

		methods: {clickImg() {uni.showToast({title:"感谢使用uniapp"})}}

点击图标的效果

默认成功的效果

失败效果

			clickImg() {uni.showToast({title:"操作失败",icon: 'error'})}

上面是H5运行,下面是小程序运行效果。

小程序的显示效果是一样的。

自定义图标路径

			clickImg() {uni.showToast({title:"操作失败",image:'/static/logo.png'})}

mask,是否显示透明蒙层。点击弹框,其实是显示了整个页面。此时无法点击页面其他位置。

要求点击弹窗时不可跳转demo页面。

此时将mask置为true

			clickImg() {uni.showToast({title:"操作失败",image:'/static/logo.png',mask: true})}

点击弹窗时,不可跳转页面demo

还有加载效果,icon取值为loading,显示加载效果。

none,不显示图标。

显示时间,duration:1500,显示1.5秒,一般设置为此值。

success,成功后的回调函数。一般不这样使用,而是额外使用setTimeout来实现延迟跳转。

			clickImg() {uni.showToast({title:"操作失败",icon: 'loading',mask: true,duration: 1000}),setTimeout(()=>{uni.navigateTo({url:'/pages/demo/demo'})},1500)}

执行完uni.showToast方法后,在1.5秒后跳转demo页面。

fail,失败的回调函数。

complete,接口调用结束的回调函数。

5.3.1.2 uni.hideToast

尺寸                                                                                                                                                    如果规定时间内没有取消掉,那么可以使用uni.hideToast隐藏                                                                                                              

5.3.1.3 uni.showLoading(OBJECT)显示loading提示框

uni.showToast(OBJECT) | uni-app官网

显示 loading 提示框, 需主动调用 uni.hideLoading 才能关闭提示框。

5.3.1.4 uni.hideLoading()

uni.showToast(OBJECT) | uni-app官网

5.3.1.5 uni.showModal(OBJECT)模态弹窗

显示模态弹窗,可以只有一个确定按钮,也可以同时有确定和取消按钮。类似于一个API整合了 html 中:alert、confirm。

有title、content、cancelText、cancelColor等属性

5.3.1.6 uni.showActionSheet(OBJECT)弹出操作菜单

uni.showToast(OBJECT) | uni-app官网

 示例

uni.showActionSheet({itemList: ['A', 'B', 'C'],success: function (res) {console.log('选中了第' + (res.tapIndex + 1) + '个按钮');},fail: function (res) {console.log(res.errMsg);}
});

自底部向上弹出操作菜单。

跟前面的组件picker底部选择器的作用是类似的。

5.3.2 设置导航条

uni.setNavigationBarTitle(OBJECT) | uni-app官网

导航条,就是下图最上方的uni-app区域

pages.json 页面路由 | uni-app官网

设置导航栏背景色,在pages.json中进行设置

		{"path" : "pages/demo/demo","style" : {"navigationBarTitleText" : "demo","navigationBarBackgroundColor": "#c00", //导航栏背景色"enablePullDownRefresh" : false}}

效果 

使用uniapp的api设置导航条属性,有以下方法,用于设置导航条1标题、2背景色(前景色(文字颜色)只能使用黑色或白色)、3显示加载效果(转圈)、4隐藏加载效果、5隐藏返回首页按钮(平台差异大,不建议使用),在当前页面的onLoad方法中进行调用,来对当前页面的导航条进行设置。

uni.setNavigationBarTitle(OBJECT)

uni.setNavigationBarColor(OBJECT)

uni.showNavigationBarLoading(OBJECT)

uni.hideNavigationBarLoading(OBJECT)

uni.hideHomeButton(OBJECT)

#

设置背景色功能,方便开发调试。

5.3.3 设置TabBar

TabBar设置见2.4.13【b站咸虾米】chapter1&2_uniapp介绍与uniapp基础_新课uniapp零基础入门到项目打包(微信小程序/H5/vue/安卓apk)全掌握_uniapp 打包微信app 配置-CSDN博客

对TabBar的内容、样式、隐藏、显示、某一项tabBar的右上角添加文本,显示tabBar某一项的右上角红点或隐藏、监听中间按钮的点击事件(只有app支持,平台差异大)。p39。

uni.setTabBarItem(OBJECT)

uni.setTabBarStyle(OBJECT)

uni.hideTabBar(OBJECT)

uni.showTabBar(OBJECT)

uni.setTabBarBadge(OBJECT)

uni.removeTabBarBadge(OBJECT)

uni.showTabBarRedDot(OBJECT)

uni.hideTabBarRedDot(OBJECT)

uni.onTabBarMidButtonTap(CALLBACK)

5.3.4 其他

其他的东西有需要可以去看文档。

uni.setBackgroundColor(OBJECT) | uni-app官网

5.4 网络

uni.request(OBJECT) | uni-app官网

5.4.1 发起请求

uni.request(OBJECT)

uni.configMTLS(OBJECT)

5.4.1.1 uni.request(OBJECT)

发起网络请求。

api:应用程序接口,Application Programming Interface

网上的免费api接口:随机小狗图片https://dog.ceo/api/breeds/image/random

ApiPost软件,测试接口

每个接口返回的对象不一样,这根据个人的习惯。

举例

注意:1 uni.request的使用,url,然后success回调函数,可以接收接口返回的值;

2 uni.showLoading,在发起请求前使用。在请求成功后,在success回调中使用uni.hideLoading方法关闭加载效果。

<template><view><image :src="picUrl" mode="aspectFill" @click="getPicUrl"></image></view>
</template><script>export default {data() {return {picUrl: ""}},methods: {getPicUrl() {uni.showLoading({title: "数据加载中"});uni.request({url: "https://dog.ceo/api/breeds/image/random",// 网络地址,api,使用后端完成success:res=>{console.log(res);this.picUrl = res.data.message;uni.hideLoading();//请求成功后隐藏加载效果}// 接收的回调函数})}},onLoad() {this.getPicUrl();}}
</script><style></style>

效果

点击图片,随机加载一张狗狗照片

(???,我不是猫门的吗) 

 5.4.2 uni.request的其他参数

1 timeout

请求超时

设置超时时间。

注意是number类型

				uni.request({url: "https://dog.ceo/api/breeds/image/random",// 网络地址,api,使用后端完成timeout:3000,success:res=>{console.log(res);this.picUrl = res.data.message;},// 接收的回调函数fail: err=> {console.log(err);},complete: ()=> {// 请求成功或失败都要隐藏加载效果uni.hideLoading();						}})

2 data

带传参的接口:随机小猫咪图片https://api.thecatapi.com/v1/images/search?limit=1

换接口的话,一定要自己打印看一下,因为可能新接口数据可能就变了。

可以看出,这次返回的data里有个数组。因此要用v-for来显示图片。

示例

这个v-for是我实现的,老师实现的话外层有个v-for的view,里面是item的image。

这里注意,api接口可以传参,这里的参数是limit=1.

<template><view><image v-for="item in picUrl" :src="item.url" mode="aspectFill" @click="getPicUrl"></image></view>
</template><script>export default {data() {return {picUrl: []}},methods: {getPicUrl() {uni.showLoading({title: "数据加载中"});uni.request({url: "https://api.thecatapi.com/v1/images/search?limit=2",// 网络地址,api,使用后端完成timeout:3000,success:res=>{console.log(res);this.picUrl = res.data;},// 接收的回调函数fail: err=> {console.log(err);},complete: ()=> {// 请求成功或失败都要隐藏加载效果uni.hideLoading();						}})}},onLoad() {this.getPicUrl();}}
</script>
<style>
</style>

效果

传参有2种写法,

写法1:在url后。

写法2:在参数data中添加传递的参数。

有的传参就不是url后面+?+字段=值,而是通过/进行分割,比如有道云。

比如有30条数据,在原本url基础长+/1,则会返回第1条数据。具体就不展开了。

 3 dataType

默认是json,也有text方式的,大多数都是json。

4 methods

请求发送的类型。

get和post请求的区别(面试题)

methods值也就是请求的类型,要跟后端沟通。

网络这部分暂时只讲uni.request这个请求。后面的其他知识这里就不讲了。

5.5 案例

5.5.1 list页面

https://jsonplaceholder.typicode.com

list页面实现获取列表详情展现到页面

接口返回的data是个数据,每个元素包括body和title,以及id等属性。

实现

<template><view class="out"><!-- 并且有id作为唯一标识符 --><view class="row" v-for="item in listArr" :key="item.id"><view class="title">{{ item.title }}</view><view class="content">{{ item.body }}</view></view></view>
</template><script>export default {data() {return {listArr: []}},methods: {getData() {uni.request({url: "https://jsonplaceholder.typicode.com/posts",success: res=> {console.log(res);this.listArr = res.data;}})}},onLoad() {this.getData();}}
</script><style>
.out{padding: 50px 30px;.row {padding: 20px 0;border-bottom: 1px dotted #e4e4e4;.title{font-size: 30px;padding-bottom: 15px;color:#333;}.content {font-size: 14px;			}}
}
</style>

其实跟5.4.2.2差不多了。

效果

5.5.2 跳转详情页

1 从list页面跳转详情页

跳转到新闻列表的详情页detail。

实现list页面向detail页面的跳转,使用uni.navigateTo。

一般布局改完了,就不再对template里的标签元素进行更改了。

给list的view添加点击事件。

详情页的参数是/posts/1(其实就是list页面请求的第一条数据)

list页面代码

<template><view class="out"><!-- 并且有id作为唯一标识符 --><view class="row" v-for="item in listArr" :key="item.id" @click="clickItem"><view class="title">{{ item.title }}</view><view class="content">{{ item.body }}</view></view></view>
</template><script>export default {data() {return {listArr: []}},methods: {getData() {uni.request({url: "https://jsonplaceholder.typicode.com/posts",success: res=> {console.log(res);this.listArr = res.data;}})},// 点击跳转详情clickItem() {uni.navigateTo({url:"/pages/detail/detail"})}},onLoad() {this.getData();}}
</script><style>
.out{padding: 50px 30px;.row {padding: 20px 0;border-bottom: 1px dotted #e4e4e4;.title{font-size: 30px;padding-bottom: 15px;color:#333;}.content {font-size: 14px;			}}
}
</style>

2 动态展示详情页数据
3 添加加载效果
4 列表页向详情页传参

传参通过uni.navigateTo实现。

list页面,点击事件添加所点击信息的id,通过uni.navigateTo拼接到url中,传递给detail页面。

url传参

detail页面对id进行获取,在onLoad中获取。

然后在请求接口的url里拼接获取到的id

然后就实现了点击列表的每条数据,都可以跳转到对应的详情页面。

 5.5.3 动态展示每条详情下的评论列表

JSONPlaceholder - Free Fake REST API

详情

实现 

1 评论模块的template

注意:评论模块还是在detail详情页里,即在具体的新闻信息下面

<template><view class=""><view class="detail"><view class="title">{{ objData.title}}</view><view class="content">{{ objData.body }}</view></view><view class="comment"><view class="text">评论</view><view class="row"><view class="top"><view class="name">名称</view><view class="email">邮箱</view></view><view class="body">评论的内容</view></view></view></view>
</template>
2 样式
.comment {padding: 30px;background: #f8f8f8;.text {font-size: 46px;margin-bottom: 30px;}.row {border-bottom: 1px solid #e8e8e8;padding: 20px, 0;.top {display: flex;justify-content: space-between;font-size: 22px;color: #999;padding-bottom: 10px;}.body {font-size: 28px;color: #555;}}
}

效果

3 逻辑

注意:评论是根据id来的,这个id是公用的,不只可以查询具体的新闻详情,还可以查询新闻详情下对应的评论。

注意:url用一对反引号``,变量用${}包裹,例如url:`https://jsonplaceholder.typicode.com/posts/${this.id}/comments` 

使用这种方式就不需要使用加号来拼接变量了,例如url:"https://jsonplaceholder.typicode.com/posts/"+this.id,

实现

首先是获取评论的方法

注意这里的url形式,与获取详情的url不同。

			getComments() {uni.request({url:`https://jsonplaceholder.typicode.com/posts/${this.id}/comments`,success: res=> {console.log(res);this.comments = res.data;}})},

且初始化评论变量

		data() {return {objData: {},id: 1,comments: []}},

且方法要在onLoad里调用

		onLoad(e) {	this.id = e.id;this.getDetail();this.getComments();}

最后修改一下template里的数据

		<view class="comment"><view class="text">评论</view><view class="row" v-for="item in comments" :key="item.id"><view class="top"><view class="name">{{ item.name }}</view><view class="email">{{ item.email }}</view></view><view class="body">{{ item.body }}</view></view></view>

效果

这里老师用的字体单位都是rpx,我用的都是px,所以字体会变大很多。这不重要。

问题:有的新闻评论很多,加载比较慢

解决:添加加载效果。这里就不加了。

 完整detial页面代码

<template><view class=""><view class="detail"><view class="title">{{ objData.title}}</view><view class="content">{{ objData.body }}</view></view><view class="comment"><view class="text">评论</view><view class="row" v-for="item in comments" :key="item.id"><view class="top"><view class="name">{{ item.name }}</view><view class="email">{{ item.email }}</view></view><view class="body">{{ item.body }}</view></view></view></view>
</template><script>export default {data() {return {objData: {},id: 1,comments: []}},methods: {getComments() {uni.request({url:`https://jsonplaceholder.typicode.com/posts/${this.id}/comments`,success: res=> {console.log(res);this.comments = res.data;}})},getDetail() {uni.showLoading({title:'数据加载中',mask: true})uni.request({url:"https://jsonplaceholder.typicode.com/posts/"+this.id,success: res=>{console.log(res);// debugger;this.objData = res.data;console.log(this.id);},complete: res=> {uni.hideLoading();}})}			},onLoad(e) {	this.id = e.id;this.getDetail();this.getComments();}}
</script><style>
.detail {padding: 20px 0;border-bottom: 1px dotted #e4e4e4;.title {font-size: 30px;padding-bottom: 15px;color:#333;}.content {font-size: 14px;			}
}
.comment {padding: 30px;background: #f8f8f8;.text {font-size: 46px;margin-bottom: 30px;}.row {border-bottom: 1px solid #e8e8e8;padding: 20px, 0;.top {display: flex;justify-content: space-between;font-size: 22px;color: #999;padding-bottom: 10px;}.body {font-size: 28px;color: #555;}}
}
</style>

5.6 uniapp数据缓存Storage

uni.setStorage(OBJECT) @setstorage | uni-app官网

数据缓存非常重要,是一个永久化的存储,有助于在页面间跳转把一些参数进行存储,比如登陆信息、用户信息存储在本地。随便一个网站都有数据缓存,比如百度,在检查->Application中。

这有助于在跳转其他页面的时候直接读取缓存信息。

5.6.1 uni.setStorage & uni.setStorageSync

将数据存储在本地缓存中指定的 key 中,会覆盖掉原来该 key 对应的内容,这是一个异步接口。

uni.setStorage:异步接口,有success参数。

uni.setStorageSync:同步接口,没有success参数。

其他方法也是,每个异步方法都对应有一个同步方法。

1 uni.setStorage 异步

在首页index的onLoad方法里使用uni.setStorage方法

		onLoad() {uni.setStorage({key: "demo",data: 123123,success:res=> {console.log(res)}})},

效果

可以看到,设置成功,且打印成功

2 uni.setStorageSync

其实没有必要知道success,所以用uni.setStorageSync就可以了。

		onLoad() {uni.setStorageSync('storage_key', 'hello');},

效果

无论怎么刷新,依然存在。即使关掉页面,再次打开的时候在Local Storage里依然存在,但是Session就不一样了,页面关掉就没了。

Local Storage用来记录登录信息、用户信息等页面非重要信息。

 5.6.2 uni.getStorage & uni.getStorageSync

uni.getStorage: 从本地缓存中异步获取指定 key 对应的内容。。

uni.getStorageSync: 从本地缓存中同步获取指定 key 对应的内容。

		onLoad() {uni.setStorageSync('storage_key', 'hello');let mykey = uni.getStorageSync('storage_key');console.log(mykey);},

效果

5.6.3 清除缓存

uni.removeStorage(OBJECT)

uni.removeStorageSync(KEY)

uni.clearStorage()

uni.clearStorageSync()

搜索记录,在app上的搜索,一般都会存储在缓存中。

 uni.removeStorageSync(KEY),清除某一项缓存记录。

uni.clearStorageSync():清理本地所有缓存。谨慎使用。

5.7 总结

uniCloud,云存储,可以不借助后端语言,去部署后台程序,前端进行调用就行。

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

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

相关文章

【Java程序设计】【C00287】基于Springboot的疫情防控期间某村外出务工人员管理系统(有论文)

基于Springboot的疫情防控期间某村外出务工人员管理系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的疫情防控期间某村外出务工人员信息管理系统 本系统分为系统功能模块、管理员功能模块、用户功能模块、采集…

两结点之间创建简单的梁单元并进行线性网格划分的方法

进入1D面板->进入bars界面 https://zhuanlan.zhihu.com/p/613163100

【Unity】Unity与安卓交互

问题描述 Unity和安卓手机进行交互&#xff0c;是我们开发游戏中最常见的场景。本教程将从一个简单的例子来演示一下。 本教程需要用到Android Studio2021.1.1 1.Android Studio新建一个工程 2.选择Empty Activity 然后点击Next 3.点击Finish完成创建 4.选择File-New-New Mo…

Linux:Jenkins用户权限和管理

1.下载插件 由于Jenkins的默认权限管理并不是很精细所以我们安装一个插件进行权限的一个管理 插件名称为&#xff1a;Role-based Authorization Strategy 安装完插件我们再去配置一下 进入全局安全配置 选择这个Role-Based Strategy策略然后保存 2.创建角色 我们这里主要使…

Odoo系统安装部署并结合内网穿透实现固定域名访问本地ERP系统

文章目录 前言1. 下载安装Odoo&#xff1a;2. 实现公网访问Odoo本地系统&#xff1a;3. 固定域名访问Odoo本地系统 前言 Odoo是全球流行的开源企业管理套件&#xff0c;是一个一站式全功能ERP及电商平台。 开源性质&#xff1a;Odoo是一个开源的ERP软件&#xff0c;这意味着企…

企微hook框架

https://wwm.lanzoum.com/ipUTp1ot1twh 密码:hvev 免费的企微框架 支持文本消息&#xff0c;图片消息&#xff0c;视频消息&#xff0c;文件消息。 其他可自行下载测试。 有兴趣可以进群交流。720192224 BOOL WxWorkSendData(string data) { WX_GETOBJDATA ob…

[C++]18:set和map的使用

set和map的使用 一.关联式容器&#xff1a;1.简单概念&#xff1a;2.<key , value>--->键值对3.set和map的底层结构&#xff08;平衡搜索树或者红黑树&#xff09; 二.set1.set (排序不重复)1.模板参数&#xff1a;2.set是一个有序存储的容器&#xff1a;3.set中每个数…

Vi/Vim 使用小窍门,如何消除搜索后的关键字高亮

Vim/Vi 基本上是 *nix 世界最受欢迎的编辑器了&#xff0c;不知道为什么&#xff0c;一直以来觉得和 Emacs 比起来&#xff0c;Vim 更加有亲和力。用起来很舒服。 今天就记录一个困扰了我很久的问题。 大家应该都知道&#xff0c;在 Vi 里面如果要搜索某个关键字&#xff0c;…

ChatGPT调教指南 | 咒语指南 | Prompts提示词教程(三)

在人工智能成为我们日常互动中无处不在的一部分的时代&#xff0c;与大型语言模型(llm)有效沟通的能力是无价的。“良好提示的26条原则”为优化与这些复杂系统的交互提供了全面的指导。本指南证明了人类和人工智能之间的微妙关系&#xff0c;强调清晰、专一和结构化的沟通方法。…

vscode输入英文时字体之间的间隔突然变大,似中文

vscode输入英文时字体之间的间隔突然变大&#xff0c;似中文 主要原因&#xff1a; 是由于输入法变成全角模式了。原因可能是不小心按了 shift空格键快捷键造成的。 正常情况&#xff0c;全角就是字母和数字等与汉字占等宽位置的字。 半角就是ASCII方式的字符&#xff0c;在没…

Sora:视频生成模型作为世界模拟器

我们探索了视频数据上生成模型的大规模训练。具体来说&#xff0c;我们在可变持续时间、分辨率和长宽比的视频和图像上联合训练文本条件扩散模型。我们利用了一个在视频和图像潜在码的时空块上操作的变压器架构。我们规模最大的模型 Sora 能够生成一分钟的高保真视频。我们的结…

第十四章 Linux面试题

第十四章 Linux面试题 日志t.log(访问量)&#xff0c; 将各个ip地址截取&#xff0c;并统计出现次数&#xff0c;并按从大到小排序(腾 讯) http://192. 168200.10/index1.html http://192. 168.200. 10/index2.html http:/192. 168 200.20/index1 html http://192. 168 200.30/…

c++学习记录 STL初识—vector存放内置数据类型

#include<iostream> using namespace std; #include<vector> #include<algorithm>//标准算法头文件//容器&#xff1a;vector //算法&#xff1a;for_each //迭代器&#xff1a;vector<int>::iteratorvoid myPrint(int val) {cout << val <&l…

微服务篇之分布式系统理论

一、CAP定理 1.什么是CAP 1998年&#xff0c;加州大学的计算机科学家 Eric Brewer 提出&#xff0c;分布式系统有三个指标&#xff1a; 1. Consistency&#xff08;一致性&#xff09;。 2. Availability&#xff08;可用性&#xff09;。 3. Partition tolerance &#xff0…

力扣 187. 重复的DNA序列

1.题目 DNA序列 由一系列核苷酸组成&#xff0c;缩写为 A, C, G 和 T.。 例如&#xff0c;"ACGAATTCCG" 是一个 DNA序列 。 在研究 DNA 时&#xff0c;识别 DNA 中的重复序列非常有用。 给定一个表示 DNA序列 的字符串 s &#xff0c;返回所有在 DNA 分子中出现不止一…

医院LIS(全称Laboratory Information Management System)系统源码

目录 一、医院LIS系统概况 二、医院LIS系统建设必要性 三、为什么要使用LIS系统 四、技术框架 &#xff08;1&#xff09;总体框架 &#xff08;2&#xff09;技术细节 &#xff08;3&#xff09;LIS主要功能模块 五、LIS系统优势 &#xff08;1&#xff09;客户/用户…

JAVA工程师面试专题-《Mysql》篇

目录 一、基础 1、mysql可以使用多少列创建索引&#xff1f; 2、mysql常用的存储引擎有哪些 3、MySQL 存储引擎&#xff0c;两者区别 4、mysql默认的隔离级别 5、数据库三范式 6、drop、delete 与 truncate 区别&#xff1f; 7、IN与EXISTS的区别 二、索引 1、索引及索…

构建SatelliteRpc:基于Kestrel的RPC框架(整体设计篇)

背景 之前在.NET 性能优化群内交流时&#xff0c;我们发现很多朋友对于高性能网络框架有需求&#xff0c;需要创建自己的消息服务器、游戏服务器或者物联网网关。但是大多数小伙伴只知道 DotNetty&#xff0c;虽然 DotNetty 是一个非常优秀的网络框架&#xff0c;广泛应用于各种…

二叉树高频题目(不含树形DP)

二叉树高频题 二叉树的层序遍历 . - 力扣&#xff08;LeetCode&#xff09; 按点弹出 class Solution { public:vector<vector<int>> levelOrder(TreeNode* root) {vector<vector<int>>ans;if(root!nullptr){queue<TreeNode*>q;unordered_map&…

遥感、航拍、影像等用于深度学习的数据集集合

遥感图像的纹理特征异常繁杂&#xff0c;地貌类型多变&#xff0c;人工提取往往存在特征提取困难和特征提取不准确的问题&#xff0c;同时&#xff0c;在这个过程中还会耗费海量的人力物力。随着计算力的突破、数据洪流的暴发和算法的不断创新&#xff0c;在具有鲜明“大数据”…