uni-app备忘录

一、项目结构介绍

pages.json:配置页面路由、导航条、选项卡等页面类信息,详见。
manifest.json:配置应用名称、appid、logo、版本等打包信息,详见。
App.vue:应用配置,用来配置App全局样式以及监听应用的生命周期。
main.js:Vue初始化入口文件
static目录:存放应用引用静态资源(如图片、视频等)的地方,注意:静态资源只能存放于此
pages目录:业务页面文件存放目录
components目录:组件文件存放目录

Vue.prototype.$store知识点:
https://blog.csdn.net/qq_32407233/article/details/83819831

数据缓存uni.getStorageSync知识点:
http://www.hcoder.net/tutorials/info_1353.html

Vue.config.productionTip = false 以开发环境运行

二、css3相关

https://www.jianshu.com/p/fe36aa3e5fc6

vw: 视口宽度的百分比(1vw 等于视口宽度的 1%)
vh: 视口高度的百分比(1vh 等于视口高度的 1%)
% 是相对于父元素的大小设定的比率,vw vh 是视口大小决定的
vmin: 选取 vw 和 vh 中最小的那个
vmax: 选取 vw 和 vh 中最大的那个

vw、vh 是基于视口的,而不是父元素。1vw 等于1/100 的视口宽度,1vh 等于1/100 的视口高度,比如:
浏览器高度 950px,宽度为 1920px, 1vh = 950px/100 = 9.5 px,1vw = 1920px/100 =19.2 px
vw、vh 能直接获取高度,而 % 如果没有设置body的高度情况下,是无法获取可视区域的高度。
vmin、vmax 用处解决横屏竖屏字体不一样的问题

单位方面,px无法动态适应不同宽度的屏幕,rem只能用于h5、rpx只能用于微信小程序。为此uni-app新增了 upx ,通吃所有端、所有屏幕宽度的动态单位 upx文档,微信小程序中认为页面宽度为750rpx,在不同的设备上1rpx对应的像素值是不同的,如果设备宽度为750px那么1rpx=1px,如果设备宽度为1500px那么1rpx=2px,upx类似于rpx使用更宽泛。

html > body table + ul {margin-top:20px;}

这个选择器解释为:选择紧接在 table 元素后出现的所有兄弟 ul 元素,该 table 元素包含在一个 body 元素中,body 元素本身是 html 元素的子元素。

