HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

纯nvue模式 开发中遇到的一些不友好的体验

1.图片渲染问题:图片渲染有时发生错误,不能完全渲染出来 (渲染错误的概率 10%)

  1. 首页打开抖动:因为首页加了背景图,整个页面的渲染肉眼可见的抖动,css定位还偶尔会错乱。
  2. 问题很多很多,问题多到盖住了性能优势。

1.图片渲染问题:图片渲染有时发生错误,不能完全渲染出来 (渲染错误的概率 10%)

  1. 首页打开抖动:因为首页加了背景图,整个页面的渲染肉眼可见的抖动,css定位还偶尔会错乱。
  2. 问题很多很多,问题多到盖住了性能优势。

vue2全局mixin注入查询当前所在是page还是component的方法

在main.js中全局注入mixin,查询当前this所在的位置,如 page页面还是component组件
代码如下

// main.js  
import pageReady from '@/mixins/pageReady'  

Vue.mixin(pageReady)
// pageReady.js  

/**  
 * this.mpType 可以获取到当前所在的是app、page、component  
 * 目前只测试了APP-PLUS/H5/微信/QQ/字节  
 * APP-PLUS:component 返回的结果是 undefined,其他正常  
 * H5:全都是undefined,可以通过其他参数进行区分  
 * 微信/QQ/字节(暂时理解为MP):app 返回的是undefined,其他正常  
 */  
module.exports = {  
  computed: {  
    pageType() {  
      let mpType = this.mpType  
      // #ifdef APP-PLUS  
      if (mpType === undefined) {  
        mpType = 'component'  
      }  
      // #endif  

      // #ifdef MP  
      if (mpType === undefined) {  
        mpType = 'app'  
      }  
      // #endif  

      // #ifdef H5  
      if (this.appOptions) {  
        mpType = 'app'  
      } else if (this.$mp) {  
        mpType = 'page'  
      } else if (!this.$mp && this.$root.$mp) {  
        mpType = 'component'  
      }  
      // #endif  

      return mpType   
    }  
  }  
}
继续阅读 »

在main.js中全局注入mixin,查询当前this所在的位置,如 page页面还是component组件
代码如下

// main.js  
import pageReady from '@/mixins/pageReady'  

Vue.mixin(pageReady)
// pageReady.js  

/**  
 * this.mpType 可以获取到当前所在的是app、page、component  
 * 目前只测试了APP-PLUS/H5/微信/QQ/字节  
 * APP-PLUS:component 返回的结果是 undefined,其他正常  
 * H5:全都是undefined,可以通过其他参数进行区分  
 * 微信/QQ/字节(暂时理解为MP):app 返回的是undefined,其他正常  
 */  
module.exports = {  
  computed: {  
    pageType() {  
      let mpType = this.mpType  
      // #ifdef APP-PLUS  
      if (mpType === undefined) {  
        mpType = 'component'  
      }  
      // #endif  

      // #ifdef MP  
      if (mpType === undefined) {  
        mpType = 'app'  
      }  
      // #endif  

      // #ifdef H5  
      if (this.appOptions) {  
        mpType = 'app'  
      } else if (this.$mp) {  
        mpType = 'page'  
      } else if (!this.$mp && this.$root.$mp) {  
        mpType = 'component'  
      }  
      // #endif  

      return mpType   
    }  
  }  
}
收起阅读 »

uniapp实现安卓禁止截屏和允许截屏

NJS Native.JS
let flag = 0  
let WindowManager = null  
let mainActivity = null  
let window_android = null  
document.addEventListener('plusready', function(){  
    WindowManager = plus.android.importClass('android.view.WindowManager')  
    plus.android.importClass("android.view.Window");      
    mainActivity = plus.android.runtimeMainActivity();      
    window_android = mainActivity.getWindow();  
    flag = WindowManager.LayoutParams.FLAG_SECURE  
});  
function allowJp(){  
    // 允许截屏  
    window_android.clearFlags(flag);      
}  
function forbidJp(){  
    // 禁止截屏  
    window_android.addFlags(flag);  
}

