uni-app 手记集。

news2025/1/11 21:58:19

1、uni-app 是一个使用 Vue.js 开发的前端应用的框架,所以不会Vue.js的小伙伴可以先去看看Vue.js的基础教学。

2、.vue文件结构

<template>
  <div class="container">
   </div>
</template>

<script type="text/ecmascript-6">
export default {
    data(){
        return{
        // 数据
        };
    },
    components:{
      // 组件注册
    },
    beforeCreate(){
      // 在实例初始化之后,数据观测(data observer) 和 event/watcher 事件配置之前被调用。
    },
    create(){
      // 实例已经创建完成之后被调用。在这一步,实例已完成以下的配置:数据观测(data observer),属性和方法的运算, watch/event 事件回调。然而,挂载阶段还没开始,$el 属性目前不可见。
    },
    beforeMount(){
      // 在挂载开始之前被调用:相关的 render 函数首次被调用。
    },
    mounted(){
      // el 被新创建的 vm.$el 替换,并挂载到实例上去之后调用该钩子。
    },
    beforeUpdate(){
      // 数据更新时调用,发生在虚拟 DOM 重新渲染和打补丁之前。 你可以在这个钩子中进一步地更改状态,这不会触发附加的重渲染过程。
    },
    updated(){
      // 由于数据更改导致的虚拟 DOM 重新渲染和打补丁,在这之后会调用该钩子。
      // 当这个钩子被调用时,组件 DOM 已经更新,所以你现在可以执行依赖于 DOM 的操作。然而在大多数情况下,你应该避免在此期间更改状态,因为这可能会导致更新无限循环
    },
    beforeDestroy(){
      // 实例销毁之前调用。在这一步,实例仍然完全可用。 
    },
    destroyed(){
      // Vue 实例销毁后调用。调用后,Vue 实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁。 该钩子在服务器端渲染期间不被调用。
    },
    computed:{
      // 计算属性
    },
    watch:{
      // 数据监听
    },
    methods:{
      // 方法定义
    }
}
</script>
<style>
  // css 样式
</style>

各参数/方法使用场景

components:{ // 组件注册 },:局部声明组件
create(){ },: 在模板渲染成html前调用,即通常初始化某些属性值,然后再渲染成视图。
mounted(){ }, : 在模板渲染成html后调用,通常是初始化页面完成后,再对html的dom节点进行一些需要的操作。例:比如插件chart.js的使用: var ctx = document.getElementById(ID);
computed:{ // 计算属性 }, : 计算属性(computed)是基于它们的依赖进行缓存的。计算属性只有在它的相关依赖发生改变时才会重新求值。这就意味着只要 message 还没有发生改变,多次访问 reversedMessage 计算属性会立即返回之前的计算结果,而不必再次执行函数。
watch:{ // 数据监听 }, : Vue 提供了一种更通用的方式来观察和响应 Vue 实例上的数据变动:侦听属性。当你有一些数据需要随着其它数据变动而变动时,你很容易滥用 watch——特别是如果你之前使用过 AngularJS。然而,通常更好的做法是使用计算属性而不是命令式的 watch

3.input 通过v-model双向绑定,完成input框值获取。

<template>
   <div>
       <div class="logininfor">
           <input type="text" placeholder="手机号码" v-model="userphone">
           <input type="text" placeholder="密码" v-model="userpass">
           <span @click="register()">注册</span>
       </div>
       <p>已有账号?去<span class="zhuce" @click="login()">登录</span></p>
   </div>
</template>
<script>

export default {
     data(){
        return{
            userphone:"",
            userpass:""
        }
    },
    methods: {
            register(){
                window.console.log(this.userphone,this.userpass)
            }
        },
    }
</script>

4、图片选择--选择本地相册

<template>
	<view class="content">
		<image class="logo" :src="img"></image>
		<view class="text-area">
			<text class="title">{{title}}</text>
	
		</view>
		<view class="btn-area">
			<button @click="onbtn" class="btn_jin">{{btn_jin}}</button>
		</view>
		
		<view class="btn-area">
			<button @click="onImg" >更换选择图片</button>
		</view>
		
		<view class="btn-area">
			<button @click="onImg2" >更换选择图片2</button>
		</view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				title: 'Hello',
				btn_jin:'成为企业会员>>',
				img:'',
			}
		},
		onLoad() {
			this.img = '../../static/logo.png';
		},
		methods: {
			onbtn(){
				//页面跳转
				uni.navigateTo({
				    url: 'JD2BCreateEnterprise?title=jin123'
				});
			},
			onImg(){
				this.img = '../../static/jd2b_upload_image_add_btn.png';
			},
			onImg2(){
				uni.chooseImage({
				    count: 1, //默认9
				    sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
				    sourceType: ['album'], //从相册选择
				    success: (res) => {
						var filesPaths = res.tempFilePaths;						
						if(filesPaths && filesPaths.length > 0){
							this.img = filesPaths[0];
							console.log(this.img)
							
						}	
				    }
				});
			
			},
		}
	}
