高效实现uni-app页面路由模块化及路径个性化
高效实现uni-app页面路由模块化及路径个性化
在传统的uni-app开发中,我们被限制在手动维护pages.json文件中,以定义页面和页面样式特性。然而,随着应用程序复杂度的增加,这种方式会显著增加开发者的心智负担。面对庞大的项目和频繁的页面更新,pages.json的管理变得非常繁琐和不便。
然而,幸运的是,采用uni-simple-router后,这些问题迎刃而解。uni-simple-router为我们提供了一种更灵活、更高效的方式来处理页面路由。不再依赖于pages.json,我们可以动态地创建页面路由,甚至允许构建复杂的页面结构,如动态路由和嵌套路由等。
创建一个传统页面
传统方案
// pages.json
{
"pages": [
{
"path": "pages/index/index"
}
],
"globalStyle": {
"navigationBarTextStyle": "black",
"navigationBarTitleText": "uni-app",
"navigationBarBackgroundColor": "#F8F8F8",
"backgroundColor": "#F8F8F8"
}
}
使用 uni-simple-router
// router.js
const router = createRouter({
routes:[{
path:`/`,
component:__dynamicImportComponent__(`@/pages/index/index.vue`,{
pageType:`top`
})
}]
})
// pages.json
{
"globalStyle": {
"navigationBarTextStyle": "black",
"navigationBarTitleText": "uni-app",
"navigationBarBackgroundColor": "#F8F8F8",
"backgroundColor": "#F8F8F8"
}
}
阅读须知:
为了减轻阅读复杂度,我们去除了一些非必要的代码,仅提供了绝对有用的部分。如果你想了解详细,可以参考从显示 Hello Word 开始。
在uni-simple-router中注册页面非常简单和方便。要注册一个页面,只需使用__dynamicImportComponent__辅助函数,并传入所需的组件即可。这样做会使页面组件根据不同平台进行编译,以适应各种环境。
此外,当注册顶级页面时,你还可以轻松配置uni-app的页面样式,支持所有uni-app页面样式的设置,详细你可以在这里查看到。
为顶级页面设置样式
正如前文所述,当你在uni-simple-router中注册一个顶级页面时,该页面会继承uni-app的所有属性和事件。这使得在__dynamicImportComponent__函数中设置页面的样式和其他属性与在pages.json文件中设置样式效果一样,依然有效。
传统方案
// pages.json
{
"pages": [{
"path": "pages/index/index",
"style": {
"navigationBarTitleText":"uni-simple-router",
"navigationBarBackgroundColor":"#42b883",
"navigationBarTextStyle":"white"
}
}],
"globalStyle": {
"navigationBarTextStyle": "black",
"navigationBarTitleText": "uni-app",
"navigationBarBackgroundColor": "#F8F8F8",
"backgroundColor": "#F8F8F8"
}
}
使用 uni-simple-router
// router.js
const router = createRouter({
routes:[{
path:`/`,
component:__dynamicImportComponent__(`@/pages/index/index.vue`,{
pageType:`top`,
style:{
navigationBarTitleText:`uni-simple-router`,
navigationBarBackgroundColor:`#42b883`,
navigationBarTextStyle:`white`
}
})
}]
})
// pages.json
{
"globalStyle": {
"navigationBarTextStyle": "black",
"navigationBarTitleText": "uni-app",
"navigationBarBackgroundColor": "#F8F8F8",
"backgroundColor": "#F8F8F8"
}
}
创建页面组件分包
除了能根据不同平台适配导入组件,__dynamicImportComponent__函数还允许你在该函数中设置组件分包。
假设你现在有如下两个页面配置:
// router.js
const router = createRouter({
routes:[{
path:`/`,
component:__dynamicImportComponent__(`@/pages/index/index.vue`,{
pageType:`top`,
package: {
type: `child`
},
})
},{
path:`/pkg1`,
component:__dynamicImportComponent__(`@/pkg/pkg1/index.vue`,{
pageType:`top`,
package: {
type: `child`,
name: `pkg/pkg1`
},
})
}]
})
相当于在 pages.json 文件中配置 subPackages 字段一样:
{
"subPackages": [
{
"root": "pkg/pkg1",
"pages": [{
"path": "index",
}]
},
{
"root": "pages",
"pages": [{
"path": "index/index",
}]
}
],
}
如需了解详细,请查看 将导入的组件分包
创建嵌套页面结构
在uni-app开发中,对于嵌套页面的需求非常普遍,然而,官方并没有提供内建的嵌套路由解决方案,这导致开发者不得不寻找其他替代方案。在截至uni-simple-router v3版本发布之前,跨端嵌套解决方案相对较难实现。
由于官方未提供直接支持,开发者在嵌套页面的实现上面临一些挑战。不过,uni-simple-router v3版本的推出为开发者带来了更为便捷和灵活的解决方案,使嵌套页面的使用变得更加简单和高效。
通过使用uni-simple-router v3版本,开发者现在可以更方便地实现嵌套页面,无论是在同一端还是跨多端的情况下,都能得到很好的支持。这为uni-app开发带来了更多可能性和创意的空间,使开发过程变得更加顺畅和愉快。
// router.js
const router = createRouter({
routes:[{
path: '/admin',
component: __dynamicImportComponent__(`@/pages/AdminLayout.vue`,{
pageType:`top`,
}),
children: [
{
path: 'dashboard',
component: __dynamicImportComponent__(`@/pages/DashboardPage.vue`)
},
{
path: 'users',
component: __dynamicImportComponent__(`@/pages/UsersPage.vue`)
},
{
path: 'settings',
component: __dynamicImportComponent__(`@/pages/SettingsPage.vue`)
}
]
}];
})
<!-- AdminLayout.vue -->
<template>
<div>
<sidebar></sidebar>
<main>
<simple-router-view></simple-router-view>
</main>
</div>
</template>
通过使用嵌套路由,你可以构建出更复杂的页面布局和导航结构,将不同功能模块拆分成独立的路由组件,并嵌套在父级路由中,实现更灵活和可扩展的应用程序架构,详细请查看 嵌套路由。
自定义路径匹配
在uni-simple-router中,当你不再使用pages.json来定义页面时,你可以轻松地自定义path,而不再担心路径无法自定义的问题。
通过使用__dynamicImportComponent__函数来导入组件,并在路由配置中进行自定义path的设置,你完全可以根据自己的需求来定义页面的路径。这种灵活性让你能够更加自由地组织和管理页面结构,而无需受限于pages.json的固定配置。
伪静态格式
- router.js
const router = createRouter({ platform: process.env.VUE_APP_PLATFORM, routes:[{ path:`/class/:id(\\d+).html`, component: Home }] }) - URL表现
http://localhost:5174/#/class/6.html
静态路径格式
- router.js
const router = createRouter({ platform: process.env.VUE_APP_PLATFORM, routes:[{ path:`/home`, component: Home }] }) - URL表现
http://localhost:5174/#/home
复杂分类
- router.js
const router = createRouter({ platform: process.env.VUE_APP_PLATFORM, routes:[{ path:`/product/:category(\\w+)/:subCategory(\\w+)`, component: Product }] }) - URL表现
http://localhost:5174/#/product/electronics/phones
指定字符
- router.js
const router = createRouter({ platform: process.env.VUE_APP_PLATFORM, routes:[{ path:`/category/:name(\\w+)`, component: Category }] }) - URL表现
http://localhost:5174/#/category/books
如果了解更多你可以查阅 路由匹配
高效实现uni-app页面路由模块化及路径个性化
在传统的uni-app开发中,我们被限制在手动维护pages.json文件中,以定义页面和页面样式特性。然而,随着应用程序复杂度的增加,这种方式会显著增加开发者的心智负担。面对庞大的项目和频繁的页面更新,pages.json的管理变得非常繁琐和不便。
然而,幸运的是,采用uni-simple-router后,这些问题迎刃而解。uni-simple-router为我们提供了一种更灵活、更高效的方式来处理页面路由。不再依赖于pages.json,我们可以动态地创建页面路由,甚至允许构建复杂的页面结构,如动态路由和嵌套路由等。
创建一个传统页面
传统方案
// pages.json
{
"pages": [
{
"path": "pages/index/index"
}
],
"globalStyle": {
"navigationBarTextStyle": "black",
"navigationBarTitleText": "uni-app",
"navigationBarBackgroundColor": "#F8F8F8",
"backgroundColor": "#F8F8F8"
}
}
使用 uni-simple-router
// router.js
const router = createRouter({
routes:[{
path:`/`,
component:__dynamicImportComponent__(`@/pages/index/index.vue`,{
pageType:`top`
})
}]
})
// pages.json
{
"globalStyle": {
"navigationBarTextStyle": "black",
"navigationBarTitleText": "uni-app",
"navigationBarBackgroundColor": "#F8F8F8",
"backgroundColor": "#F8F8F8"
}
}
阅读须知:
为了减轻阅读复杂度,我们去除了一些非必要的代码,仅提供了绝对有用的部分。如果你想了解详细,可以参考从显示 Hello Word 开始。
在uni-simple-router中注册页面非常简单和方便。要注册一个页面,只需使用__dynamicImportComponent__辅助函数,并传入所需的组件即可。这样做会使页面组件根据不同平台进行编译,以适应各种环境。
此外,当注册顶级页面时,你还可以轻松配置uni-app的页面样式,支持所有uni-app页面样式的设置,详细你可以在这里查看到。
为顶级页面设置样式
正如前文所述,当你在uni-simple-router中注册一个顶级页面时,该页面会继承uni-app的所有属性和事件。这使得在__dynamicImportComponent__函数中设置页面的样式和其他属性与在pages.json文件中设置样式效果一样,依然有效。
传统方案
// pages.json
{
"pages": [{
"path": "pages/index/index",
"style": {
"navigationBarTitleText":"uni-simple-router",
"navigationBarBackgroundColor":"#42b883",
"navigationBarTextStyle":"white"
}
}],
"globalStyle": {
"navigationBarTextStyle": "black",
"navigationBarTitleText": "uni-app",
"navigationBarBackgroundColor": "#F8F8F8",
"backgroundColor": "#F8F8F8"
}
}
使用 uni-simple-router
// router.js
const router = createRouter({
routes:[{
path:`/`,
component:__dynamicImportComponent__(`@/pages/index/index.vue`,{
pageType:`top`,
style:{
navigationBarTitleText:`uni-simple-router`,
navigationBarBackgroundColor:`#42b883`,
navigationBarTextStyle:`white`
}
})
}]
})
// pages.json
{
"globalStyle": {
"navigationBarTextStyle": "black",
"navigationBarTitleText": "uni-app",
"navigationBarBackgroundColor": "#F8F8F8",
"backgroundColor": "#F8F8F8"
}
}
创建页面组件分包
除了能根据不同平台适配导入组件,__dynamicImportComponent__函数还允许你在该函数中设置组件分包。
假设你现在有如下两个页面配置:
// router.js
const router = createRouter({
routes:[{
path:`/`,
component:__dynamicImportComponent__(`@/pages/index/index.vue`,{
pageType:`top`,
package: {
type: `child`
},
})
},{
path:`/pkg1`,
component:__dynamicImportComponent__(`@/pkg/pkg1/index.vue`,{
pageType:`top`,
package: {
type: `child`,
name: `pkg/pkg1`
},
})
}]
})
相当于在 pages.json 文件中配置 subPackages 字段一样:
{
"subPackages": [
{
"root": "pkg/pkg1",
"pages": [{
"path": "index",
}]
},
{
"root": "pages",
"pages": [{
"path": "index/index",
}]
}
],
}
如需了解详细,请查看 将导入的组件分包
创建嵌套页面结构
在uni-app开发中,对于嵌套页面的需求非常普遍,然而,官方并没有提供内建的嵌套路由解决方案,这导致开发者不得不寻找其他替代方案。在截至uni-simple-router v3版本发布之前,跨端嵌套解决方案相对较难实现。
由于官方未提供直接支持,开发者在嵌套页面的实现上面临一些挑战。不过,uni-simple-router v3版本的推出为开发者带来了更为便捷和灵活的解决方案,使嵌套页面的使用变得更加简单和高效。
通过使用uni-simple-router v3版本,开发者现在可以更方便地实现嵌套页面,无论是在同一端还是跨多端的情况下,都能得到很好的支持。这为uni-app开发带来了更多可能性和创意的空间,使开发过程变得更加顺畅和愉快。
// router.js
const router = createRouter({
routes:[{
path: '/admin',
component: __dynamicImportComponent__(`@/pages/AdminLayout.vue`,{
pageType:`top`,
}),
children: [
{
path: 'dashboard',
component: __dynamicImportComponent__(`@/pages/DashboardPage.vue`)
},
{
path: 'users',
component: __dynamicImportComponent__(`@/pages/UsersPage.vue`)
},
{
path: 'settings',
component: __dynamicImportComponent__(`@/pages/SettingsPage.vue`)
}
]
}];
})
<!-- AdminLayout.vue -->
<template>
<div>
<sidebar></sidebar>
<main>
<simple-router-view></simple-router-view>
</main>
</div>
</template>
通过使用嵌套路由,你可以构建出更复杂的页面布局和导航结构,将不同功能模块拆分成独立的路由组件,并嵌套在父级路由中,实现更灵活和可扩展的应用程序架构,详细请查看 嵌套路由。
自定义路径匹配
在uni-simple-router中,当你不再使用pages.json来定义页面时,你可以轻松地自定义path,而不再担心路径无法自定义的问题。
通过使用__dynamicImportComponent__函数来导入组件,并在路由配置中进行自定义path的设置,你完全可以根据自己的需求来定义页面的路径。这种灵活性让你能够更加自由地组织和管理页面结构,而无需受限于pages.json的固定配置。
伪静态格式
- router.js
const router = createRouter({ platform: process.env.VUE_APP_PLATFORM, routes:[{ path:`/class/:id(\\d+).html`, component: Home }] }) - URL表现
http://localhost:5174/#/class/6.html
静态路径格式
- router.js
const router = createRouter({ platform: process.env.VUE_APP_PLATFORM, routes:[{ path:`/home`, component: Home }] }) - URL表现
http://localhost:5174/#/home
复杂分类
- router.js
const router = createRouter({ platform: process.env.VUE_APP_PLATFORM, routes:[{ path:`/product/:category(\\w+)/:subCategory(\\w+)`, component: Product }] }) - URL表现
http://localhost:5174/#/product/electronics/phones
指定字符
- router.js
const router = createRouter({ platform: process.env.VUE_APP_PLATFORM, routes:[{ path:`/category/:name(\\w+)`, component: Category }] }) - URL表现
http://localhost:5174/#/category/books
如果了解更多你可以查阅 路由匹配
收起阅读 »G-Media 2023 | 每日互动使用大模型实现“智选人群”
如今“百模大战”,每日互动在持续打磨数据营销服务能力的同时,密切关注行业趋势,积极探索AIGC、大模型等前沿技术在品牌营销等垂直领域的应用。7月19日,G-Media 2023正式开幕。现场,每日互动(个推)创始人、CEO方毅以“Grow with Evolution:要变,还得是绝活儿”为主题发表了精彩演讲,结合当下技术和行业热点,方毅分享了每日互动在大模型应用方面的探索。
方毅认为,对于品牌营销等垂直行业来讲,要真正发挥出大模型的巨大能力,还需要把模型用“活”,即结合“行业知识”对大模型进行特定的训练,让大模型听得懂“行话”。只有这样,一线的营销从业人员才能自如、灵活地使用日常惯用的“行话”向大模型提问,大模型也才能发挥出自己的实力,帮助解决具体业务场景中的问题。
在G-Media 2021,每日互动方毅曾分享过独创的“数据营销五步法”。“五步法”沉淀了每日互动的数据建模经验,其核心是将品牌一方数据作为“Y值”,让AI模型去分析和学习种子人群的线上线下偏好特征,形成智能预测能力,然后去做相似性扩量,找到更多的目标TA。
但是对于无法提供“Y值”的品牌,该如何进行相似性扩量呢?懂“行话”的大模型就能很好地解决这一问题。每日互动把自身在品牌营销领域沉淀的丰富经验、Know-how,打造形成行业知识库,“喂”给大模型学习,让大模型能够听得懂行话并使用行话输出它对品牌、消费人群的人文特征理解;同时使用编织技术,实现行业知识库和每日互动大数据标签特征库的打通,让大模型能够结合每日互动的数据能力,帮助品牌客户洞察细分人群的数据特征,并在每日互动的全网流量池中进行相似性扩量。
方毅介绍,每日互动正在打造的“智选人群”功能,就是这样的实现原理。营销人员可以像日常对话一样,向大模型提问,比如“新能源车主人群有哪些特征”。经过每日互动行业知识库和历史经验精调后的大模型,不仅能够理解用户的语言,还能快速输出匹配的洞察结果和人群方案,更精准地在每日互动流量池中进行相似人群的扩量。品牌直接调用每日互动的“智选人群”功能,就可以快速地对细分人群进行画像洞察,并加速实现相似性扩量,智能定向高潜TA,提升TA浓度,将“对话式生成”的目标人群一键对接多种媒体平台,高效完成广告投放,大幅提升营销效能。
方毅表示,正如今年G-Media峰会的主题——“信任与信心”,每日互动将不断升级数据营销服务能力,同时也将以互信为前提,和各行业伙伴携手,共同建设一个安全、高效、透明的品牌数字化营销新生态,提振行业各方对于可持续增长的信心。
如今“百模大战”,每日互动在持续打磨数据营销服务能力的同时,密切关注行业趋势,积极探索AIGC、大模型等前沿技术在品牌营销等垂直领域的应用。7月19日,G-Media 2023正式开幕。现场,每日互动(个推)创始人、CEO方毅以“Grow with Evolution:要变,还得是绝活儿”为主题发表了精彩演讲,结合当下技术和行业热点,方毅分享了每日互动在大模型应用方面的探索。
方毅认为,对于品牌营销等垂直行业来讲,要真正发挥出大模型的巨大能力,还需要把模型用“活”,即结合“行业知识”对大模型进行特定的训练,让大模型听得懂“行话”。只有这样,一线的营销从业人员才能自如、灵活地使用日常惯用的“行话”向大模型提问,大模型也才能发挥出自己的实力,帮助解决具体业务场景中的问题。
在G-Media 2021,每日互动方毅曾分享过独创的“数据营销五步法”。“五步法”沉淀了每日互动的数据建模经验,其核心是将品牌一方数据作为“Y值”,让AI模型去分析和学习种子人群的线上线下偏好特征,形成智能预测能力,然后去做相似性扩量,找到更多的目标TA。
但是对于无法提供“Y值”的品牌,该如何进行相似性扩量呢?懂“行话”的大模型就能很好地解决这一问题。每日互动把自身在品牌营销领域沉淀的丰富经验、Know-how,打造形成行业知识库,“喂”给大模型学习,让大模型能够听得懂行话并使用行话输出它对品牌、消费人群的人文特征理解;同时使用编织技术,实现行业知识库和每日互动大数据标签特征库的打通,让大模型能够结合每日互动的数据能力,帮助品牌客户洞察细分人群的数据特征,并在每日互动的全网流量池中进行相似性扩量。
方毅介绍,每日互动正在打造的“智选人群”功能,就是这样的实现原理。营销人员可以像日常对话一样,向大模型提问,比如“新能源车主人群有哪些特征”。经过每日互动行业知识库和历史经验精调后的大模型,不仅能够理解用户的语言,还能快速输出匹配的洞察结果和人群方案,更精准地在每日互动流量池中进行相似人群的扩量。品牌直接调用每日互动的“智选人群”功能,就可以快速地对细分人群进行画像洞察,并加速实现相似性扩量,智能定向高潜TA,提升TA浓度,将“对话式生成”的目标人群一键对接多种媒体平台,高效完成广告投放,大幅提升营销效能。
方毅表示,正如今年G-Media峰会的主题——“信任与信心”,每日互动将不断升级数据营销服务能力,同时也将以互信为前提,和各行业伙伴携手,共同建设一个安全、高效、透明的品牌数字化营销新生态,提振行业各方对于可持续增长的信心。
收起阅读 »Android应用签名MD5格式不正确,请填写MD5格式的签名
申请一键登录时,添加应用,提示“Android应用签名MD5格式不正确,请填写MD5格式的签名”。
原因是jdk的版本不同生成的值不同,可以使用java1.8.0_201版本,亲测可以。
点击下面的链接,找到201版本的jdk版本下载就好了。
java1.8.0_201
申请一键登录时,添加应用,提示“Android应用签名MD5格式不正确,请填写MD5格式的签名”。
原因是jdk的版本不同生成的值不同,可以使用java1.8.0_201版本,亲测可以。
点击下面的链接,找到201版本的jdk版本下载就好了。
java1.8.0_201
IOS 监听APP退出
let NSNotificationCenterClass = plus.ios.importClass("NSNotificationCenter");
let NSNotificationCenterObj = NSNotificationCenterClass.defaultCenter();
let num = 0 ;
plus.ios.invoke(NSNotificationCenterObj, "addObserverForName:object:queue:usingBlock:",
"UIApplicationWillTerminateNotification", null, null, function() {
// UIApplicationWillTerminateNotification 是应用即将终止的时候调用,但是我发现并没有调用 ,
// 得出最终结论 :
// 1.应用在前台,双击 Home 键 ,终止应用 , UIApplicationWillTerminateNotification 调用
// 2.应用在前台,单击 Home 键,进入桌面 , 再终止应用 UIApplicationWillTerminateNotification 不会被调用.
//应用在前台,双击Home键,杀掉调用 ,但是应用在后台,双击Home键, 再终止应用不会被通知
});
plus.ios.invoke(NSNotificationCenterObj, "addObserverForName:object:queue:usingBlock:",
"UIApplicationDidBecomeActiveNotification", null, null, function(){
num = 0;
console.log('启动');
});
plus.ios.invoke(NSNotificationCenterObj, "addObserverForName:object:queue:usingBlock:",
"UIApplicationDidEnterBackgroundNotification", null, null, function(){
num++
if(num ==2){
//杀死APP进程关闭直播
uni.$TrtcCloud.exitRoom();
}
console.log(num)
});
觉得用uni-app onHide生命周期也可以实现 ,因为无论是退出APP还是隐藏在后台onHide都会被执行,那么做个定时任务通知服务端APP退出了。
或者说做个debounce在连续的操作中,无论进行了多长时间,只有某一次的操作后在指定的时间内没有再操作,这一次才被判定有效 。
let NSNotificationCenterClass = plus.ios.importClass("NSNotificationCenter");
let NSNotificationCenterObj = NSNotificationCenterClass.defaultCenter();
let num = 0 ;
plus.ios.invoke(NSNotificationCenterObj, "addObserverForName:object:queue:usingBlock:",
"UIApplicationWillTerminateNotification", null, null, function() {
// UIApplicationWillTerminateNotification 是应用即将终止的时候调用,但是我发现并没有调用 ,
// 得出最终结论 :
// 1.应用在前台,双击 Home 键 ,终止应用 , UIApplicationWillTerminateNotification 调用
// 2.应用在前台,单击 Home 键,进入桌面 , 再终止应用 UIApplicationWillTerminateNotification 不会被调用.
//应用在前台,双击Home键,杀掉调用 ,但是应用在后台,双击Home键, 再终止应用不会被通知
});
plus.ios.invoke(NSNotificationCenterObj, "addObserverForName:object:queue:usingBlock:",
"UIApplicationDidBecomeActiveNotification", null, null, function(){
num = 0;
console.log('启动');
});
plus.ios.invoke(NSNotificationCenterObj, "addObserverForName:object:queue:usingBlock:",
"UIApplicationDidEnterBackgroundNotification", null, null, function(){
num++
if(num ==2){
//杀死APP进程关闭直播
uni.$TrtcCloud.exitRoom();
}
console.log(num)
});
觉得用uni-app onHide生命周期也可以实现 ,因为无论是退出APP还是隐藏在后台onHide都会被执行,那么做个定时任务通知服务端APP退出了。
或者说做个debounce在连续的操作中,无论进行了多长时间,只有某一次的操作后在指定的时间内没有再操作,这一次才被判定有效 。
全栈经验,有项目可以联系我
唐山市极信网络科技有限公司是一家专注于各行业小程序、APP、商城、平台电商/直播电商/跨境电商,erp、crm类管理系统、智慧园区、智慧校园、智慧社区、数字孪生、数字大屏 的科技公司。公司以“极致服务、诚信经营”为宗旨,致力于为客户提供最优质的解决方案。公司拥有一支年轻而又专业的团队,拥有丰富的行业经验。
有需要联系我!!!
V:15033452950
唐山市极信网络科技有限公司是一家专注于各行业小程序、APP、商城、平台电商/直播电商/跨境电商,erp、crm类管理系统、智慧园区、智慧校园、智慧社区、数字孪生、数字大屏 的科技公司。公司以“极致服务、诚信经营”为宗旨,致力于为客户提供最优质的解决方案。公司拥有一支年轻而又专业的团队,拥有丰富的行业经验。
有需要联系我!!!
V:15033452950
mui时间选择器在iOS16.4上出现偏移不正常的bug
这里要清楚是样式导致的问题
可以看看如下链接怎么处理的:https://blog.csdn.net/feeeee889/article/details/131490861
或是以下步骤:
mui.picker.all.js中添加
if (isIos) {
//-----------------添加部分
if (mui.os.ios && mui.os.plus && plus.os.version >= "16.2") {
return;
}
var maches = userAgent.match(/iphone os ([\d_]+) /i);
if (maches && maches.length >= 2 && maches[1] >= "16_2"){
return;
}
//-----------------添加部分
self.list.style.webkitTransformOrigin = "center center " + self.r + "px";
}
mui.picker.css中注释
.mui-picker-inner {
/ 16.4及以上注释 /
/ -webkit-mask-box-image: -webkit-linear-gradient(bottom, transparent, transparent 5%, #fff 20%, #fff 80%, transparent 95%, transparent);
-webkit-mask-box-image: linear-gradient(top, transparent, transparent 5%, #fff 20%, #fff 80%, transparent 95%, transparent) /
}
亲测有效!!!
这里要清楚是样式导致的问题
可以看看如下链接怎么处理的:https://blog.csdn.net/feeeee889/article/details/131490861
或是以下步骤:
mui.picker.all.js中添加
if (isIos) {
//-----------------添加部分
if (mui.os.ios && mui.os.plus && plus.os.version >= "16.2") {
return;
}
var maches = userAgent.match(/iphone os ([\d_]+) /i);
if (maches && maches.length >= 2 && maches[1] >= "16_2"){
return;
}
//-----------------添加部分
self.list.style.webkitTransformOrigin = "center center " + self.r + "px";
}
mui.picker.css中注释
.mui-picker-inner {
/ 16.4及以上注释 /
/ -webkit-mask-box-image: -webkit-linear-gradient(bottom, transparent, transparent 5%, #fff 20%, #fff 80%, transparent 95%, transparent);
-webkit-mask-box-image: linear-gradient(top, transparent, transparent 5%, #fff 20%, #fff 80%, transparent 95%, transparent) /
}
亲测有效!!!
HBuilderX 内存占用过高导致系统崩溃
HBuilderX 内存占用过高导致系统崩溃,2021 Mac book pro 14寸
HBuilderX 内存占用过高导致系统崩溃,2021 Mac book pro 14寸
支付宝支付一直报错:商家订单参数异常
在接收到后台传递过来的订单信息后,在自己拼接后发现自己的格式上是没问题的,参数应该也是没问题的,但是一直报错说商家订单参数异常。
后来我在支付宝的社区里面看到官方提供的一个CSDN老哥免费分享的支付宝支付测试用apk,安装后发现,不是我这边的uni-app问题,后端老哥经过排查后发现,原来是sign在网页和APP需要不同方法生成。
最难顶的部分来了,不知道为什么,前端这边拼接的orderInfo就是不行,明明看起来格式也没毛病,然后后端也返回一个拼接的字符串,就是可以。
难道 js 和 Java的转义哪些不一样?
在接收到后台传递过来的订单信息后,在自己拼接后发现自己的格式上是没问题的,参数应该也是没问题的,但是一直报错说商家订单参数异常。
后来我在支付宝的社区里面看到官方提供的一个CSDN老哥免费分享的支付宝支付测试用apk,安装后发现,不是我这边的uni-app问题,后端老哥经过排查后发现,原来是sign在网页和APP需要不同方法生成。
最难顶的部分来了,不知道为什么,前端这边拼接的orderInfo就是不行,明明看起来格式也没毛病,然后后端也返回一个拼接的字符串,就是可以。
难道 js 和 Java的转义哪些不一样?
流量掘金9.9自动进群系统源码搭建指南
流量掘金系统是一种商业模式,涉及到了大量的技术和策略,并且每个流量掘金系统都有自己独特的实现方式。那如何搭建一套属于自己的流量掘金9.9自动进群系统源码呢?下面我们将具体讲讲这个问题。
安装指引
演示:p.certerm.top/ms
如果您不熟悉/不满意您的pydn环境,请安装最新的流量掘金系统源码在一个新的,新鲜的环境中释放。
conda create -n traffic -c conda-forge python=3.10 traffic
调整您所需的比顿版本(&984t;=3.8),并附加您所需的高效工作包,如木星实验室、X数组、比托等。
当你需要使用流量掘金系统:
conda activate traffic
如果你发现这个项目对你的研究有用,并将其用于学术工作,你可以引用为:
@article{olive2019traffic,
author={Xavier {Olive}},
journal={Journal of Open Source Software},
title={traffic, a toolbox for processing and analysing air traffic data},
year={2019},
volume={4},
pages={1518},
doi={10.21105/joss.01518},
issn={2475-9066},
}
测试和代码质量
单元及非回归测试载于tests/ 目录。你可以运行pytest 从根目录。
测试被检查行动在每个承诺上设置平台。最新的状态和覆盖显示在上面的标准徽章。
[run]
branch = True
include = /traffic/
omit = tests, plugins, drawing, eurocontrol_, *opensky.py
[report]
exclude_lines =
coverage: ignore
raise NotImplementedError
if TYPE_CHECKING:
def geo_interface
def repr
def rich_repr
def __rich_console
def _reprhtml
def _reprsvg
def str__
def _info_html
def _ipython_keycompletions
def leaflet
def map_leaflet
def plot
ignore_errors = True
部分源码展示:contacts.js
export default {
path: '/contacts',
name: 'contacts',
redirect: '/contacts/apply',
component: () => import('@/views/contacts/layout'),
children: [
{
path: '/contacts/apply',
meta: {
title: '我的联系人',
needLogin: true,
},
component: () => import('@/views/contacts/apply'),
},
{
path: '/contacts/friends',
meta: {
title: '我的好友',
needLogin: true,
},
component: () => import('@/views/contacts/friends'),
},
{
path: '/contacts/groups',
meta: {
title: '我的群组',
needLogin: true,
},
component: () => import('@/views/contacts/groups'),
},
],
}
如何创建流量掘金系统
要建立一个流量掘金系统源码团队,你需要在社交媒体网站上创建一个通常的方式。但首先,要想出小组的名字,小众,以及你希望在你的小组中发生的事情。
一旦你有了你的团体名称,你就可以去设置它。
在你的主页上,点击你的名字和图片右侧上方的+标记。
选择"一组。"
添加标题,选择"隐私"作为小组的隐私。
点击"创建团队"。"
创建组后,您可以开始编辑页面左侧所示的章节中的细节。
在创建团队时,您还可以邀请早期适配器、合作伙伴或您的队友。
加录取问题
在创建页面之后,您可以开始添加进入的步骤。这些是客户机或用户应该遵循的步骤,以获得对组的访问。
创造问题,人们应该回答,如果他们想加入小组。
建立团队规则。
设立支付平台
在满足了你对团队的需求之后,你现在可以建立你的支付平台了。
如果你想建立一个订阅类型,那么你需要注册一个允许重复支付的平台。
设立支付平台有四个选择,您可能希望尝试重复付款。
您可以使用这个选项定制您的计划,包括经常您会向客户收取订阅费。检查如何为贝宝建立经常性付款。
此选项支持任何计费模式,您可以很容易地将其集成到您的登陆页面。进一步了解条纹收费。
由此渠道支付的款项将在一至两个营业日内转入你的银行帐户。了解与广场建立付款计划。
这一方案提供了灵活性,可方便地将客户从一次性付款转向经常性付款。了解快速弹簧如何工作。
一旦你决定并建立了你的支付平台,你现在可以创建它并将其集成到一个登陆页面。
确保您的登陆页面容易理解,并有一个明确的行动呼吁订阅付费组。
为流量掘金系统源码团队创建内容
创建流量掘金9.9自动进群系统源码团队,并不仅仅限于邀请人们加入。如果你能提供有价值的内容,人们会订阅你的团队。
在认真推销你的付费流量掘金9.9自动进群系统团队之前,计划好你的内容是很重要的。你应该能够向你的订户提供他们需要的信息,一旦他们加入了这个团体。
以下是一些你可以提供给加入者的内容:
现场流--去团队中与你的追随者或订阅者一起享受一个更专业的时间。您的广播应该是一个更专业的版本的公众现场节目在您的页面。
独家视频-你也可以预先录制一个课程的视频,并在流量掘金9.9自动进群系统源码团队中按计划发布。它的离线记录功能可以让你制作视频 下载它们以便重新使用。
在流量掘金系统源码团队中分享独家文件和文档给你的客户。与现场销售链接功能 ,你可以发送一个链接到你想分享的文件在你的广播。
流量掘金系统页面与团体
那么你什么时候应该创建一个流量掘金系统页面或者一个团队呢?
流量掘金系统页面是你的公开信息。这就像你的数字电话卡,人们可以很容易地在网上找到你。在这里,你可以获得新客户,并为冷漠的观众热身。当然,你可以在这里分享那些不熟悉你生意的人的内容。
流量掘金系统是一种商业模式,涉及到了大量的技术和策略,并且每个流量掘金系统都有自己独特的实现方式。那如何搭建一套属于自己的流量掘金9.9自动进群系统源码呢?下面我们将具体讲讲这个问题。
安装指引
演示:p.certerm.top/ms
如果您不熟悉/不满意您的pydn环境,请安装最新的流量掘金系统源码在一个新的,新鲜的环境中释放。
conda create -n traffic -c conda-forge python=3.10 traffic
调整您所需的比顿版本(&984t;=3.8),并附加您所需的高效工作包,如木星实验室、X数组、比托等。
当你需要使用流量掘金系统:
conda activate traffic
如果你发现这个项目对你的研究有用,并将其用于学术工作,你可以引用为:
@article{olive2019traffic,
author={Xavier {Olive}},
journal={Journal of Open Source Software},
title={traffic, a toolbox for processing and analysing air traffic data},
year={2019},
volume={4},
pages={1518},
doi={10.21105/joss.01518},
issn={2475-9066},
}
测试和代码质量
单元及非回归测试载于tests/ 目录。你可以运行pytest 从根目录。
测试被检查行动在每个承诺上设置平台。最新的状态和覆盖显示在上面的标准徽章。
[run]
branch = True
include = /traffic/
omit = tests, plugins, drawing, eurocontrol_, *opensky.py
[report]
exclude_lines =
coverage: ignore
raise NotImplementedError
if TYPE_CHECKING:
def geo_interface
def repr
def rich_repr
def __rich_console
def _reprhtml
def _reprsvg
def str__
def _info_html
def _ipython_keycompletions
def leaflet
def map_leaflet
def plot
ignore_errors = True
部分源码展示:contacts.js
export default {
path: '/contacts',
name: 'contacts',
redirect: '/contacts/apply',
component: () => import('@/views/contacts/layout'),
children: [
{
path: '/contacts/apply',
meta: {
title: '我的联系人',
needLogin: true,
},
component: () => import('@/views/contacts/apply'),
},
{
path: '/contacts/friends',
meta: {
title: '我的好友',
needLogin: true,
},
component: () => import('@/views/contacts/friends'),
},
{
path: '/contacts/groups',
meta: {
title: '我的群组',
needLogin: true,
},
component: () => import('@/views/contacts/groups'),
},
],
}
如何创建流量掘金系统
要建立一个流量掘金系统源码团队,你需要在社交媒体网站上创建一个通常的方式。但首先,要想出小组的名字,小众,以及你希望在你的小组中发生的事情。
一旦你有了你的团体名称,你就可以去设置它。
在你的主页上,点击你的名字和图片右侧上方的+标记。
选择"一组。"
添加标题,选择"隐私"作为小组的隐私。
点击"创建团队"。"
创建组后,您可以开始编辑页面左侧所示的章节中的细节。
在创建团队时,您还可以邀请早期适配器、合作伙伴或您的队友。
加录取问题
在创建页面之后,您可以开始添加进入的步骤。这些是客户机或用户应该遵循的步骤,以获得对组的访问。
创造问题,人们应该回答,如果他们想加入小组。
建立团队规则。
设立支付平台
在满足了你对团队的需求之后,你现在可以建立你的支付平台了。
如果你想建立一个订阅类型,那么你需要注册一个允许重复支付的平台。
设立支付平台有四个选择,您可能希望尝试重复付款。
您可以使用这个选项定制您的计划,包括经常您会向客户收取订阅费。检查如何为贝宝建立经常性付款。
此选项支持任何计费模式,您可以很容易地将其集成到您的登陆页面。进一步了解条纹收费。
由此渠道支付的款项将在一至两个营业日内转入你的银行帐户。了解与广场建立付款计划。
这一方案提供了灵活性,可方便地将客户从一次性付款转向经常性付款。了解快速弹簧如何工作。
一旦你决定并建立了你的支付平台,你现在可以创建它并将其集成到一个登陆页面。
确保您的登陆页面容易理解,并有一个明确的行动呼吁订阅付费组。
为流量掘金系统源码团队创建内容
创建流量掘金9.9自动进群系统源码团队,并不仅仅限于邀请人们加入。如果你能提供有价值的内容,人们会订阅你的团队。
在认真推销你的付费流量掘金9.9自动进群系统团队之前,计划好你的内容是很重要的。你应该能够向你的订户提供他们需要的信息,一旦他们加入了这个团体。
以下是一些你可以提供给加入者的内容:
现场流--去团队中与你的追随者或订阅者一起享受一个更专业的时间。您的广播应该是一个更专业的版本的公众现场节目在您的页面。
独家视频-你也可以预先录制一个课程的视频,并在流量掘金9.9自动进群系统源码团队中按计划发布。它的离线记录功能可以让你制作视频 下载它们以便重新使用。
在流量掘金系统源码团队中分享独家文件和文档给你的客户。与现场销售链接功能 ,你可以发送一个链接到你想分享的文件在你的广播。
流量掘金系统页面与团体
那么你什么时候应该创建一个流量掘金系统页面或者一个团队呢?
流量掘金系统页面是你的公开信息。这就像你的数字电话卡,人们可以很容易地在网上找到你。在这里,你可以获得新客户,并为冷漠的观众热身。当然,你可以在这里分享那些不熟悉你生意的人的内容。







