首页 > 其他分享 >uni-app笔记

uni-app笔记

时间:2023-06-06 09:13:18浏览次数:38  
标签:vue app 笔记 组件 uni data 页面

uni-app笔记

uni-app 使用vue的语法+小程序的标签和API

所有组件与属性名都是小写,单词之间以连字符-连接

每个vue文件的根节点必须为 <template>,且这个 <template> 下只能且必须有一个根 <view> 组件

view==div

<script lang="ts">
    //通过使用lang="ts"可以直接编写typescript代码
</script>

在computed/methods中引用data中的对象使用 : ${对象名(变量名)}

注:只有小程序能够获得导航栏高度,app、H5是没有的,

statusBar ---------- 状态栏高度
customBar -------- 状态栏高度 + 导航栏高度

var StatusBar= this.StatusBar;//this.StatusBar状态栏高度
var CustomBar= this.CustomBar;//this.CustomBar获取状态栏高度 + 导航栏高度
  //ColorUI代码:  
onLaunch: function() {
        uni.getSystemInfo({
            success: function(e) {
                // #ifdef MP-WEIXIN
                Vue.prototype.StatusBar = e.statusBarHeight;
                let custom = wx.getMenuButtonBoundingClientRect();
                Vue.prototype.Custom = custom;
                Vue.prototype.CustomBar = custom.bottom + custom.top - e.statusBarHeight;
                // #endif       
            }
        })
    },

这段代码引用的ColorUI的代码。

Vue.prototype.StatusBar = e.statusBarHeight; 获取的是手机状态栏的高度。

然后在其他页面中的data中定义这个高并且赋值 barheight: this.StatusBar

最后在页面最外层的view中动态绑定这个高,:style="{paddingTop:barheight+'px'}"

这样一来,app的页面就能根据不同手机,不同状态栏高度而改变距离顶部的高度

开发规范

为了实现多端兼容,综合考虑编译速度、运行性能等因素,uni-app 约定了如下开发规范:

  • 页面文件遵循 Vue 单文件组件 (SFC) 规范
  • 组件标签靠近小程序规范,详见uni-app 组件规范
  • 接口能力(JS API)靠近微信小程序规范,但需将前缀 wx 替换为 uni,详见uni-app接口规范
  • 数据绑定及事件处理同 Vue.js 规范,同时补充了App及页面的生命周期
  • 为兼容多端运行,建议使用flex布局进行开发、

目录结构

一个uni-app工程,默认包含如下目录及文件:

┌─uniCloud              云空间目录,阿里云为uniCloud-aliyun,腾讯云为uniCloud-tcb(详见uniCloud)
│─components            符合vue组件规范的uni-app组件目录
│  └─comp-a.vue         可复用的a组件
├─hybrid                App端存放本地html文件的目录,详见
├─platforms             存放各平台专用页面的目录,详见
├─pages                 业务页面文件存放的目录
│  ├─index
│  │  └─index.vue       index页面
│  └─list
│     └─list.vue        list页面
├─static                存放应用引用的本地静态资源(如图片、视频等)的目录,注意:静态资源只能存放于此
├─uni_modules           存放[uni_module](/uni_modules)规范的插件。
├─wxcomponents          存放小程序组件的目录,详见
├─main.js               Vue初始化入口文件
├─App.vue               应用配置,用来配置App全局样式以及监听 应用生命周期
├─manifest.json         配置应用名称、appid、logo、版本等打包信息,详见
├─pages.json            配置页面路由、导航条、选项卡等页面类信息,详见
└─uni.scss              这里是uni-app内置的常用样式变量 
    

Tips

  • 编译到任意平台时,static 目录下的文件均会被完整打包进去,且不会编译。非 static 目录下的文件(vue、js、css 等)只有被引用到才会被打包编译进去。
  • static 目录下的 js 文件不会被编译,如果里面有 es6 的代码,不经过转换直接运行,在手机设备上会报错。
  • cssless/scss 等资源不要放在 static 目录下,建议这些公用的资源放在自建的 common 目录下。
  • HbuilderX 1.9.0+ 支持在根目录创建 ext.jsonsitemap.json 等小程序需要的文件。