</script>

<style>
	.content {
		display: flex;
		flex-direction: column;
		align-items: center;
		justify-content: center;
	}

	.logo {
		height: 200rpx;
		width: 200rpx;
		margin-top: 200rpx;
		margin-left: auto;
		margin-right: auto;
		margin-bottom: 50rpx;
	}

	.text-area {
		display: flex;
		justify-content: center;
	}

	.title {
		font-size: 36rpx;
		color: #8f8f94;
	}
</style>

5、判断字符串是否包含关系:

if(imgs[i].indexOf('http') === -1)

6、匹配图片的正则表达式:

let data = res.resultValue.RichData
					var imgs = [];
					//匹配图片(g表示匹配所有结果i表示区分大小写)
					var imgReg = /<img.*?(?:>|\/>)/gi;
					//匹配src属性 
					var srcReg = /src=[\'\"]?([^\'\"]*)[\'\"]?/i;
					var arr = data.match(imgReg);
					console.log(arr)
					for (var i = 0; i < arr.length; i++) {
					  var src = arr[i].match(srcReg);
					  //获取图片地址
					  if(src[1]){
					    console.log('已匹配的图片地址'+(i+1)+':'+src[1]);
						imgs.push(src[1]);
					  }					
					}
					console.log(imgs);

7、替换的正则表达式

//替换style=""为空
					data = data.replace(/style=""/g,'')
					data = data.replace(/<img/g, '<img style="width: 100%;"').replace(/px/g, 'rpx').replace(/750/g, '350px')
					data = data.replace(/<p>/g, '<div style="text-align:center;">').replace(/<\/p>/g, '</div>')

8、第三方布局https://orangleli.github.io/markdown-html/vue-js-markdown-editor/markdown2html.html


9、css布局

水平排列,两端对齐,居中

<view class="flex space-between v-center">

水平排列,居中

<view  class="flex flex-row v-center">

垂直排列

<view class="flex flex-column">

1、上下居中(垂直居中)
style="height: 40px; background-color: #FFFFFF;
display: flex; flex-direction: row; align-items: center;"

2、左右居中(水平居中)
style="height: 40px; background-color: #FFFFFF; 
display: flex; flex-direction: row; justify-content: center;"

10、JSON跟vue对象互换

对象转json

JSON.stringify(this.storeInfo)

json转对象

JSON.parse(options.data)

11、设置底部布局,且不受滑动干扰

.view_to_cart{
	position: fixed;
	right: 15rpx;
	bottom: 16%;
	width: 80rpx;
	height: 80rpx;
	line-height: 80rpx;
	text-align: center;	
	margin-right: 10px;
}

12、swiper动态计算高度

1、在布局设置高度为动态赋值

<swiper class="tab-swiper"  @change="switchTag" :current="nowActive"  :style="'height: ' + height +'px;'">

</swiper>

2、在data声明height函数

data() {
        return {                       
            height: 750,            
        }
    },

3、在页面挂载后设置swiper高度
mounted() {
		this.setHeight();
	},

4、设置高度
setHeight() {
			let windowHeight = uni.getSystemInfoSync().windowHeight;//页面可见区域
			console.log("windowHeight = "+windowHeight)
			if (this.tabArr.length === 0){
				this.height = windowHeight;
			} else {
				
				windowHeight = windowHeight - 44;//页面可见区域 - 在线购物条高度					
				console.log("windowHeight = "+windowHeight)
				var query2 = uni.createSelectorQuery();
				query2.select('.view_head').boundingClientRect(rect => {
					if (rect) {
						console.log("view_head.height = "+rect.height)
						this.height = windowHeight - rect.height;//页面可见区域 - 头部高度
						console.log("this.height = "+this.height)
					}
				}).exec();				
			}
			
		},

13、分页加载API

onReachBottom(){
		//分页加载
		console.log('onReachBottom'+this.nowActive)
		if(this.nowActive === 1){
			this.grouponPageNo++;
			this.getGrouponList(this.shopInfo.Id, this.message, this.userInfo.CommunityId, this.userInfo.userId);
		}else if(this.nowActive === 0){
			this.pageNo++;
			this.getGoodList(this.shopInfo.Id, this.message, this.userInfo.CommunityId, this.userInfo.userId);
		}
		
	},

14、页面标签内写判断语句

:color="isStock==='1'?'#51B3F1':'#333'" 

15、数组

1)循环

