HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

网络请求封装

1 npm install flyio -S
2 新建文件/util/request.js
import flyio from 'flyio'
//设置超时
flyio.config.timeout = 20000;
//设置请求基地址
flyio.config.baseURL = '***'

// 添加请求拦截器
flyio.interceptors.request.use((request) => {
// 在发送请求之前做些什么
let token = uni.getStorageSync('aliToken')
if (token) {
request.headers['token'] = token
}
return request
}, function (error) {
// 对请求错误做些什么
return Promise.reject(error)
})

flyio.interceptors.response.use((res) => {
// 对响应数据做些事
// if (!res.data) {
// return Promise.reject(res)
// }
return res
}, (error) => {
return Promise.reject(error)
})
const ajaxMethod = ['get', 'post']
const Api = {}
ajaxMethod.forEach((method) => {
Api[method] = function (uri, data, config) {
return new Promise(function (resolve, reject) {
flyio[method](uri, data, config).then((response) => {
if (response.data.StatusCode === 200) {
if (response.headers.token) {
console.log(response)
// console.log(response.headers.token)
uni.setStorageSync('aliToken', response.headers.token)
uni.setStorageSync('isFirstLogin', true)
}
resolve(response.data)
} else {
uni.showToast({
title: response.data.Message || 'fetch data error',
duration: 3000,
icon: 'none'
})
}
}).catch(function (error) {
if (error.response && error.response.status === 401) {
// 请求已发出,但服务器响应的状态码不在 2xx 范围内
let isFirstLogin = uni.getStorageSync('isFistLogin')
if (isFirstLogin) {
uni.showToast({
title: '登录信息失效',
duration: 3000,
icon: 'none'
})
}
uni.setStorageSync('updateUserInfo', '')
uni.removeStorageSync('aliToken')
// 进入首页
// console.log(error.response.data)
// console.log(error.response.status)
// console.log(error.response.headers)
} else {
console.log(error)
// Something happened in setting up the request that triggered an Error
// console.log('Error', error.message)
}
// console.log(error.config)
})
})
}
})

export default Api

3 挂载到vue实例 (main.js)
import Api from './util/request.js'
Vue.prototype.$flyio = Api

4 调用
this.$flyio.get(urls.userInfo).then((res) => {
console.log(res)
uni.showToast({
title: '获取信息成功',
icon: 'success'
})
})

5 说明
登录成功,返回信息包含token,之后的请求需要将token设置到request的headers中,每个请求请求成功后需要获取response中的token并更新token的值;后端需要放开option请求;

继续阅读 »

1 npm install flyio -S
2 新建文件/util/request.js
import flyio from 'flyio'
//设置超时
flyio.config.timeout = 20000;
//设置请求基地址
flyio.config.baseURL = '***'

// 添加请求拦截器
flyio.interceptors.request.use((request) => {
// 在发送请求之前做些什么
let token = uni.getStorageSync('aliToken')
if (token) {
request.headers['token'] = token
}
return request
}, function (error) {
// 对请求错误做些什么
return Promise.reject(error)
})

flyio.interceptors.response.use((res) => {
// 对响应数据做些事
// if (!res.data) {
// return Promise.reject(res)
// }
return res
}, (error) => {
return Promise.reject(error)
})
const ajaxMethod = ['get', 'post']
const Api = {}
ajaxMethod.forEach((method) => {
Api[method] = function (uri, data, config) {
return new Promise(function (resolve, reject) {
flyio[method](uri, data, config).then((response) => {
if (response.data.StatusCode === 200) {
if (response.headers.token) {
console.log(response)
// console.log(response.headers.token)
uni.setStorageSync('aliToken', response.headers.token)
uni.setStorageSync('isFirstLogin', true)
}
resolve(response.data)
} else {
uni.showToast({
title: response.data.Message || 'fetch data error',
duration: 3000,
icon: 'none'
})
}
}).catch(function (error) {
if (error.response && error.response.status === 401) {
// 请求已发出,但服务器响应的状态码不在 2xx 范围内
let isFirstLogin = uni.getStorageSync('isFistLogin')
if (isFirstLogin) {
uni.showToast({
title: '登录信息失效',
duration: 3000,
icon: 'none'
})
}
uni.setStorageSync('updateUserInfo', '')
uni.removeStorageSync('aliToken')
// 进入首页
// console.log(error.response.data)
// console.log(error.response.status)
// console.log(error.response.headers)
} else {
console.log(error)
// Something happened in setting up the request that triggered an Error
// console.log('Error', error.message)
}
// console.log(error.config)
})
})
}
})

export default Api

3 挂载到vue实例 (main.js)
import Api from './util/request.js'
Vue.prototype.$flyio = Api

4 调用
this.$flyio.get(urls.userInfo).then((res) => {
console.log(res)
uni.showToast({
title: '获取信息成功',
icon: 'success'
})
})

5 说明
登录成功,返回信息包含token,之后的请求需要将token设置到request的headers中,每个请求请求成功后需要获取response中的token并更新token的值;后端需要放开option请求;

收起阅读 »