ref和$refs和$emit

ref写在标签中,是一个属性,$refs父组件可以调用子组件的data和methods,$emit子组件可以触发父组件的事件。详见Vue笔记

<!-- index 父组件页面 -->
<template>
    <view>
        <base-input ref="usernameInput"></base-input>
        <button type="default" @click="getFocus">获取焦点</button> 
    </view>
</template>
<script>
    export default {
        methods:{
            getFocus(){
                //通过组件定义的ref调用focus方法
                this.$refs.usernameInput.focus()
                //this.$refs.usernameInputs
            }
        }
    }
</script>

组件

uni-app支持的组件分为vue组件小程序自定义组件

uni-app只支持 vue单文件组件(.vue 组件)

视图容器(View Container):

组件名 说明
view 视图容器,类似于HTML中的div
scroll-view 可滚动视图容器
swiper 滑块视图容器,比如用于轮播banner
match-media 屏幕动态适配组件,比如窄屏上不显示某些内容
movable-area 可拖动区域
movable-view 可移动的视图容器,在页面中可以拖拽滑动或双指缩放。movable-view必须在movable-area组件中
cover-view 可覆盖在原生组件的上的文本组件
cover-image 可覆盖在原生组件的上的图片组件

基础内容(Basic Content):

组件名 说明
icon 图标
text 文字
rich-text 富文本显示组件
progress 进度条

表单组件(Form):

标签名 说明
button 按钮
checkbox 多项选择器
editor 富文本输入框
form 表单
input 输入框
label 标签
picker 弹出式列表选择器
picker-view 窗体内嵌式列表选择器
radio 单项选择器
slider 滑动选择器
switch 开关选择器
textarea 多行文本输入框

路由与页面跳转(Navigation):

组件名 说明
navigator 页面链接。类似于HTML中的a标签

媒体组件(Media):

组件名 说明
audio 音频
camera 相机
image 图片
video 视频
live-player 直播播放
live-pusher 实时音视频录制,也称直播推流

媒体组件(Media):

组件名 说明
audio 音频
camera 相机
image 图片
video 视频
live-player 直播播放
live-pusher 实时音视频录制,也称直播推流

地图(Map):

组件名 说明
map 地图

画布(Canvas):

组件名 说明
canvas 画布

webview(Web-view):

组件名 说明
web-view web浏览器组件

广告

组件名 说明
ad 广告组件
ad-draw 沉浸视频流广告组件

页面属性配置

组件名 说明
custom-tab-bar 底部tabbar自定义组件
navigation-bar 页面顶部导航
page-meta 页面属性配置节点

uniCloud

组件名 说明
unicloud-db组件 uniCloud数据库访问和操作组件

组件全局注册

  • main.js 里进行全局导入和注册
    import Vue from 'vue'
    import pageHead from './components/page-head.vue'
    Vue.component('page-head',pageHead)

组件局部注册

  1. 传统vue规范: 在 index.vue 页面中,通过 import 方式引入组件 ,在 components 选项中定义你想要使用的组件。
    <!-- 在index.vue引入 uni-badge 组件-->
    <template>
        <view>
            <uni-badge text="1"></uni-badge><!-- 3.使用组件 -->
        </view>
    </template>
    <script>
        import uniBadge from '@/components/uni-badge/uni-badge.vue';//1.导入组件(这步属于传统vue规范,但在uni-app的easycom下可以省略这步)
        export default {
            components:{uniBadge }//2.注册组件(这步属于传统vue规范,但在uni-app的easycom下可以省略这步)      uniBadge等价于 uniBadge:uniBadge是缩写    //仅支持驼峰法命名
        }
    </script>

2.通过uni-app的easycom: 将组件引入精简为一步。只要组件安装在项目的 components 目录下,并符合 components/组件名称/组件名称.vue 目录结构。就可以不用引用、注册,直接在页面中使用。

    <template>
        <view>
            <uni-badge text="1"></uni-badge><!-- 3.使用组件 -->
        </view>
    </template>
    <script>
        // 这里不用import引入,也不需要在components内注册uni-badge组件。template里就可以直接用
        export default {
            data() {
                return {
                }
            }
        }
    </script>