直接调用上面的方法即可实现禁止和允许截屏
Tips: 在vue文件里面写不用监听plusready,可以直接把function里面的代码拿出来

继续阅读 »
let flag = 0  
let WindowManager = null  
let mainActivity = null  
let window_android = null  
document.addEventListener('plusready', function(){  
    WindowManager = plus.android.importClass('android.view.WindowManager')  
    plus.android.importClass("android.view.Window");      
    mainActivity = plus.android.runtimeMainActivity();      
    window_android = mainActivity.getWindow();  
    flag = WindowManager.LayoutParams.FLAG_SECURE  
});  
function allowJp(){  
    // 允许截屏  
    window_android.clearFlags(flag);      
}  
function forbidJp(){  
    // 禁止截屏  
    window_android.addFlags(flag);  
}

直接调用上面的方法即可实现禁止和允许截屏
Tips: 在vue文件里面写不用监听plusready,可以直接把function里面的代码拿出来

收起阅读 »

app.onLaunch与page.onLoad异步问题终极解决方案

小程序 Vue 异步执行

场景:

大家项目中应该都存在这样的场景,在onLaunch里用wx.login拿到code,再用code去发送请求获取token、用户信息等,整个过程都是异步的,然后我们在页面里onLoad去用的时候异步请求还没回来,导致没拿到想要的数据,以往要么监听是否拿到,要么自己封装一套回调,总之都挺麻烦,每个页面都要写一堆无关当前页面的逻辑。

直接上终极解决方案,公司内部已接入一年很稳定:

1.可完美解决异步问题

2.使用方便

3.可灵活定制异步钩子

4.采用监听模式实现,接入无需修改以前代码

5.支持各种小程序和vue架构

。。。

//globalData提出来声明  
let globalData = {  
  // 是否已拿到token  
  token: '',  
  // 用户信息  
  userInfo: {  
    userId: '',  
    head: ''  
  }  
}  
//注册自定义钩子  
import CustomHook from 'spa-custom-hooks';  
CustomHook.install({  
 'Login':{  
    name:'Login',  
    watchKey: 'token',  
    onUpdate(token){  
      //有token则触发此钩子  
      return !!token;  
    }  
  },  
 'User':{  
    name:'User',  
    watchKey: 'userInfo',  
    onUpdate(user){  
      //获取到userinfo里的userId则触发此钩子  
      return !!user.userId;  
    }  
  }  
}, globalData)  
// 正常走初始化逻辑  
App({  
  globalData,  
  onLaunch() {  
      //发起异步登录拿token  
      login((token)=>{  
          this.globalData.token = token  
          //使用token拿用户信息  
          getUser((user)=>{  
             this.globalData.user = user  
          })  
     })  
   }  
})  
//关键点来了  
//Page.js,业务页面使用  
Page({  
  onLoadLogin() {  
       //拿到token啦,可以使用token发起请求了  
       const token = getApp().globalData.token  
    },  
  onLoadUser() {  
       //拿到用户信息啦  
       const userInfo = getApp().globalData.userInfo  
    },  
    onReadyShowUser(){  
        //小程序内页面渲染完成 && 页面显示 && 拿到用户信息  
        //Tips:适用于需要获取小程序组件或者dom,并且每次页面显示都会执行的场景,例如,每次显示页面的时候都要拿到最新的头像去渲染到canvas上面  
    },  
})

具体文档和Demo见↓

Github:https://github.com/1977474741/spa-custom-hooks

祝大家用的愉快,记得star哦

继续阅读 »

场景:

大家项目中应该都存在这样的场景,在onLaunch里用wx.login拿到code,再用code去发送请求获取token、用户信息等,整个过程都是异步的,然后我们在页面里onLoad去用的时候异步请求还没回来,导致没拿到想要的数据,以往要么监听是否拿到,要么自己封装一套回调,总之都挺麻烦,每个页面都要写一堆无关当前页面的逻辑。

直接上终极解决方案,公司内部已接入一年很稳定:

1.可完美解决异步问题

2.使用方便

3.可灵活定制异步钩子

4.采用监听模式实现,接入无需修改以前代码

5.支持各种小程序和vue架构