<component :is="item" v-for="item in list"></component> 无法支持小程序和app官方没有说明 或者有什么代替方案么

<component :is="item" v-for="item in list"></component> 无法支持小程序和app官方没有说明 或者有什么代替方案么

<component :is="item" v-for="item in list"></component> 无法支持小程序和app官方没有说明 或者有什么代替方案么

流应用发展方向(建议)

流应用

建议把百度 京东 搜索,那些热门应用去掉,那些体验并不好,都是简版的,
搜索是流应用的入口,应该搜索 推荐 流应用产品
用流应用的开发者,都是不能上ios,才用的,流应用就是自己应用的外壳
开发者最希望,自己的应用唯一,没有其他竞品,没有广告
用户是不会主动下载 流应的,
都是开发者 强行让用户下载使用
中大应用,也不会用流应用,有小程序了
所以流应用的主要用户,就是小开发者的ios端用户

继续阅读 »

建议把百度 京东 搜索,那些热门应用去掉,那些体验并不好,都是简版的,
搜索是流应用的入口,应该搜索 推荐 流应用产品
用流应用的开发者,都是不能上ios,才用的,流应用就是自己应用的外壳
开发者最希望,自己的应用唯一,没有其他竞品,没有广告
用户是不会主动下载 流应的,
都是开发者 强行让用户下载使用
中大应用,也不会用流应用,有小程序了
所以流应用的主要用户,就是小开发者的ios端用户

收起阅读 »

[持续更新]hbuilderX和vscode 常用快捷键一览

快捷键

hbuilderX
添加下一个匹配项 ctrl e
添加所有匹配项 ctrl alt e
向上搜索选中单词 f3
向下搜索选中单词shift f3
复制当前行 ctrl c
向上移动一行 ctrl up arrow
格式化代码 ctrl k
注释代码 ctrl /
撤销 ctrl z
恢复撤销 ctrl y
查找文件 ctrl p
查找字符串(当前文件) ctrl f
查找字符串(当前目录)ctrl alt f
跳转到行 ctrl g
分栏操作同一文件 文件编辑框 右键文件--拆分标签卡

vscode
添加下一个匹配项 ctrl d
向上复制一行 alt shift up arrow
向上移动一行 alt up arrow
格式化代码 alt shift f
注释代码 ctrl /
撤销 ctrl z
恢复撤销 ctrl y
查找文件 ctrl p
查找字符串(当前文件) ctrl f
查找字符串(当前目录)ctrl shift f
跳转到行 ctrl g
分栏操作同一文件 ctrl \

继续阅读 »

hbuilderX
添加下一个匹配项 ctrl e
添加所有匹配项 ctrl alt e
向上搜索选中单词 f3
向下搜索选中单词shift f3
复制当前行 ctrl c
向上移动一行 ctrl up arrow
格式化代码 ctrl k
注释代码 ctrl /
撤销 ctrl z
恢复撤销 ctrl y
查找文件 ctrl p
查找字符串(当前文件) ctrl f
查找字符串(当前目录)ctrl alt f
跳转到行 ctrl g
分栏操作同一文件 文件编辑框 右键文件--拆分标签卡

vscode
添加下一个匹配项 ctrl d
向上复制一行 alt shift up arrow
向上移动一行 alt up arrow
格式化代码 alt shift f
注释代码 ctrl /
撤销 ctrl z
恢复撤销 ctrl y
查找文件 ctrl p
查找字符串(当前文件) ctrl f
查找字符串(当前目录)ctrl shift f
跳转到行 ctrl g
分栏操作同一文件 ctrl \

收起阅读 »

苹果APP真机测试和上架苹果应用商店视频教程

iOS iOS打包

本视频介绍iOS APP真机调试和上架App Store两个步骤。

详细介绍了iOS证书类型功能和申请方式,打包ipa安装手机真机测试和上传App Store审核过程。

希望可以帮助新手快速了解上架苹果APP流程,快速把自己的APP分发出去。

优酷

http://v.youku.com/v_show/id_XMzk0MTMyNDM2NA==.html?spm=a2hzp.8244740.0.0

继续阅读 »

本视频介绍iOS APP真机调试和上架App Store两个步骤。

详细介绍了iOS证书类型功能和申请方式,打包ipa安装手机真机测试和上传App Store审核过程。

希望可以帮助新手快速了解上架苹果APP流程,快速把自己的APP分发出去。

优酷

http://v.youku.com/v_show/id_XMzk0MTMyNDM2NA==.html?spm=a2hzp.8244740.0.0

收起阅读 »

hhy

HBuilder

good

good

uni-app不能使用background-image,代替方法是什么呢?

uniapp

uni-app不能使用background-image,代替方法是什么呢?

uni-app不能使用background-image,代替方法是什么呢?

小程序tabbar和navigator一起使用点不动的问题

navigator tabbar

在项目开发中我遇到这样的一个问题,页面需要navigator链接跳转一个页面,tabbar也需要导航到这个页面,最开始还没有添加tabbar的时候,navigator都能够正常跳转,但是当加上tabbar的时候,tabbar能跳转,navigator就点击不动了。

