uni-app学习笔记

387 阅读1分钟

1.属性

1.rpx:即响应式px,一种根据屏幕宽度自适应的动态单位。

2.@import:导入外联样式表。

3.page:相当于body节点。

4.全局样式:定义在app.vue中的样式,作用于每个页面。

5.局部样式:在pages目录下的vue文件中定义的样式,只作用于对应的页面,会覆盖app.vue中相同的选择器。

6.v-bind:数据绑定

<image v-bind:src="imgUrl" mode="aspectFit"></image>
<script>
	export default {
		data() {
			return {
				imgUrl:"../../static/img_mv.jpg",
			}
		},
	}
</script>

7.v-for:绑定数组

<view v-for="(item,index) in arr":key="item.id">
    序号:{{index}},名字:{{item.name}},年龄{{item.age}}
</view>
<script>
	export default {
		data() {
			return {
				arr:[
					{
						name:"宋小宝",
						age:20,
						id:1
					},{
						name:"刘能",
						age:20,
						id:2
					}
				]
			}
		},
	}
</script>

8.@click:事件绑定

<view>
    <button type="primary" @click="clickHandle(20,$event)">按钮</button>
</view>
<script>
	export default {
		data() {
			return {
			}
		},
		methods: {
			clickHandle(num,e) {
				alert(20)
			}
		},
	}
</script>

9.overflow:hidden清除浮动

overflow:hidden作用
1.超出变宽部分隐藏,即内容溢出隐藏.
2.清除浮动,即不给父元素设置高度的时候,其内部元素浮动后会导致下面的元素顶上去,这是因为子元素浮动后,子元素脱离标准流,不占位,父元素检测不到子元素的大小,从而高度为0.
3.解决给子元素设置margin-top的时候,父元素也会下降的问题.

10.letter-spacing:20px:设置字体间距

11.display属性

1.display:flex弹性布局

弹性布局(display:flex;)属性详解
基本概念:采用flex布局的元素,称为flex容器,简称'容器'.它的所有子元素自动成为容器成员,成为flex项目,简称'项目'. image.png

2.display:block块级元素,特点:

1.每个块级元素都是从新的一行开始,并且其后面的元素也灵气一行.
2.元素的宽高,行高以及顶和底部边距都可设置.
3.元素的宽高在不设置的情况下,是它本身容器的100%(和父元素的宽度一致),除非设置一个宽度.

3.display:inline行内元素,特点:

1.和其它元素都在一行上.
2.元素的宽高,行高以及顶和底部边距都不可设置.
3.元素的宽度就是它包含的文字或图片的宽度,不可改变.

12.box-sizing:border-box

盒子模型是指:外边距(margin)+ border(边框) + 内边距(padding)+ content(内容)
属性作用:没有设置box-sizing:border-box属性,宽高会加上padding和border的值,需要我们手动去计算,减去padding和border的值,并调整content的值,以免超过给定的宽度.加了该属性后,padding和border的值就不会再影响元素的宽度,相当于把padding和border的值都算在content里面,盒子模型会自动根据padding和border的值来调整content的值,就不再需要手动计算调整.

2.生命周期

1.应用生命周期,在app.vue文件中配置 1670858568807.jpg 2.页面生命周期,在页面中配置

image.png

3.刷新

1.开启下拉刷新
方法一:在pages.json里,找到当前页面的pages节点,并在style选项中开启enablePullDownRefresh.

{
        "path" : "pages/lsit/lsit",
        "style" :                                                                               
        {
            "navigationBarTitleText": "",
            "enablePullDownRefresh": true
        } 
}

方法二:通过调用uni.startPullDownRefresh方法来开启下拉刷新。

<template>
	<view>
		<view>这是列表页</view>
		<view v-for="item in list">{{item}}</view>
		<button @click="pullDown">刷新</button>
	</view>
</template>
<script>
	export default {
		data() {
			return {
				list:[]
			}
		},
		onPullDownRefresh() {
			console.log('出发了下拉刷新');
			setTimeout(()=>{
				this.list=['前端','java','ui','测试','大数据']
				uni.stopPullDownRefresh()
			},1500)
		},
		methods: {
			pullDown(){
				uni.startPullDownRefresh()
			}
		}
	}
</script>
<style>
</style>

2.关闭下拉刷新,调用uni.stopPullDownRefresh()
3.上拉刷新onReachBottom(),与下拉刷新同级