。。。

//globalData提出来声明  
let globalData = {  
  // 是否已拿到token  
  token: '',  
  // 用户信息  
  userInfo: {  
    userId: '',  
    head: ''  
  }  
}  
//注册自定义钩子  
import CustomHook from 'spa-custom-hooks';  
CustomHook.install({  
 'Login':{  
    name:'Login',  
    watchKey: 'token',  
    onUpdate(token){  
      //有token则触发此钩子  
      return !!token;  
    }  
  },  
 'User':{  
    name:'User',  
    watchKey: 'userInfo',  
    onUpdate(user){  
      //获取到userinfo里的userId则触发此钩子  
      return !!user.userId;  
    }  
  }  
}, globalData)  
// 正常走初始化逻辑  
App({  
  globalData,  
  onLaunch() {  
      //发起异步登录拿token  
      login((token)=>{  
          this.globalData.token = token  
          //使用token拿用户信息  
          getUser((user)=>{  
             this.globalData.user = user  
          })  
     })  
   }  
})  
//关键点来了  
//Page.js,业务页面使用  
Page({  
  onLoadLogin() {  
       //拿到token啦,可以使用token发起请求了  
       const token = getApp().globalData.token  
    },  
  onLoadUser() {  
       //拿到用户信息啦  
       const userInfo = getApp().globalData.userInfo  
    },  
    onReadyShowUser(){  
        //小程序内页面渲染完成 && 页面显示 && 拿到用户信息  
        //Tips:适用于需要获取小程序组件或者dom,并且每次页面显示都会执行的场景,例如,每次显示页面的时候都要拿到最新的头像去渲染到canvas上面  
    },  
})

具体文档和Demo见↓

Github:https://github.com/1977474741/spa-custom-hooks

祝大家用的愉快,记得star哦

收起阅读 »

tob-ui 更现代的 uniapp ui 组件库

开源 ui组件

tob-ui

https://dishait.gitee.io/tob-ui-doc/

tob-ui

https://dishait.gitee.io/tob-ui-doc/

智密科技 Uniapp一站式解决方案提供商 安卓/IOS/设计/前端/服务端/硬件工程师 多年uni原生插件开发,APP外包项目开发,各类疑难杂症解决..

外包接单 外包 插件需求

智密科技承接安卓/IOS双端插件开发、安卓/IOS App外包开发、项目整体外包、各类硬件产品开发

我们的优势:
1、全职UI、前端、安卓、IOS、后端、硬件工程师,每个岗位都是专职开发更专业,选择智密您就拥有了一个完整的技术支持团队;
2、定制的产品无论是插件、APP、整套系统,一年内免费Bug修复;
3、定制的APP和整体项目软件著作权归客户所有,并协助软件著作权申请;
4、软件开发源头工厂,定价合理,与开发人员直接沟通,避免需求理解问题,提高开发效率;
5、软件均为自主开发,不基于网上代码进行二次开发,保障系统安全性;
6、软件源码自己开发,出现BUG能快速修复,新需求能快速实现;
7、签订开发合同,通过条款约定双方权利义务,服务和售后有保障;
8、我们的插件尽可能做到让用户UI自定义,用户改变UI之后无需联系我们修改插件,只要前端调整UI即可。

我们唯一的劣势:价格可能会比别人高
我们不提供廉价的插件和服务,服务和收费是成正比的。
我们的插件定价基本都在千元以上,插件使用成本=插件购买费用 插件集成成本 插件填坑成本 后续更新成本
在没有好的技术支持前提下,后面三项成本将远远大于插件购买费用,选择智密科技,实现双赢

经过几年积累,已拥有大量双端插件,常见功能的插件几乎都能直接试用,欢迎各位进群了解

插件沟通交流群:755910061(欢迎进群了解我们的技术支持方式及我们的技术能力)
商务QQ:57570616(这是传说中的搅屎棍,光动嘴皮子不干活的,进群最实在)
商务微信:ZhimiTec(同上...)