let arr=[]

for (let k in this.imgList) {
                    arr[k] = await this.uploadFile(this.imgList[k])
                }

2)数组增加对象

arr.push()

16、页面返回刷新

var pages = getCurrentPages();
var currPage = pages[pages.length - 1]; //当前页面
var prevPage = pages[pages.length - 2]; //上一个页面
//直接调用上一个页面的setData()方法,把数据存到上一个页面中去
prevPage.setData({
        isDoRefresh:true//上一个页面的data里面的参数
})
 uni.navigateBack();

===========================

onShow:function(e){
       let pages = getCurrentPages();
       let currPage = pages[pages.length-1];
       if (currPage.data.isDoRefresh == true){
currPage.data.isDoRefresh = false;
           //在此刷新
        }else{
           //不用刷新
        }

 }

17、圆角

1. 指定背景颜色的元素圆角:
{
    border-radius: 25px;
    background: #8AC007;
    padding: 20px;
    width: 200px;
    height: 150px;
}

2. 指定边框的元素圆角:
{
    border-radius: 25px;
    border: 2px solid #8AC007;
    padding: 20px;
    width: 200px;
    height: 150px;
}

3. 指定背景图片的元素圆角:
{
    border-radius: 25px;
    background: url(paper.gif);
    background-position: left top;
    background-repeat: repeat;
    padding: 20px;
    width: 200px;
    height: 150px;
}

4. 四个值,第一个值为左上角,第二个值为右上角,第三个值为右下角,第四个值为左下角。
{
    border-radius: 15px 50px 30px 5px;
    background: #8AC007;
    padding: 20px;
    width: 200px;
    height: 150px;
}

border-radius:0 0 100% 100%;

18、渐变色

基础线性渐变,从上到下
background: linear-gradient(blue, pink);

改变渐变方向
background: linear-gradient(to right, blue, pink);

对角线渐变
background: linear-gradient(to bottom right, blue, pink);

设置渐变角度
background: linear-gradient(70deg, blue, pink);

19、padding

padding : +数值+单位 或 百分比数值

div{padding:5px}设置对象距离四边边距为5px间隔

同时可以单独设置左、右、上、下边距离发布设置

1、padding-left 设置对象距离左边的边距补白间隔
div{padding-left:5px}
对象内距离左边补白间距为5px

2、padding-right 设置对象距离右边的边距补白间隔
div{padding-right:5px}
对象内距离右边补白间距为5px

3、padding-top 设置对象距离上边的边距补白间隔
div{padding-top:5px}
对象内距离上边补白间距为5px

4、padding-bottom 设置对象距离下边的边距补白间隔
div{padding-bottom:5px}
对象内距离下边补白间距为5px

检索或设置对象四边的补丁边距。

如果提供全部四个参数值,将按上-右-下-左的顺序作用于四边。

如果只提供一个,将用于全部的四条边。

如果提供两个,第一个用于上-下,第二个用于左-右。

如果提供三个,第一个用于上,第二个用于左-右,第三个用于下。

内联对象要使用该属性,必须先设定对象的height或width属性,或者设定position属性为absolute。

Padding的值不能为负值。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2064914.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

