uniapp学习历程

1.不同盒子元素设置随机背景色

//遍历数据,创建多个元素,需求是每个元素都会在多个颜色范围内设置不同的背景颜色
<view class="tags" v-for="(citem, cindex) in list" :key="cindex">
  <text :style="[randomColor()]">{{ citem }}</text>
</view>

//js:创建一个随机色的方法,目前是固定的3中颜色之间随机,返回拼接好的css即可
randomColor() {
      let arr = ['50, 166, 124', '125, 144, 94', '51, 124, 212'];
      let color = Math.floor(Math.random() * 3);
      return {
          color: 'rgb(' + arr[color] + ')',
          'border-color': 'rgb(' + arr[color] + ')'
      };
  }

2.uniapp开发微信小程序,h5,app的主体内容和导航栏与状态栏的适配

//顶部手机状态栏一般只需要加高导航栏,或者预留一块空白区域即可避免状态栏遮挡导航栏
//导航栏和主体内容之间,一般会进行计算后得到高度
//一般顶部导航栏都是使用了定位,所以会脱离文档流,这里我们使用了导航栏组件,而导航栏一般都是44px的高度
<u-navbar title="导航栏" autoBack></u-navbar>
<view class="list" :style="{ position: 'absolute', top: sHeight }">
  //主体内容区域,写业务逻辑代码
</view>

//js:
// 计算距离顶部安全高度(顶部状态栏的高度加上导航栏的高度,如果导航栏高度不固定,可以通过获取节点信息来获取导航栏高度)
getStatusHeight() {
    this.sHeight = uni.getSystemInfoSync().statusBarHeight + 44 + 'px';
    console.log(this.sHeight);
},

3.商城项目评论数、销量、库存等数字的格式化体现

//业务需求是把所有的有关数字类的数据(除了金钱,时间等)做一个格式化处理,例如1230 => 1000+
//辅助工具类代码可以自己创建一个js放置该代码,或者使用vue的过滤器filter,相关知识点自行搜索。这样就可以进行全局使用,复用比较方便
export function handleNum(num) {
    if (num < 1000) {
        return num
    }
    if (num < 10000 && num >= 1000) {
        let numArr = ((num / 1000) + '').split('.')
        if (numArr.length > 1) {
            if (numArr[1][0] === '0') {
                return numArr[0] + '000+'
            } else {
                return numArr[0] + numArr[1][0] + '00+'
            }
        } else {
            return (numArr[0] + '000+')
        }
    } else if (num >= 10000) {
        let numArr = ((num / 10000) + '').split('.')
        if (numArr.length > 1) {
            if (numArr[1][0] === '0') {
                return numArr[0] + '万+'
            } else {
                return numArr[0] + '.' + numArr[1][0] + '万+'
            }
        } else {
            return (numArr[0] + '万+')
        }
    }

}

4.uniapp开发 页面通过拼接路由地址的传参方式(复杂型数据)

//假设有2个页面
index.vue
cindex.vue

//index.vue:
//路由跳转,index页面跳转到cindex并携带参数
uni.navigateTo({
    url: `/pagesA/cindex/cindex?dataList=${encodeURIComponent(JSON.stringify(dataList))}`
});

//接收由index页面带来的参数
//cindex.vue:
onLoad(option) {
    this.dataList = JSON.parse(decodeURIComponent(option.dataList));
},

5.跨越多页面,组件之间的传参

//uni.$emit()  发送事件(vue则是this.$emit())具体用法类似
//uni.$on 或者 uni.$once  接收事件,并做后续的逻辑处理
//uni.$off 移除或卸载事件(避免多个页面事件杂乱,会影响到其他页面)

6.基于原生框架的上拉和下拉刷新逻辑

//在page.js中注册页面时
{
    "path": "pages/index/index",
    "style": {
        "navigationBarTitleText": "首页",
        "enablePullDownRefresh": true,   //开启刷新
        "navigationStyle": "custom"
    }
},

//上拉事件生命周期和onload同级(上拉刷新)
onPullDownRefresh() {
    //业务逻辑
    uni.stopPullDownRefresh(); //逻辑执行完停止刷新事件
},

//触底事件生命周期和onload同级(下拉加载)
onReachBottom() {
    //业务逻辑
},

7.倒计时

computetTime(current, create) {
        let st = current.replace(/\-/g, '/'), //当前服务器实时时间
              ct = create.replace(/\-/g, '/'); //创建订单的时间
        let ts = new Date(st).getTime(),
              tc = new Date(ct).getTime();
        let cm = 30 * 60 * 1000 - (ts - tc);  //固定30分钟倒计时
        this.runBack(cm);
    },
runBack(cm) {
    if (cm > 0) {
        cm > 60000
            ? (this.rocallTime =
                (new Date(cm).getMinutes() < 10 ? '0' + new Date(cm).getMinutes() : new Date(cm).getMinutes()) +
                ':' +
                (new Date(cm).getSeconds() < 10 ? '0' + new Date(cm).getSeconds() : new Date(cm).getSeconds()))
            : (this.rocallTime = '00:' + (new Date(cm).getSeconds() < 10 ? '0' + new Date(cm).getSeconds() : new Date(cm).getSeconds()));
        let _msThis = this;
        this.timeOut = setTimeout(function() {
            cm -= 1000;
            _msThis.runBack(cm);
        }, 1000);
    } else {
        uni.navigateBack({
            delta: 1
        });
        setTimeout(() => {
            this.tui.toast('该订单支付已超时');
        },300)
        if (this.timeOut) {
            this.timeOut = null;
            clearTimeout(this.timeOut);
        }
    }
},

8.返回上一页并刷新数据。当前方法是根据获取路由信息,得到页面实例,最终获取页面的刷新事件进行实现(需求场景:订单详情取消订单后返回上一页订单列表并刷新数据)

//封装一个函数:(该方法有弊端,必须有跳转页面的路由记录才能进行使用)
//num 自行传参,根据不同的场景,类型是数字,传2就是上一个页面,以此类推
backReload(num){
    let pages = getCurrentPages(); //得到进入过的页面的列表
    let beforePage = pages[pages.length - num]; 
    beforePage.$vm.$refs.paging.reload()   //$vm是页面信息,包括页面的data,逻辑函数等等($refs.paging.reload() 是我这边列表的刷新方法)
}

9.uniapp获取页面节点信息

let selectorQuery = uni.createSelectorQuery();
    selectorQuery
        .selectAll('.className').boundingClientRect(data => {      //.className是类名
            console.log(data)
        })
.exec();
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容

  • 一、UniAPP 介绍 (1)什么是 UniAPP ? uni-app 是一个使用 Vue.js 开发所有前端应用...
    DaZenD阅读 1,478评论 0 1
  • 1. WXML 要求标签必须是严格闭合的,没有闭合将会导致编译错误。 2. 属性值也可以动...
    慕诩阅读 315评论 0 0
  • Uniapp是什么,它的优势和特点Uniapp是一种跨平台开发框架,可以同时开发出iOS、Android、H5等多...
    木火应阅读 1,443评论 0 0
  • 开发工具 HBuilder-x[https://www.dcloud.io/hbuilderx.html]微信开发...
    渺渺空空阅读 3,130评论 0 0
  • 基于 UniAPP 从入门到社区项目实战 课程背景:咱们作为前端开发人员,单纯的Web 端开发已经慢慢无法满足我们...
    A_走在冷风中阅读 1,464评论 0 2