离线推送
仿抖音
多任务文件下载
视频播放器
文件选择
美颜相机
图片编辑
各类银行支付SDK
支付宝SDK
微信支付SDK
阿里云直播/点播/短视频
腾讯云直播/点播/短视频/IM
萤石云
直播美颜
高德地体
人脸识别
摄像头人脸区域识别
蓝牙
串口
二维码识别
快递单号识别
各类打印机
各类传感器
指纹识别
RFID识别
锁块控制
等等硬件相关的SDK接入或者通讯都有相关插件
所有插件 外包都可签订合同 开具发票
插件和APP均提供一年的免费维护(不增加功能的前提下,遇到BUG我们全免费修复)

继续阅读 »

智密科技承接安卓/IOS双端插件开发、安卓/IOS App外包开发、项目整体外包、各类硬件产品开发

我们的优势:
1、全职UI、前端、安卓、IOS、后端、硬件工程师,每个岗位都是专职开发更专业,选择智密您就拥有了一个完整的技术支持团队;
2、定制的产品无论是插件、APP、整套系统,一年内免费Bug修复;
3、定制的APP和整体项目软件著作权归客户所有,并协助软件著作权申请;
4、软件开发源头工厂,定价合理,与开发人员直接沟通,避免需求理解问题,提高开发效率;
5、软件均为自主开发,不基于网上代码进行二次开发,保障系统安全性;
6、软件源码自己开发,出现BUG能快速修复,新需求能快速实现;
7、签订开发合同,通过条款约定双方权利义务,服务和售后有保障;
8、我们的插件尽可能做到让用户UI自定义,用户改变UI之后无需联系我们修改插件,只要前端调整UI即可。

我们唯一的劣势:价格可能会比别人高
我们不提供廉价的插件和服务,服务和收费是成正比的。
我们的插件定价基本都在千元以上,插件使用成本=插件购买费用 插件集成成本 插件填坑成本 后续更新成本
在没有好的技术支持前提下,后面三项成本将远远大于插件购买费用,选择智密科技,实现双赢

经过几年积累,已拥有大量双端插件,常见功能的插件几乎都能直接试用,欢迎各位进群了解

插件沟通交流群:755910061(欢迎进群了解我们的技术支持方式及我们的技术能力)
商务QQ:57570616(这是传说中的搅屎棍,光动嘴皮子不干活的,进群最实在)
商务微信:ZhimiTec(同上...)

离线推送
仿抖音
多任务文件下载
视频播放器
文件选择
美颜相机
图片编辑
各类银行支付SDK
支付宝SDK
微信支付SDK
阿里云直播/点播/短视频
腾讯云直播/点播/短视频/IM
萤石云
直播美颜
高德地体
人脸识别
摄像头人脸区域识别
蓝牙
串口
二维码识别
快递单号识别
各类打印机
各类传感器
指纹识别
RFID识别
锁块控制
等等硬件相关的SDK接入或者通讯都有相关插件
所有插件 外包都可签订合同 开具发票
插件和APP均提供一年的免费维护(不增加功能的前提下,遇到BUG我们全免费修复)

收起阅读 »

佛山招聘 uniCloud 后端开发工程师

招聘

月薪: 12~20 K,加项目分红
项目类型:门店数字化商城小程序
工作职责:使用 uniCloud 开发商城部分模块的 api 接口
公司当前情况:技术团队 2 人,办公场地 1000 平米,有健身房和餐厅,包午餐和晚餐。公司在起步阶段,机会多,发展空间大,现在加入有机会成为中坚力量
办公地点:佛山禅城区
联系微信: qyunke

继续阅读 »

月薪: 12~20 K,加项目分红
项目类型:门店数字化商城小程序
工作职责:使用 uniCloud 开发商城部分模块的 api 接口
公司当前情况:技术团队 2 人,办公场地 1000 平米,有健身房和餐厅,包午餐和晚餐。公司在起步阶段,机会多,发展空间大,现在加入有机会成为中坚力量
办公地点:佛山禅城区
联系微信: qyunke

收起阅读 »

uniapp使用vue3和ts跳转页面传值

页面传值