开放式耳机怎么戴?会有伤害?四款开放式蓝牙耳机排行榜前十名

老实说&#xff0c;开放式耳机对耳朵会产生什么伤害&#xff1f;我不太能想出来。我倒是觉得入耳式耳机可能会&#xff0c;因为入耳式耳机需将耳机塞入耳朵耳道&#xff0c;那就会对耳道产生影响。使用者在佩戴入耳式耳机的时候耳道会变成一个接近完全封闭的状态&#xff0c;耳…

【实战篇】Port配置

目录 1 前言1.1 开发板特性1.2 电路原理分析2 步骤2.1 General配置2.2 PortContainer配置3 总结1 前言 本文讲解如何配置Port模块。Port的引脚配置在整个实验中非常的重要,一旦配置错误可能会导致实验失败。引脚如何配置,完全依赖于我们的硬件设计和芯片型号,我们这里以英飞…

PE文件空白区添加代码

1、C源码 #include <iostream> #include<windows.h>int main() {int i 1;std::cin >> i;if (i 100){MessageBoxA(0, 0, 0, 0);}return 0; }2、将上述源码编译成可执行文件PEParase.exe&#xff0c;备用 3、使用010Editor打开该exe文件&#xff0c;查找PE…

git revert操作引起的代码丢失以及解决方案

场景如下&#xff1a; 某项目下有很多开发中的分支&#xff0c;比如分支a&#xff0c;b&#xff0c;c&#xff0c;d都合并到了一个test分支上&#xff1b;某次误操作将test分支内容合到了分支e上&#xff0c;然后紧接着又revert了这次合并&#xff0c;试图撤销合并&#xff1b…

如何解决Windows虚拟机不能安装vmtools的问题?

今天学到个小tips给大家分享一下&#xff01;&#xff01;&#xff01;解决win7安装不了vmtools的问题&#xff0c;以及如何打补丁&#xff01; 大家有没有遇到过下面的问题&#xff0c;就是在再给win7装vmtools的时候无法安装的情况&#xff0c;我这里这个是win7的旗舰版就遇…

Google Ads投放 | 如何分析竞争对手的谷歌广告?

Google Ads广告投放是出海企业的必重要营销动作之一&#xff0c;而分析竞争对手的 Google 广告是优化您自己的广告策略的关键步骤。通过了解竞争对手的动向&#xff0c;您可以发现改进的机会并在竞争中保持领先地位。 今天整理了Google Ads 竞争对手分析的4种方法&#xff1a; …

Linux基础知识学习(五)

1. 用户组管理 每个用户都有一个用户组&#xff0c;系统可以对一个用户组中的所有用户进行集中管理&#xff08;开发、测试、运维、root&#xff09;。不同Linux 系统对用户组的规定有所不同&#xff0c;如Linux下的用户属于与它同名的用户组&#xff0c;这个用户组在创建用户…

技术速递|将 .NET Aspire 添加到您现有的 .NET 应用程序中

作者&#xff1a;Jon Galloway 排版&#xff1a;Alan Wang .NET Aspire 是一个针对 .NET 的新型云就绪堆栈&#xff0c;可帮助开发人员快速轻松地开发分布式应用程序。您可能已经看过一些演示&#xff0c;展示了大型 .NET 解决方案&#xff0c;其中充满了复杂的云依赖项&#x…

租房网站

TOC springboot0762租房网站 JAVA简介 Java主要采用CORBA技术和安全模型&#xff0c;可以在互联网应用的数据保护。它还提供了对EJB&#xff08;Enterprise JavaBeans&#xff09;的全面支持&#xff0c;java servlet API&#xff0c;Java&#xff08;java server pages&…

在家上班,躺着收钱?分享远程工作程序员的真实生活……

这是《开发者说》的第15期&#xff0c;与以往采访的活跃于各行各业的开发者不同&#xff0c;这次我们将目光投向了优秀的远程开发者&#xff0c;本栏目将分享自由远程工作者的经历、见解和故事&#xff0c;希望能给大家带来一些崭新的视角。 这次我们邀请到的是拥有10年开发经…

秃姐学AI系列之:AlexNet + 代码实现

