uni-app开发指南

手机游戏开发者 2024-9-27 23:56:38 68 0 来自 中国
1.jpg 假如你平常用Vue写H5项目比力多,然后忽然有一天公司要你用uni-app来同时开发H5和小程序(乃至App),而你却对uni-app不认识,那么这篇文章或许适当你。
下面我将从以下几个维度出发,总结uni-app开发与Vue开发的差别之处。
① 项目搭建
② 设置文件
③ 内置组件
④ 数据哀求
⑤ 其他
一、项目搭建

uni-app项目搭建有两种方式,一种是通过vue-cli下令行方式,一种是通过HBuilderX可视化界面方式,新手推荐直接使用第二种方式,简朴快捷,下载按照好HBuilderX开发工具后,点击顶部工具栏里的文件 -> 新建 -> 项目(快捷键Ctrl+N)后即可创建。
HBuilderX下载链接: https://www.dcloud.io/hbuilderx.html
二、设置文件

uni-app设置文件重要有三个:manifest.json、pages.json和package.json。
manifest.json是应用的设置文件,用于指定应用的名称、图标、权限等。在开发小程序时必要添加以下设置选项:
"mp-weixin": {  "appid": "", // 此处须填写小程序的appid,否则无法用真机预览  "lazyCodeLoading": "requiredComponents"  // 组件按需注入}pages.json文件用来对 uni-app 举行全局设置,决定页面文件的路径、窗口样式、原生的导航栏、底部的原生tabbar 等。在uni-app项目中无需使用vue-router,页面路由就是在pages.json文件中设置的。
package.json文件通常是用于设置安装依赖的,这点与Vue雷同。除此之外,我们还可以在此中设置扩展web和小程序平台,具体设置方法详见 → https://uniapp.dcloud.net.cn/collocation/package.html
三、内置组件

本文枚举几个常见的与H5开发差别的内置组件,更多相关内容请直接到uni-app官网检察 → https://uniapp.dcloud.net.cn/component/view.html
1. <navigator>

<navigator>相称于Vue项目中的<router-view>,但使用方式略有差别。
<navigator url="/pages/home/index">首页</navigator>url属性值必须是在pages.json中pages里设置好的,假如必要通报参数,吸收该参数的页面中必要通过生命周期中的onLoad钩子函数来吸收,比方:
<navigator url="/pages/home/index?id=1">首页</navigator>export default {    onLoad: function (option) { //option为object范例,会序列化上个页面通报的参数        console.log(option.id); //打印出上个页面通报的参数。    }}2. <scroll-view>

在H5中,假如要实现页面内的局部滚动,我们可以直接使用CSS属性overflow: auto即可实现,可小程序中并不支持,以是这时我们就必要使用<scroll-view>来替代。不外必要注意的是,假如是纵向滚动,我们必要给<scroll-view>添加scroll-y属性,并给其CSS添加固定高度,比方:
<scroll-view scroll-y>滚动部门</scroll-view>/*具体高度根据现实项目而定*/height: 200px; * 返回顶部问题

<scroll-view>有个scroll-top属性,我们可以通过设置该属性值,让其滚动到指定位置(比如返回顶部)。但是当我们手动滑动页面让<scroll-view>滚动时,scroll-top属性值并不会随之改变,这时间我们再次设置与之前雷同的scroll-top属性值后,<scroll-view>不会发生滚动。比方:
<scroll-view scroll-y :scroll-top="scrollTop"></scroll-view>export default {    data() {        return {            scrollTop: 0        }    },    methods: {        goTop: function(e) {  // 返回顶部            this.scrollTop = 0;   // 无效        }    }}对于此问题,uni-app官方给出的方案是,在scroll事故实验的方法中,将滚动条位置生存下来,之后当我们实验返回顶部方法时,先将scrollTop设置为生存下来的该位置,然后再将scrollTop设置为0。具体代码如下:
<scroll-view scroll-y="true" :scroll-top="scrollTop" @scroll="scroll"></scroll-view>export default {    data() {        return {            scrollTop: 0,            old: {                scrollTop: 0            }        }    },    methods: {        scroll: function(e) {            this.old.scrollTop = e.detail.scrollTop        },        goTop: function(e) {            this.scrollTop = this.old.scrollTop            this.$nextTick(function() {                this.scrollTop = 0            });        }    }}此方法固然是可以办理问题的,但是看起来并不敷简朴直观。起首我们要知道,产生该问题的重要问题在于,当重复设置组件某些属性为雷同的值时,不会同步到view层,以是我们只必要先改变初始值为一个非0值,再将该值设置为0即可。比方:
export default {    data() {        return {            scrollTop: 0        }    },    methods: {        goTop: function(e) {  // 返回顶部             this.scrollTop = 0.01;  // 设置为非0且靠近于0的值             this.$nextTick(() => {                 this.scrollTop = 0;             });        }    }}3. <swiper>

在小程序中没有window和document等对象,以是不能使用雷同Swiper.js如许的JS插件,而uni-app自身也提供了<swiper>组件,我们必要开发轮播图功能时就可以直接拿来使用即可。
4. <image>

在H5中加载图片必要用到<img>标签,而uni-app中必要用<image>组件来实现,而且它默认是有宽高的(宽度 320px、高度 240px),假如要让图片高度自顺应的话,必要加上mode="widthFix"属性。
四、数据哀求

数据哀求我们可以使用axios来做数据拦截,但是具体哀求时还是必要用uni-app提供的uni.request()API,比方:
// request.jsimport axios from 'axios'import qs from 'qs'// 创建axios实例const service = axios.create();const baseUrl = '';   // 此处填写接口相对URL,用于拼接在url前面service.defaults.timeout = 30000;service.defaults.baseURL = baseUrl;axios.defaults.adapter = function(config) {  return new Promise((resolve, reject) => {    let data = config.method === 'get' ? config.params : config.data;    uni.request({      url: baseUrl + config.url,      method: config.method || 'get',      header: {        'content-type': 'application/x-www-form-urlencoded'      },      data: data,      success: (res) => {        return resolve(res)      },      fail: (err) => {        return reject(err)      }    })  })};// request拦截器service.interceptors.request.use(  config => {    uni.showLoading({      title: '加载中'    });    if (config.method === 'post') {      config.data = qs.stringify(config.data);    }    return config;  },  error => {    console.log(error)    Promise.reject(error)  });// response 拦截器service.interceptors.response.use(  response => {    uni.hideLoading();    const res = response.data;    if (res.code === 500) {      uni.showToast({        icon: 'none',        title: res.msg      });      return Promise.reject('error')    } else {      return response.data    }  },  error => {    uni.showToast({      icon: 'none',      title: '未知错误'    });    return Promise.reject(error)  })export default service;// index.jsimport request from './request.js';// 哀求列表export function getList(data) {  return request({    url: '/list',    params: data  });}五、其他

1. 自定义组件

我们在引入自定义组件时,必要直接在模板页面中引入,不能在另外的js文件引入,否则在小程序中自定义组件将无法在页面中乐成渲染。
2. 样式

小程序不支持在 css 中使用本地文件,包罗本地的配景图和字体文件。我们可以使用网络文件或base64替代。
3. 弹层提示

弹层提示在项目中使用频率非常高,就是像“加载中”、“提交乐成”之类的提示,弹出提示后几秒钟就自动潜伏。
在使用Vue开发H5时,对于如许的弹层提示,我们通常都是本身封装组件,然后通过js来调用。但是在uni-app中,则可以直接使用uni.showLoading()和uni.showToast()来实现如许的弹层提示,非常方便。为了更加轻巧,我们还可以在此底子上再封装一层,比方:
// 定义全局方法便于调用Vue.prototype.$message = (msg, icon) => {  uni.showToast({    title: msg,    icon: icon ? icon : 'none'  })}this.$message('请输入手机号');this.$message('提交乐成', 'success');
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-10-18 16:45, Processed in 0.171215 second(s), 35 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表