小程序不支持内容:

  • 作用域插槽(HBuilderX 3.1.19 以下仅支持解构插槽且不可使用作用域外数据以及使用复杂的表达式)
  • 动态组件
  • 异步组件
  • inline-template
  • X-Templates
  • keep-alive(App端也未支持)
  • transition (可使用 animation 或 CSS 动画替代)

uni-app保留字

  • a
  • canvas
  • cell
  • content
  • countdown
  • datepicker
  • div
  • element
  • embed
  • header
  • image
  • img
  • indicator
  • input
  • link
  • list
  • loading-indicator
  • loading
  • marquee
  • meta
  • refresh
  • richtext
  • script
  • scrollable
  • scroller
  • select
  • slider-neighbor
  • slider
  • slot
  • span
  • spinner
  • style
  • svg
  • switch
  • tabbar
  • tabheader
  • template
  • text
  • textarea
  • timepicker
  • transition-group
  • transition
  • video
  • view
  • web

Tips

  • 除以上列表中的名称外,标准的 HTML 及 SVG 标签名也不能作为组件名。
  • 在百度小程序中使用时,不要在 data 内使用 hidden ,可能会导致渲染错误。
  • methods中不可使用与生命周期同名的方法名。

dataset-切换界面

常用于切换页面,内置data-(attribute)属性

使用e.currentTarget.dataset.cur获得data-cur的值

e.currentTarget获取的是哪个view触发了单击事件,传入这个对象

<tools v-if="PageCur == 'mrxc'"></tools>
<user v-if="PageCur == 'grzx'"></user>
<element v-if="PageCur == 'xcsh'"></element>
<!--v-if根据PageCur的值确定显示情况-->

<view class="action" @click="NavChange" data-cur="xcsh">
				
</view>
<view class="action" @click="NavChange" data-cur="grzx">
				
</view>
<view class="action" @click="NavChange" data-cur="mrxc">
				
</view>
<script>
    export default {
	components: {
		tools,
		user,
		element
	},
	data() {
		return {
			PageCur: 'mrxc'
		};
	},
	methods: {
        //获取data-cur
		NavChange: function(e) {
			this.PageCur = e.currentTarget.dataset.cur;
		}
        //上下两个都行!!!
        //获取data-index
        test(e){
			console.log(e.target.dataset.index);
		}
	}
};
</script>

target--(捕捉和冒泡会影响触发事件的对象组件)

触发事件的源组件。

属性 类型 说明
id String 事件源组件的id
dataset Object 事件源组件上由data-开头的自定义属性组成的集合

currentTarget--常用

事件绑定的当前组件。

属性 类型 说明
id String 当前组件的id
dataset Object 当前组件上由data-开头的自定义属性组成的集合

跳转页面

uni.navigateBack(OBJECT)

关闭当前页面,返回上一页面或多级页面。可通过 getCurrentPages() 获取当前的页面栈,决定需要返回几层。

OBJECT参数说明

参数 类型 必填 默认值 说明 平台差异说明
delta Number 1 返回的页面数,如果 delta 大于现有页面数,则返回到首页。
animationType String pop-out 窗口关闭的动画效果,详见:窗口动画 App
animationDuration Number 300 窗口关闭动画的持续时间,单位为 ms App
// 此处是A页面
uni.navigateTo({
    url: 'B?id=1'
});

// 此处是B页面
uni.navigateTo({
    url: 'C?id=1'
});

// 在C页面内 navigateBack,将返回A页面
uni.navigateBack({
    delta: 2    //往前跳两次
});

uni.reLaunch(OBJECT)

关闭所有页面,打开到应用内的某个页面。

注意: 如果调用了 uni.preloadPage(OBJECT) 不会关闭,仅触发生命周期 onHide

OBJECT参数说明