目录 深度学习之前的网络 机器学习 几何学 特征工程 总结 深度卷积神经网络的突破的两个关键因素 数据 ImageNet&#xff08;2010&#xff09; 硬件 90年&#xff1a;数据量和计算能力发展的均匀且都不大的时候——神经网络 00年&#xff1a;内存不错、算力也不错&a…

秃姐学AI系列之:使用块的网络——VGG

目录 VGG VGG块 VGG架构 总结 模型演变进度 代码实现 QA VGG 上文讲的 AlexNet 虽然证明了深层神经网络卓有成效&#xff0c;但它没有提供一个通用的模板来指导后续的研究人员设计新的网络。 与芯片设计中工程师从放置晶体管到逻辑元件再到逻辑块的过程类似&#xff0c…

AI大模型独角兽 MiniMax 基于 Apache Doris 升级日志系统,PB 数据秒级查询响应

作者&#xff1a;MiniMax 基础架构研发工程师 Koyomi、香克斯、Tinker 导读&#xff1a;早期 MiniMax 基于 Grafana Loki 构建了日志系统&#xff0c;在资源消耗、写入性能及系统稳定性上都面临巨大的挑战。为此 MiniMax 开始寻找全新的日志系统方案&#xff0c;并基于 Apache …

基于Crontab调度,实现Linux下的定时任务执行。

文章目录 引言I 预备知识Crontab的基本组成Crontab的配置文件格式Crontab的配置文件Crontab不可引用环境变量杀死进程命令II Crontab实践案例Crontab工具的使用重启tomcat服务每分钟都打印当前时间到一个文件中30s执行一次III 常见问题并发冗余执行任务&& 和|| 和 ;的区…

ChatGPT 的幻觉有改善吗?

​​​ 在早在 ChatGPT 刚刚问世时&#xff08;几个月前&#xff09;&#xff0c;我就曾写过一篇文章&#xff0c;描述它愿意&#xff08;不&#xff0c;是渴望&#xff09;向用户提供大量虚假信息。这些错误被称为幻觉&#xff0c;这是一个技术术语&#xff0c;强调了 ChatGPT…

安装docker+docker远程连接

docker Docker 是⼀个开源的应⽤容器引擎&#xff0c;可以实现虚拟化&#xff0c;完全采⽤“沙盒”机制&#xff0c;容器之间不会存在任何接⼝。 docker架构 docker核心概念 1. 镜像&#xff08;images&#xff09;&#xff1a;⼀个⾯向 docker 容器引擎的只读模板&#xff0c;…

89.SAP ABAP数据类型 - 笔记

1.SAP ABAP数据类型 目录 全局类型 标准类型 局部类型 全局类型 数据字典中创建的类型&#xff08;下图中②&#xff09; Data Element 是一个数据的类型&#xff0c;包含了这个元素的寓意属性&#xff0c;它包含了一些非结构化的数据对象的技术属性&#xff08;域&#…

丈夫每次回家打妻子,还在外染上性病,婚后没完整过一个年

丈夫每次回家打妻子&#xff0c;还在外染上性病&#xff0c;婚后没完整过一个年 这是一篇涉离婚纠纷的民事起诉状 &#xff08;范文点评&#xff09; 离 婚 起 诉 状 原告&#xff1a;徐某秀&#xff0c;女&#xff0c;现年48岁&#xff0c;汉族&#xff0c;无业&#xff0c…

记录一次SQL 查询 LEFT JOIN 相关优化

记录一次 LEFT JOIN 相关优化 1 环境说明2 sql 在dm库查询用时30秒2.1 sql 语句2.2 sql 执行计划 3 调优数据库参数3.1 使用hint 调整数据库参数3.2 hint 的执行计划 4 永久修改数据库参数5 参数说明6 达梦数据库学习使用列表 1 环境说明 某项目的公文办公系统在生产环境刚部署…

嵌入式学习----网络通信之TCP协议通信

TCP&#xff08;即传输控制协议&#xff09;&#xff1a;是一种面向连接的传输层协议&#xff0c;它能提供高可靠性通信(即数 据无误、数据无丢失、数据无失序、数据无重复到达的通信) 适用情况&#xff1a; 1. 适合于对传输质量要求较高&#xff0c;以及传输大量数据 的通信。…