uni-app进阶使用(vuex、组件、api)

news2024/11/28 19:47:11

        在上一篇文章介绍了uni-app的基本用法,本章介绍在uni-app中vuex、组件、api的用法。

一、如何使用vuex

1.1 初始化

        在项目根目录下创建store文件夹,在其内新建一个文件index.js,在index.js对vuex进行初始化。

import Vuex from 'vuex'
import Vue from 'vue'
Vue.use(Vuex)
export default new Vuex.store({
  //定义数据
  state,
  //改变数据
  mutations,
  //异步操作
  actions,
  //计算
  getters,
  //模块
  modules
​})

        以上步骤创建完毕后,在main.js文件中对vuex进行导入,同时定义全局$store。

import store from './store/index.js'
Vue.prototype.$store=store

 1.2  state定义数据

        在/store/index.js

state:{
		gTitle:{
			text:"你好vuex",
			color:"#000",
			fontSize:"24px",
			background:"#f70"
		}
	},

         在页面中进行使用时$store.state.gTitle.text。引用时也可以使用简写形式,首先引入state的简写import {mapState} from 'vuex',其次在computed模块内把全局的vuex数据转换为组件只读的数据...mapState{["gTitle"]},最后可以直接使用gTitle进行引用。

1.3 mutations改变数据

        mutations是改变state数据的唯一途径,在index.js的mutations模块中设置改变state数据的方式setFontSize(state,data){state.gTitle.fontSize=data+"px"},在页面使用时this.$store.commit("setFontSize",e.detail.value),简写方式为引入import {mapMutations} from 'vuex',定义methods:{...mapMutations(["setFontSize"])} ,使用 this.setFontSize(100)。

1.4 actions异步操作

        在与后端交互中,异步操作都放在actions模块中进行。在index.js文件actions模块中

state:{
		joks:[]
	},
mutations:{
	setJoks(state,data){
		state.joks=data;
	}
},
actions:{
		getJok(context,data){
			uni.request({
				url:"http://520mg.com/mi/list.php",
				method:'get',
				data:data,
				//axios get 请求参数用params,post用data
				//uni.request post和get传参都用data
				//根据content-type,如果是application/json,那么data是json,如果是urlencoded data是url编码形式
				success: (res) => {
					console.log(res);
					context.commit('setJoks',res.data.result);
				}
			})
		}
	},

         在使用页面中

export default {
		data() {
			return {
			}
		},
		onLoad() {
			this.$store.dispatch("getJok",{page:1})
		}
}

1.5 getters 计算

        用于内部计算,根据state中的数据计算出新的数据(只读)。在index.js中定义getters:{"totalLen":function(state){return }},在使用页面中import {mapGetters} from "vuex"; computed:{...mapGetters(["totalLen"])} 使用时 this.totalLen。

1.6 modules模块

        与vue中的vuex的modules用法相同,相当于vuex中套vuex使用。核心依然是state、mutations、actions、getters、modules五个模块。

二、api使用

2.1 uni.getSystemInfoSync() 获取系统信息

        常用于获取屏幕宽高、系统、品牌、brand、可使用窗口顶部位置、安全区域等信息。

<template>
	<view>
		<view>屏幕宽高{{info.screenWidth}},{{info.screenHeight}}</view>
		<view>系统 {{info.osName}}</view>
		<view>品牌 {{info.model}}</view>
		<view>brand {{info.brand}}</view>
		<view>可使用的窗口顶部位置 {{info.windowTop}}</view>
		<view>安全区域 {{JSON.stringify(info.safeArea)}}</view>
		<view>安全区域 {{JSON.stringify(info.safeAreaInsets)}}</view>
</template>

<script>
	export default {
		data() {
			return {
				info:{},
			}
		},
		onLoad() {
			//获取系统信息
			var info=uni.getSystemInfoSync();
			this.info=info;
			console.log(this.info);
			//存储api
			uni.setStorageSync("info",info);
		}
    }

2.2 获取胶囊信息uni.getMenuButtonBoundingClientRect() 

        这个功能一般只用于微信小程序。