今天在使用vue3模式用ts开发微信小程序时遇到需要向商品详情页面传值
但是列表页面列表项已经包含了商品详情需要的数据,就打算全部传过去
但是在里面我并没有得到this.getOpenerEventChannel();这个对象,通过getCurrentInstance()也并没得到
打算通过uniapp的窗体通信来传递数据
于是这里对此作了一些封装

/**  
 * @description 页面发送数据  
 * @param {string} eventName 事件名称  
 * @param {T} data 需要发送的数据  
 */  
export function pageSendData<T>( eventName : string , data : T ) {  
    // console.log( '等待回应:' , eventName + '_response' );  
    uni.$once( eventName + '_response' , () => {  
        // console.log( '收到回应:' , eventName + '_response' );  
        // console.log( '发送数据到事件:' , eventName );  
        uni.$emit( eventName , data );  
    } );  
}  

declare type pageResultDataCallBack<T> = ( data : T ) => void;  

/**  
 * @description 页面接收数据  
 * @param {string} eventName 事件名称  
 * @param {pageResultDataCallBack} callBack 接收数据回调  
 */  
export function pageResultData<T>( eventName : string , callBack : pageResultDataCallBack<T> ) {  
    // console.log( '准备接收数据:' , eventName );  
    uni.$once( eventName , callBack );  
    // console.log( '发送回应:' , eventName + '_response' );  
    uni.$emit( eventName + '_response' );  
}
继续阅读 »

今天在使用vue3模式用ts开发微信小程序时遇到需要向商品详情页面传值
但是列表页面列表项已经包含了商品详情需要的数据,就打算全部传过去
但是在里面我并没有得到this.getOpenerEventChannel();这个对象,通过getCurrentInstance()也并没得到
打算通过uniapp的窗体通信来传递数据
于是这里对此作了一些封装

/**  
 * @description 页面发送数据  
 * @param {string} eventName 事件名称  
 * @param {T} data 需要发送的数据  
 */  
export function pageSendData<T>( eventName : string , data : T ) {  
    // console.log( '等待回应:' , eventName + '_response' );  
    uni.$once( eventName + '_response' , () => {  
        // console.log( '收到回应:' , eventName + '_response' );  
        // console.log( '发送数据到事件:' , eventName );  
        uni.$emit( eventName , data );  
    } );  
}  

declare type pageResultDataCallBack<T> = ( data : T ) => void;  

/**  
 * @description 页面接收数据  
 * @param {string} eventName 事件名称  
 * @param {pageResultDataCallBack} callBack 接收数据回调  
 */  
export function pageResultData<T>( eventName : string , callBack : pageResultDataCallBack<T> ) {  
    // console.log( '准备接收数据:' , eventName );  
    uni.$once( eventName , callBack );  
    // console.log( '发送回应:' , eventName + '_response' );  
    uni.$emit( eventName + '_response' );  
}
收起阅读 »

nvue中的text标签

nvue

nvue中的text标签必须在一行,不能手动让他换行,否则样式有问题

//有问题的  
<text class="content">  
    {{ item.like_count }}  
</text>
//正常  
<text class="content">{{ item.like_count }}</text>
继续阅读 »

nvue中的text标签必须在一行,不能手动让他换行,否则样式有问题

//有问题的  
<text class="content">  
    {{ item.like_count }}  
</text>
//正常  
<text class="content">{{ item.like_count }}</text>
收起阅读 »

uniapp快手小程序获取手机号码信息不支持vue3语法

手机号 快手小程序

uniapp编译快手小程序, 在vue3的语法下, 按钮button getPhoneNumber获取不到手机信息

切换回vue2语法便能正常获取

解决方法: vue3不支持, 只能换回vue2开发, 静等官方解决

uniapp编译快手小程序, 在vue3的语法下, 按钮button getPhoneNumber获取不到手机信息

切换回vue2语法便能正常获取

解决方法: vue3不支持, 只能换回vue2开发, 静等官方解决

判断是否在审核期间、苹果过审(ios)

判断是否在审核期间、苹果过审(ios):https://ext.dcloud.net.cn/plugin?id=7193

判断是否在审核期间、苹果过审(ios):https://ext.dcloud.net.cn/plugin?id=7193