a:link {color: #FF0000}     /* 未访问的链接 */
a:visited {color: #00FF00}  /* 已访问的链接 */
a:hover {color: #FF00FF}    /* 鼠标移动到链接上 */
a:active {color: #0000FF}   /* 选定的链接 */
box-sizing布局

css3增添了盒模型box-sizing,有三个属性值
content-box:默认值,让元素维持w3c的标准盒模型。元素的width/height等于border的宽度加上padding值加上元素内容的width/height,(默认内容区大小不会变)
即Element Width/Height = boder + padding + content width/height;
border-box:让元素维持IE6及以下版本盒模型,元素的width/height等于元素内容的width/height,
即:Element Width/Height = width/height-border-padding。
inherit:继承父元素的盒模型模式。
其中最重要的就是border-box,如果遇到不影响其他区域布局,还要给元素加padding、border的情况,使用border-box元素所占空间不会变,加padding、border会往内挤,保持外面容器不被破坏。(注意:margin不包含在元素空间,加了margin会向外撑开)。
兼容性:IE8+及其他主流浏览器均支持box-sizing。其中IE6及以下默认是以类似border-box盒模型来计算尺寸。
(ps:Firefox浏览器,box-sizing还可以设置一个padding-box,指定元素的宽度/高度等于内容的宽度/高度和內距,
即:Element Width/Height = content width/height+padding。)

三、输入框input

v-model仅仅是语法糖

<input type="text" v-model="something">

相当于

<input
                type="text"
                v-bind:value="something"
                v-on:input="something = $event.target.value">

四、状态栏$导航栏

可以隐藏掉uni-app的原生导航栏使用colorui提供的cu-custom自定义导航栏。

1、下载插件

https://ext.dcloud.net.cn/plugin?id=239下载colorui并倒入你的项目根目录

2、App.vue 引入关键Css main css icon.css
<style>
    @import "colorui/main.css";
    @import "colorui/icon.css";
    ....
</style>
3、使用自定义导航栏

main.js 引入 cu-custom 组件

import cuCustom from './colorui/components/cu-custom.vue'
Vue.component('cu-custom',cuCustom)
4、App.vue 获得系统信息
onLaunch: function() {
    uni.getSystemInfo({
        success: function(e) {
            // #ifndef MP
            Vue.prototype.StatusBar = e.statusBarHeight;
            if (e.platform == 'android') {
                Vue.prototype.CustomBar = e.statusBarHeight + 50;
            } else {
                Vue.prototype.CustomBar = e.statusBarHeight + 45;
            };
            // #endif

            // #ifdef MP
            Vue.prototype.StatusBar = e.statusBarHeight;
            let custom = wx.getMenuButtonBoundingClientRect();
            Vue.prototype.Custom = custom;
            Vue.prototype.CustomBar = custom.bottom + custom.top - e.statusBarHeight;
            // #endif
        }
    })
},
5、pages.json 配置取消系统导航栏
"globalStyle": {
    "navigationStyle": "custom"
},
6、page.vue 页面可以直接调用了
<cu-custom bgColor="bg-gradual-blue" :isBack="true">
    <block slot="backText">返回</block>
    <block slot="content">导航栏</block>
</cu-custom>

带分割线的导航栏

<cu-custom bgColor="bg-white solid-bottom" :isBack="false">
    <block slot="backText"></block>
    <block slot="content">消息</block>
</cu-custom>
7、修改状态栏文字颜色

pages.json 文件中对应页面的style设置navigationBarTextStylewhite或者black

{
            "path" : "pages/mine/minePages/personInfo/personInfo",
            "style" : {
                "navigationBarTitleText": "个人信息",
                "navigationBarTextStyle": "white"
            }
        }
参数说明
参数 作用 类型 默认值
bgColor 背景颜色类名 String ''
isBack 是否开启返回 Boolean false
bgImage 背景图片路径 String ''
slot块 作用
backText 返回时的文字
content 中间区域
right 右侧区域(小程序端可使用范围很窄!)

参考地址
https://www.jianshu.com/p/c32e09109eb6
https://uniapp.dcloud.io/collocation/pages

五、数据持久化

  1. uni.setStorage

将数据存储在本地缓存中指定的 key 中,会覆盖掉原来该 key 对应的内容,这是一个异步接口。

uni.setStorage({
    key: 'storage_key',
    data: 'hello',
    success: function () {
        console.log('success');
    }
});
  1. uni.setStorageSync
    将 data 存储在本地缓存中指定的 key 中,会覆盖掉原来该 key 对应的内容,这是一个同步接口。
try {
    uni.setStorageSync('storage_key', 'hello');
} catch (e) {
    // error
}
  1. uni.getStorage
    从本地缓存中异步获取指定 key 对应的内容。
uni.getStorage({
    key: 'storage_key',
    success: function (res) {
        console.log(res.data);
    }
});
  1. uni.getStorageSync
    从本地缓存中同步获取指定 key 对应的内容。
try {
    const value = uni.getStorageSync('storage_key');
    if (value) {
        console.log(value);
    }
} catch (e) {
    // error
}
  1. uni.getStorageInfo
    异步获取当前 storage 的相关信息。
uni.getStorageInfo({
    success: function (res) {
        console.log(res.keys);
        console.log(res.currentSize);
        console.log(res.limitSize);
    }
});
  1. uni.getStorageInfoSync
try {
    const res = uni.getStorageInfoSync();
    console.log(res.keys);
    console.log(res.currentSize);
    console.log(res.limitSize);
} catch (e) {
    // error
}
  1. uni.removeStorage
    从本地缓存中异步移除指定 key。
uni.removeStorage({
    key: 'storage_key',
    success: function (res) {
        console.log('success');
    }
});
  1. uni.removeStorageSync
    从本地缓存中同步移除指定 key。
try {
    uni.removeStorageSync('storage_key');
} catch (e) {
    // error
}
  1. uni.clearStorage
    清理本地数据缓存。
uni.clearStorage();
  1. uni.clearStorageSync
    同步清理本地数据缓存。
try {
    uni.clearStorageSync();
} catch (e) {
    // error
}

uni-app的Storage在不同端的实现不同:

  • H5端为localStorage,浏览器限制5M大小,是缓存概念,可能会被清理
  • App端为原生的plus.storage,无大小限制,不是缓存,持久化
  • 各个小程序端为其自带的storage api,数据存储生命周期跟小程序本身一致,即除用户主动删除或超过一定时间被自动清理,否则数据都一直可用。
  • 微信小程序单个 key 允许存储的最大数据长度为 1MB,所有数据存储上限为 10MB。
  • 支付宝小程序单条数据转换成字符串后,字符串长度最大200*1024。同一个支付宝用户,同一个小程序缓存总上限为10MB。
  • 百度、头条小程序文档未说明大小限制
    除此之外,H5端还支持websql、indexedDB、sessionStorage;App端还支持SQLiteIO文件等本地存储方案。

六、获取当前时间

    var date = new Date()
    console.log('当前年'+date.getFullYear())
    console.log('当前月'+(date.getMonth()+1).toString())
    console.log('当前日'+date.getDate().toString())
    console.log('当前时'+date.getHours().toString())
    console.log('当前分'+date.getMinutes().toString())
    console.log('当前秒'+date.getSeconds().toString())
  /**
 * 获取当前时间
 * 格式YYYY-MM-DD
 */
Vue.prototype.getNowFormatDate = function() {
      var date = new Date();
      var seperator1 = "-";
      var year = date.getFullYear();
      var month = date.getMonth() + 1;
      var strDate = date.getDate();
      if (month >= 1 && month <= 9) {
          month = "0" + month;
      }
      if (strDate >= 0 && strDate <= 9) {
          strDate = "0" + strDate;
      }
      var currentdate = year + seperator1 + month + seperator1 + strDate;
      return currentdate;
};

七、字符串操作

  • splite(' ')可以将字符串按某个字符或者其他分割。返回数组。
  • reverse()该方法会改变原来的数组,而不会创建新的数组。此函数可以将数组倒序排列。
  • join()方法用于把数组中的所有元素放入一个字符串。元素是通过指定的分隔符进行分隔的。指定分隔方法join(' ');

例如

                var message = 'abc'
                console.log('操作之前的结果为'+message)
                var a = message.split('').reverse().join('')
                console.log('操作之后的结果为'+a)

此操作不会改变原来的字符串,会生成一个新的字符串

八、计算属性(computed)和方法(methods)的区别

我们可以将同一函数定义为一个方法而不是一个计算属性。两种方式的最终结果确实是完全相同的。然而,不同的是计算属性是基于它们的响应式依赖进行缓存的。只在相关响应式依赖发生改变时它们才会重新求值。这就意味着只要 message 还没有发生改变,多次访问 reversedMessage 计算属性会立即返回之前的计算结果,而不必再次执行函数。

  computed: {
    // 计算属性的 getter
    reversedMessage: function () {
      // `this` 指向 vm 实例
      return this.message.split('').reverse().join('')
    }
  }

但是以下用法不会出发更新,每次获取都是第一次的时间,需要放到methods中

computed: {
  now: function () {
    return Date.now()
  }
}

九、一个页面的框架

<template>
    <view class="content">
        <cu-custom bgColor="bg-white solid-bottom" style="align-self: flex-start;">
            <block slot="backText"></block>
            <block slot="content">首页</block>
        </cu-custom>
        <view class="c"></view>
    </view>
</template>

<script>
    export default {
        data() {
            return {
                
            }
        },
        computed:{
            
        },
        methods: {
        }
    }
</script>

<style lang="less">
    .content {
        display: flex;
        flex-direction: column;
        justify-content: flex-start;
        align-items: center;
        height: 100vh;
        width: 100vw;
        background-color: #FFFFFF;
        
        .c{
            width: 750upx;
            background-color: #007AFF;
            flex-grow: 1;
        }
    }
    
</style>
img.png

默认导航栏有可能不是居中的,所以需要给cu-custom设置style

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