<template>
	<view>
		<!-- #ifdef MP -->
		<view>胶囊微信小程序</view>
		<view>导航栏高度{{(menuButtonInfo.top-info.statusBarHeight)*2+menuButtonInfo.height}}</view>
		<view>胶囊{{JSON.stringify(menuButtonInfo)}}</view>
		<!-- #endif -->
	</view>
</template>

<script>
	export default {
		data() {
			return {
				menuButtonInfo:{}
			}
		},
		onLoad() {
			//获取胶囊按钮的边界
			let menuButtonInfo=uni.getMenuButtonBoundingClientRect();
			this.menuButtonInfo=menuButtonInfo;
			console.log(menuButtonInfo);
		},

2.3 图片操作的api

        上传图片,使用uni.chooseImage()选择图片,其内部嵌套uni.uploadFile()。

        单击图片实现图片预览模式uni.previewImage(),在接口内部可以实现分享uni.share(),保存uni.saveImageToPhotosAlbum()等功能,使用时注意嵌套的层级关系。

<template>
	<view>
		<view>图片操作</view>
		<view>选择与预览图片</view>
		<button @click="selectPic">选择</button>
		<view v-for="item in list" :key="item" @click="preview(item)">
			<image :src="item"></image>
		</view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
			}
		},
		methods: {
			preview(item){
				var that=this;
				//单击图片实现预览
				uni.previewImage({
					//预览的图片列表
					urls:this.list,
					current:item,//当前图片
					longPressActions:{
						//定义长按按钮
						itemList:['发送给朋友','保存图片','收藏'],
						success:function(data){
							console.log('选中了第'+(data.tapIndex+1)+'个按钮,第'+(data.index+1)+'张图片');
							//保存
							if(data.tapIndex==1){
								//保存到本地相册
								uni.saveImageToPhotosAlbum({
									filePath:that.list[data.index],
									success() {
										uni.showToast({
											title:"保存成功"
										})
									}
								})
							}
							//分享
							if(data.tapIndex==0){
								//分享给朋友 (app打包时候分享要去微信的开发平台注册)
								uni.share({
									provider:"weixin",
									scene:"WXSceneSession",
									type:2,
									imageUrl:that.list[data.index],
									success:function(res){
										console.log("success:"+JSON.stringify(res));
									},
									fail:function(err){
										console.log("fail:"+JSON.stringify(err));
									}
								})
							}
						},
						fail:function(err){
							console.log(err.errMsg);
						}
					}
				})
			},
			selectPic(){
				var that=this;
				//选择图片
				uni.chooseImage({
					count:3,//默认选3张
					success(res){
						//遍历结果的
						for(let i=0;i<res.tempFilePaths.length;i++){
							//上传图片
							uni.uploadFile({
								//上传地址
								url:'http://520mg.com/ajax/file.php',
								//图片信息
								filePath:res.tempFilePaths[i],
								//name需要和后端约定,默认都会叫file
								name:'file',
								success:result=>{
									//转换为json 
									var data=JSON.parse(result.data);
									//添加域名后加入list 
									that.list.push("http://520mg.com"+data.pic);
								}
							})
						}
					}
				})
			}
		}
	}
</script>

三、组件的使用

3.1 自定义组件

        自定义组件使用easycom方式,使用方式较vue简便了很多。组件定义完以后,可以不用import 导入,不用在components中注册,直接使用。

3.2 组件传参

        父组件向子组件传参,通过属性的方式进行传递<steper :value="d1"></steper>,子组件通过props来接收props:{ value:{ type:Number, default:1 ​} ​}。 

        子组件向父组件传参,子组件通过this.$emit("事件名",传递的参数) 触发事件,父组件监听事件并更新值。