参数 类型 必填 说明
url String 需要跳转的应用内页面路径 , 路径后可以带参数。参数与路径之间使用?分隔,参数键与参数值用=相连,不同参数用&分隔;如 'path?key=value&key2=value2',如果跳转的页面路径是 tabBar 页面则不能带参数
success Function 接口调用成功的回调函数
fail Function 接口调用失败的回调函数
complete Function 接口调用结束的回调函数(调用成功、失败都会执行)
uni.reLaunch({
		url: '/pages/login/index',
});

slot详见Vue笔记

uni-app使用具体槽名slot有点不同

//子组件定义
<slot name="content"></slot>
//父组件调用
<block slot="content">工具</block>

标签:vue,app,笔记,组件,uni,data,页面
From: https://www.cnblogs.com/lost-ways/p/17459557.html

相关文章

  • Vue笔记
    Vue笔记vuex-router-sync插件:https://segmentfault.com/a/1190000037680351学到vue.js路由就没学了!还有过渡和动画、混入、AJAX、响应接口没学进度:https://learning.dcloud.io/#/?vid=5https://cn.vuejs.org/v2/guide/index.html模板组件化应用构建//问题:props是什么?技巧:......
  • uniCloud笔记
    uniCloud笔记结合:uni-admin实现后台的云管理,schema2code辅助自动生成代码(只需要定义好表结构)云函数云函数,是将本地写好的函数上传到云端,在云端的node.js的环境中运行。可以在本地的页面中在生命周期函数(钩子函数)中调用云函数如下://在组件/页面加载时,调用云函数的回调函数on......
  • Vue-Cli笔记
    Vue-Cli笔记新手上路在创建模式的时候,选择最后一个模式:自定义模式,创建项目,只需勾选下图3个配置,使用空格进行选择和不选择。然后选择vue版本2.x在选择css预编译中选择less最后选择是否将babel、Eslint等文件放到一个独立的文件中或放入package.json,我们选择第一项独立的文......
  • javascript笔记
    javascript笔记获得焦点onfocus,失去焦点onblurisNaN()判断是非数字undefined和数字相加最后的结果是NaNnull和数字相加最后的结果是数字typeof空格变量名或typeof(变量名)可以检测变量的类型parseInt('120.8px')最后的结果是120->数字;自动去掉px......
  • “陇上食安APP”【日管控、周排查、月调度】操作流程
    移动端第一步:下载“陇上食安APP”方式1:直接点击链接点我下载方式2:手机扫码一定记得下载【商户端】!第二步:登录APP打开安装的【陇上食安APP】账号是:个人的手机号密码是:root2021@如果密码错误,或者账号不合适,联系我第三步:点【企业自律】中的【主体责任】新增如管控......
  • Java官方笔记7接口
    接口接口只能包含:constants,methodsignatures(abstract),defaultmethods,staticmethods,andnestedtypes方法体只存在于:defaultmethodsandstaticmethods接口不能实例化,只能被类实现,或者被其他接口继承(接口可以多继承)。定义接口:publicinterfaceOperateCar{/......
  • 【VUE】Vue 快速入门 笔记基础01
    一、vue相关了解1、概述Vue.js是一种流行的JavaScript框架,用于构建响应式、交互式的前端Web界面。它采用了基于组件的开发模式,允许在单个页面中使用多个可重用的组件,提高了代码的复用性和维护性。只关心视图层,自底向上.遵守SOC关注点分离原则(术有专攻,只关注一点)HTML+CSS......
  • 《深入理解Spring Cloud与微服务构建》学习笔记(二十)~配置中心Spring Cloud Config
    本例重新创建项目,构建一个空的mavan工程。一、ConfigServer从本地读取配置文件 新建一个moudleconfig_server,pom添加依赖1.2.<groupId>org.springframework.cloud</groupId>3.<artifactId>spring-cloud-config-server</artifactId>4.</dependency>启动类添加......
  • 手机app打包发布
    今天app已经打包成apk,  ......
  • windows笔记本极致省电指南
    用到了三个软件:parkcontrol,processlasso,quickCPUparkcontrol-调整CPU的运行核心和频率,可以设置离电的时候关闭一些CPU核心数,以达到省电的目的插电的时候是全核心运行,离电的时候只有一个核心两个线程在运行。在显示高级设置里,设置使用的核心数,为了极致省电,把电池模式下的......