一脸蒙逼的我开始以为是逻辑处理上出了问题,排查了半天也没发现哪儿有问题,控制台也不报错,心累。。。

后来又开始查navigator、tabbar的属性,怀疑是有什么属性问题,通过观察发现navigator有个open-type属性,值为switchTab,果不其然,将他加上,就没问题了

&Tip:项目中navigator、tabbar有指定导航到同一个页面的话,在navigator标签里加上open-type="switchTab",就能解决navigator点击不动的情况

建议uni在编译的时候,如果页面内的navigator页面于tabbar设置的页面冲突,自动添加open-type参数。

继续阅读 »

在项目开发中我遇到这样的一个问题,页面需要navigator链接跳转一个页面,tabbar也需要导航到这个页面,最开始还没有添加tabbar的时候,navigator都能够正常跳转,但是当加上tabbar的时候,tabbar能跳转,navigator就点击不动了。

一脸蒙逼的我开始以为是逻辑处理上出了问题,排查了半天也没发现哪儿有问题,控制台也不报错,心累。。。

后来又开始查navigator、tabbar的属性,怀疑是有什么属性问题,通过观察发现navigator有个open-type属性,值为switchTab,果不其然,将他加上,就没问题了

&Tip:项目中navigator、tabbar有指定导航到同一个页面的话,在navigator标签里加上open-type="switchTab",就能解决navigator点击不动的情况

建议uni在编译的时候,如果页面内的navigator页面于tabbar设置的页面冲突,自动添加open-type参数。

收起阅读 »

如何隐藏系统虚拟导航栏,实现沉浸式模式

最近做一个社区智能导航,需要隐藏状态栏和虚拟导航按钮,实现沉浸式模式(专业叫法:https://blog.csdn.net/wangkai1101/article/details/52384911)

(1) 安卓Native.js隐藏系统虚拟导航栏(返回键、任务键、主页键) - DCloud问答
http://ask.dcloud.net.cn/question/6648
(2) 隐藏系统虚拟导航栏---永久隐藏 - DCloud问答
http://ask.dcloud.net.cn/question/48961

结合了以上两位楼主的方法,以及CSDN引文,已经基本实现隐藏状态栏和导航栏了,实现了引文中的“沉浸式模式”
特来分享:

    mui.plusReady(function() {  

        //隐藏系统导航按钮  
        var main = plus.android.runtimeMainActivity();  
        var windowMe = main.getWindow();  
        plus.android.importClass(windowMe);  
        var decorView = windowMe.getDecorView();  
        plus.android.importClass(decorView);  
        var View = plus.android.importClass("android.view.View");  
        decorView.setSystemUiVisibility(  
            View.SYSTEM_UI_FLAG_LAYOUT_STABLE |  
            View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION |  
            View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN |  
            View.SYSTEM_UI_FLAG_HIDE_NAVIGATION |  
            View.SYSTEM_UI_FLAG_FULLSCREEN |  
            View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);  

    });  

目前还有个问题就是通过上滑和下拉,还是可以调出状态栏和系统虚拟导航按钮,对于托管式设备还是存在APP被退出的隐患。

继续阅读 »

最近做一个社区智能导航,需要隐藏状态栏和虚拟导航按钮,实现沉浸式模式(专业叫法:https://blog.csdn.net/wangkai1101/article/details/52384911)

(1) 安卓Native.js隐藏系统虚拟导航栏(返回键、任务键、主页键) - DCloud问答
http://ask.dcloud.net.cn/question/6648
(2) 隐藏系统虚拟导航栏---永久隐藏 - DCloud问答
http://ask.dcloud.net.cn/question/48961

结合了以上两位楼主的方法,以及CSDN引文,已经基本实现隐藏状态栏和导航栏了,实现了引文中的“沉浸式模式”
特来分享:

    mui.plusReady(function() {  

        //隐藏系统导航按钮  
        var main = plus.android.runtimeMainActivity();  
        var windowMe = main.getWindow();  
        plus.android.importClass(windowMe);  
        var decorView = windowMe.getDecorView();  
        plus.android.importClass(decorView);  
        var View = plus.android.importClass("android.view.View");  
        decorView.setSystemUiVisibility(  
            View.SYSTEM_UI_FLAG_LAYOUT_STABLE |  
            View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION |  
            View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN |  
            View.SYSTEM_UI_FLAG_HIDE_NAVIGATION |  
            View.SYSTEM_UI_FLAG_FULLSCREEN |  
            View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);  

    });  

目前还有个问题就是通过上滑和下拉,还是可以调出状态栏和系统虚拟导航按钮,对于托管式设备还是存在APP被退出的隐患。

收起阅读 »

MUI框架开发的报考驾校预约界面网站模板

mui

蓝色风格的MUI框架开发的报考驾校预约界面网站模板,用来做手机端驾校预约网站模板很不错。

下载地址:http://www.sucaihuo.com/templates/2139.html

继续阅读 »

蓝色风格的MUI框架开发的报考驾校预约界面网站模板,用来做手机端驾校预约网站模板很不错。

下载地址:http://www.sucaihuo.com/templates/2139.html

收起阅读 »