3.3 uni-app官网组件

        官方网址:组件使用的入门教程 | uni-app官网 ;路径:首页->组件->扩展组件,里面有大量封装好的组件,比较常用的有倒计时组件uni-countdown、轮播图组件uni-swiper-dot、弹框组件uni-popup等。

        在项目根目录下新建uni_modules 文件夹,单独安装需要的某个组件。下表为uni-ui的扩展组件清单,点击每个组件在详情页面可以导入组件到项目下,导入后直接使用即可,无需import和注册。

 3.4 第三方组件

        uni-app有很多第三方插件,在官网点击插件市场,会有很多的资源选择,这里给大家推荐的的uview第三方插件。可通过使用HBuilderX导入插件和下载插件ZIP两种方式进行使用,具体安装和配置大家异步参考官网https://uviewui.com,很详细。

        如果对你有用,欢迎收藏~

 

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

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

相关文章

TML+CSS+JS大作业:腾讯课堂首页 1页 侧拉菜单

⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材&#xff0c;DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | 家公司官网网站 | 企业官网 | 酒店官网 | 等网站的设计与制 | HTML期末大学生网页设计作业&#xff0c;Web大学生网页 HTML&#xff1a;结构 CSS&…

算法竞赛入门【码蹄集进阶塔335题】(MT2281-2285)