{
    "path" : "pages/lsit/lsit",
    "style" :                                                                                   
        {
            "navigationBarTitleText": "",
            "onReachBottomDistance": 200 <!--页面上拉触底事件触发时,距页面底部距离-->
        }      
}
<script>
	export default {
		onReachBottom() {
			this.list=[...this.list,...['前端','java','ui','测试','大数据','测试','大数据']]
		}
	}
</script>

4.数据缓存

<template>
	<view>
		<button type="primary" @click="setStorage">存储数据</button>
		<button type="primary" @click="getStorage">获取数据</button>
		<button type="primary" @click="removeId">移除数据</button>
	</view>
</template>
<script>
	export default {
		data() {
			return {
				list: []
			}
		},
		methods: {
			setStorage() {
				// 异步缓存
				uni.setStorage({
					key:'id',
					data:80,
					success() {
						console.log('存储成功');
					}
				})
				// 同步缓存
				uni.setStorageSync('id',100)
			},
			getStorage(){
				// 异步获取
				uni.getStorage({
					key:'id',
					success(res) {
						alert(res.data)
					}
				})
				// 同步获取
				const res=uni.getStorageSync('id')
				console.log(res)
			},
			removeId(){
				// 异步删除
				uni.removeStorage({
					key:'id',
					success() {
						console.log('移除成功');
					}
				})
				// 同步删除
				uni.removeStorageSync('id')
			}
		},
	}
</script>
<style>
</style>

5.图片上传和图片预览

<template>
	<view>
		<button type="primary" @click="chooseImg">上传图片</button>
		<image v-for="item in imgArr" :src="item" mode="aspectFit" @click="previewImg(item)"></image>
	</view>
</template>
<script>
	export default {
		data() {
			return {
				imgArr:[]
			}
		},
		methods: {
			//图片上传
			chooseImg(){
				uni.chooseImage({
					count:5,
					success:res=>{
						this.imgArr=res.tempFilePaths
					}
				})
			},
			//图片预览
			previewImg(res){
				uni.previewImage({
					current:res,
					urls:this.imgArr,
					loop:true,
					indicator:'number'
				})
			}
		}
	}
</script>
<style>
</style>

6.条件注释实现跨段兼容

条件注释是用特殊的注释作为标记,在编译时根据这些特殊的注释,将注释里面的代码编译到不同的平台,已实现不同的效果。
写法:以#ifdef+平台标识开头,以#endif结尾。
平台标识: image.png

<template>
	<view>
		<!--#ifdef H5-->
		<view>我希望只在h5页面中看见</view>
		<!--#endif-->
		<!--#ifdef MP-WEIXIN-->
		<view>我希望只在微信小程序页面中看见</view>
		<!--#endif-->
	</view>
</template>
<script>
	export default {
		data() {
			return {
			}
		},
		onLoad() {
			// #ifdef H5
			console.log('我希望在h5中打印');
			// #endif
			// #ifdef MP-WEIXIN
			console.log('我希望在微信小程序中打印');
			// #endif
		}
	}
</script>
<style>
	/*h5中的样式*/
	/* #ifdef H5*/
	view{
		color: hotpink;
	}
	/* #endif */
	/*小程序中的样式*/
	/* #ifdef MP-WEIXIN */
	view{
		color: #0000FF;
	}
	/* #endif */
</style>

7.页面跳转

<template>
	<view>
		<button @click="goDetail">跳转详情页</button>
		<button @click="goMessage">跳转信息页</button>
		<button @click="redirectToDetails">跳转详情页并关闭当前页面</button>
	</view>
</template>
<script>
	export default {
		data() {
			return {}
		},
		onUnload() {
			console.log('销毁')
		},
		methods: {
			//普通页面跳转
			goDetail() {
				uni.navigateTo({
					url: '/pages/details/details'
				})
			},
			//tab页面跳转
			goMessage() {
				uni.switchTab({
					url: '/pages/message/message'
				})
			},
			//跳转页面后关闭当前页面
			redirectToDetails(){
				uni.redirectTo({
					url:'/pages/details/details'
				})
			}
		}
	}
</script>
<style>
</style>

1.你好

8.页面通讯

uni-app官网 (dcloud.net.cn)
1.触发全局自定义事件

uni.$emit('updateNum',10)

2.接收全局自定义事件

uni.$on('updateNum',(num)=>{
    this.num+=num
})