算法竞赛入门【码蹄集进阶塔335题】(MT2281-2285&#xff09; 文章目录算法竞赛入门【码蹄集进阶塔335题】(MT2281-2285&#xff09;前言为什么突然想学算法了&#xff1f;为什么选择码蹄集作为刷题软件&#xff1f;目录1. MT2281 另一种模2. MT2282 小码哥的认可3. MT2283 整数…

安卓版微信8.0.31内测版出炉:安装包变小,功能变多!

人是社会性生物&#xff0c;建立依恋、经营亲密关系是人的本能&#xff0c;只不过到了网络时代之后&#xff0c;用户进行交流的方式几乎都变成了微信等社交软件。 不仅可以让用户很便捷的和朋友进行沟通&#xff0c;并且在上班办公的时候&#xff0c;也是可以轻松传输文件等&a…

C++ · 手把手教你写一个扫雷小游戏

Hello&#xff0c;大家好&#xff0c;我是余同学。这两个月真是太忙了&#xff0c;无暇给大家更新文章… 暑假不是写了个扫雷小游戏吗(Link)&#xff1f;考虑到很多同学对代码没有透彻的理解&#xff0c;那么&#xff0c;这篇文章&#xff0c;我们来详细分析一下代码. 我们分…

【图像处理OpenCV(C++版)】——初学OpenCV

前言&#xff1a; &#x1f60a;&#x1f60a;&#x1f60a;欢迎来到本博客&#x1f60a;&#x1f60a;&#x1f60a; &#x1f31f;&#x1f31f;&#x1f31f; 本专栏主要结合OpenCV和C来实现一些基本的图像处理算法并详细解释各参数含义&#xff0c;适用于平时学习、工作快…

百数低代码开发平台助力生产管理:制造管理系统

随着全球经济化与信息化&#xff0c;制造企业的生产管理系统的建立对于制造业企业的信息化以及生产的智能化具有重要的意义&#xff0c;同时也是促进现代工业进步和发展的基础条件之一。我国制造业属于传统行业&#xff0c;凭借生产规模大且劳动力资源丰富在全世界拥有着一定地…

[附源码]计算机毕业设计springboot旅游度假村管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Android 反编译入门(基于 Mac)

1 反编译基础 1.1 什么是反编译 定义&#xff1a;反编译就是将可执行程序转换为某种形式的高级编程语言的过程。 1.2 APK 文件的构成 首先&#xff0c;我们通过一张图来看看 APK 的整体组成&#xff1a; 可以看到&#xff0c;APK 主要由六个部分组成&#xff1a; Dex 文件…

什么值得一个头条?从世界杯看“头条”正确打开方式

“足球皇帝”贝肯鲍尔曾说&#xff1a;“在绿茵场上滚动的不是足球&#xff0c;而是黄金。” 卡塔尔世界杯不仅是球迷的盛宴&#xff0c;也是品牌的盛宴。绿茵场广告屏上&#xff0c;众多品牌纷纷现身。还有部分中国企业通过签约球队和球星等形式露面世界杯&#xff0c;共同挖…

【附源码】计算机毕业设计JAVA紫陶文化传播与学习交流网站

【附源码】计算机毕业设计JAVA紫陶文化传播与学习交流网站 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a;…

熤星传媒文化:抖音怎么切换到旧版本?

抖音现在也在不断地更新版本&#xff0c;但是很多小伙伴可能想知道一些新版本的功能&#xff0c;就随着了、系统去升级了&#xff0c;但是用着用着发现自己更喜欢旧版本的&#xff0c;那么抖音店铺又怎么去做店铺带货呢&#xff1f;跟着熤星传媒小编来一起看看吧&#xff01; 帐…

OWASP top10 的介绍

​ OWASP top10 的介绍 2021年版TOP 10产生三个新类别&#xff0c;且进行了一些整合 ​​ A01&#xff1a;失效的访问控制 ​ 从第五位上升称为Web应用程序安全风险最严重的类别&#xff0c;常见的CWE包括&#xff1a;将敏感信息泄露给未经授权的参与者、通过发送的数据泄…

07 CSS04

目标&#xff1a; 1、结构伪类选择器 2、伪元素 3、标准流 4、浮动 5、清除浮动 6、&#xff08;拓展&#xff09;BFC介绍 一、结构伪类选择器 1、作用与优势 作用&#xff1a;根据元素在HTML中的结构关系查找元素 优势&#xff1a;减少对于HTML中类的依赖&#xff0c;有…

[附源码]计算机毕业设计springboot家庭整理服务管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

【MySQL】 MySQL亿级数据、主从架构,Sharding分片

数据库Mysql 内容管理MySQL填充亿级数据Insert into select存储过程loop insertLoadfile 导入CVS文件MySQL基准测试&#xff1a; sysbench、mysqlslapsysbenchmysqlslapSQL优化分页查询优化慢SQL日志工具mysqldumpslowMySQL主从复制MySQL主从复制 knowledgeMySQL二进制日志log_…

APS生产计划排产降低企业的生产运营成本

企业运营成本是企业管理的关键&#xff0c;也是企业加强管理&#xff0c;提高企业效益的重要途径&#xff0c;在多数企业的发展中&#xff0c;如何更有效地控制企业运营成本将显得极为突出和十分重要。 APS生产计划排产可以从“设备、物料、人力”三方面降低企业的运营成本&…

基于Go语言的网盘开发(GloudDisk)

&#xff08;记录一下自己做项目的过程&#xff09; 基于go-zero实现的简易的网盘系统&#xff0c;如果有小伙伴对这个项目感兴趣&#xff0c;可以去网上搜索一些资料。这里推荐一下我学习的来源&#xff1a;【项目实战】基于Go-zero、Xorm的网盘系统_哔哩哔哩_bilibili 确定…

AutoCAD Electrical 2022—项目中新建、添加、删除图纸

右键点击项目—选择新建图纸&#xff1b; 点击快捷图标&#xff0c;新建图形&#xff1b; 弹出对话框&#xff0c;在名称中输入图纸名称&#xff1b; 模板为图框的样式&#xff0c;位置代号&#xff0c;图纸保存的位置&#xff1b; 其他根据需要填写&#xff1b; 填写完点击…

JavaScript -- 02. 变量和数据类型

文章目录变量和数据类型1 数值(Number)1.1 普通数值1.2 其他进制的数字2 大整数&#xff08;BigInt&#xff09;3 字符串(String)3.1 基础表示3.2 转义字符3.3 模板字符串4 布尔值(Boolean)5 空值(Null)6 未定义&#xff08;Undefined&#xff09;7 符号&#xff08;Symbol&…

6-2 装载问题(分支限界)

6-2 装载问题&#xff08;分支限界&#xff09; 一、问题描述 有一批共个集装箱要装上2艘载重量分别为C1和C2的轮船&#xff0c;其中集装箱i的重量为Wi&#xff0c;且 采用下面的策略可得到最优装载方案&#xff1a; (1)将第一艘轮船尽可能装满; (2)将剩余集装箱装上第二艘轮…