uni-app的学习

简介
由dcloud 公司开发的 多端融合框架
1次开发 多端运行
竞品:apiCloud  ,appCan  ,Codova
技术架构
	Vue语法+小程序的api
端
Hybrid混合开发
	App端
		HTML+
		nvue(原生view)
		native.js(js原生沟通的桥梁)
		weex
		内置ios/安卓的模块使用
	H5端
		h5专用api
	各种小程序(微信为主)
准备工具
Hbuilderx (开发与编译工具)
微信小程序开发工具(微信小程序预览测试)
安卓模拟器/真机
	运行app
界面

请添加图片描述
请添加图片描述

新建项目

请添加图片描述

运行多端
H5

请添加图片描述
请添加图片描述

小程序

01 打开开发工具的服务端口
请添加图片描述02 HBuilderx配置 微信开发工具的地址
请添加图片描述请添加图片描述
03 配置微信小程序id
请添加图片描述
04 运行到微信小程序
请添加图片描述

App

01 打开模拟器或者手机
02 配置模拟器的端口
夜神模拟器端口号:62001
海马模拟器端口号:26944
逍遥模拟器端口号:21503
MuMu模拟器端口号:7555
天天模拟器端口号:6555
请添加图片描述
请添加图片描述
03 运行到模拟器
请添加图片描述

注意项
hbuilder可能需要下载对应的插件
运行到安卓模拟器,有视图差别
运行可以需要一定的诗句
Vue语法
模板语法
文本渲染
	{{表达式}}
	v-text=“表达式”
	表达式
		简单的js运算
{{2+3}}
		js方法调用
{{title.length}}
{{title.split("").reverse().join("")}}
		3元运算符
<view>{{title.length>15?'长度很长':'字少事大'}}</view>
	v-html 富文本
条件渲染
	v-if
	v-else-if
	v-else
	v-show
	通过三元运算符
列表选项
	字符串,数字,列表,对象都可以遍历
	<view v-for="(item,index) in list" :key="index">{{index+1}}  {{item}}</view>
	一定要保证兄弟元素间的key值是唯一
属性绑定
	<button v-bind:disabled=“true”>
	<button :disabled="true">
表单绑定
	默认
:value="单向绑定"
	input
v-model=“双向绑定”
	@change=“$event.detail.value”
	事件,事件的值$event.detail.value
事件
	事件绑定:  <view v-on:click="响应"
	简写绑定:<view @click="事件响应"
	事件行内处理
		<view @click="num++"
	事件响应函数
(函数在methods定义)
		<view @click="say"
<view @click="say"
	事件传参
		不写参数
@click="say"
等同于 
@click=“say()”
等同于
@click=“say($event)”
		$event 是一个固定写法 代表事件对象
		@click=“doit(str)”
doit(str="你好"){
 uni.showModal({title:str})
}
	事件对象
$event/e
		function say(e){
}
		target目标对象
		dataSet 组件传参
<view :data-title="title" @click="say">
function say(e){
  e.target.dataset.title
}
响应方法
uni-app页面

新建页面

页面配置
pages.json
	globalStyle
全局样式
		默认页面的样式会应用全局样式
页面写了style 配置,那么用的配置覆盖全局的配置
	pages
页面
		path页面路径
		style 页面样式
vue选项
data
数据
methods
方法
computed
计算
watch监听
directive指令
filter过滤
uni-app的生命周期
Vue的生命周期
创建
	beforeCreate
	created
	可以使用this,没有dom
作用:
1.  初始数据
2.  注册监听事件
3. 开启定时器
4. ajax请求
	挂载
		beforeMount
		mounted
		可以操作dom(节点)
作用:
1.  操作dom
2. ajax请求
	更新
		beforeUpdate
		updated
	卸载
		beforeDestroy
作用:
1. 移除事件监听
2. 移除停止定时器
destroyed
小程序的生命周期
	onLoad
加载
		能够获取页面的参数
		开启ajax,定时器,事件监听
		像vue的created
	onShow
显示
		播放媒体
	onReady准备
		获取节点信息
		像vue的mounted
	onHide 后台运行
		停止播放媒体
	onUnload 卸载
		停止事件监听与定时器
小程序的全局方法
	onPullDownRefresh 
下拉刷新
	onReachBottom()
触底更新
	onShareAppMessage
右上角分享
	onPageScroll
页面滚动
	onShareTimeline
分享到朋友圈
app的全局方法
	onBackPress
手机的返回键被点击
	onNavigationBarButtonTap
导航栏按钮被点击
小程序的全局方法
onPullDownRefresh 
下拉刷新
onReachBottom()
触底更新
onShareAppMessage
右上角分享
onPageScroll
页面滚动
onShareTimeline
分享到朋友圈
app的全局方法
onBackPress
手机的返回键被点击
onNavigationBarButtonTap
导航栏按钮被点击
组件
表单
	button
按钮
		type
			primary主要
warn警告
default 默认
		size="mini"
		disabled 是否可用
	input
		value值
		v-model对表单双向绑定
		@change="$event.detail.value"
		placeholder 提示文本
	picker
		mode
模式
			time时间
date 日期
region地区
			日期
start="09:01" 
end="21:01"
		value值
		@change="$event.detail.value"
	slider
滑块
		value 值
max 最大
min 最小
		@change="$event.detail.value"
全局vuex
路由
路由组件
	navigator
导航
		url 跳转页面的地址
		open-type
打开类型
			navigate跳转
			redirect重定向
(当前页面不留历史记录)
			navigateBack返回
			relauch 重启
			switchTab 跳转底部栏
路由传参
	传递
url:path?name=mumu&age=18
	接收
onLoad(option){}
option的值{name:"mumu",age:18}
路由api
	uni.navigateTo({url})
跳转
	uni.redirectTo({url})
重定向
	uni.navigateBack()
返回
	uni.switchTab()
底部栏切换
	uni.reLaunch()
重启
路由配置
	tabBar
		color
		selectedcolor
		list
			pagePath
			iconPath
			selectedIconPath
			text
获取当前页面( getApp)
	01 在App.vue
定义globalData:{num:100}
	02 要使用的页面获取app
var app  = getApp()
	03获取globalData的值
onShow(){
this.num = app.globalData.num
}
	04 更新globalData值
addNum(){
app.globalData.num++;
this.num = app.globalData.num
}
获取页面栈( getCurrentPages)
	var page  = getCurrentPages();
获取当前的页面栈,是一个数组(1-5)

uni.navigateBack({delta:page.length})
	page[page.length-1] 获取当前页面的信息
(不要去修改)
条件编译
目的
不同的平台展示不同特性与功能
模板条件编译
格式
		<!-- #ifdef H5 -->
内容
<!-- #endif -->
	条件
		APP
App端
		H5
网页
		MP
小程序
			MP-WEIXIN
微信小程序
css条件编译
	/* #ifdef APP */
 .active{color:red}
/* #endif */
js条件编译
	// #ifdef APP-PLUS
uni.showModal({
title:"你好App用户"
})
// #endif
条件配置( pages.json)
	“style”:{
 "h5":{
  "titleNView":{
      "titleText":"我是H5"
   }
},
 "app-plus": {
  "titleNView":false //隐藏导航栏
}
}
	// #ifdef MP-WEIXIN	|| APP	
{
"path":"pages/condition/we",
"style":{
	"navigationBarTitleText": "小程序专有页面"
}
},
// #endif
Vuex
初始化

store/index.js

//导入vuex
import Vuex from 'vuex';
//导入vue
import Vue from 'vue';
//使用vuex
Vue.use(Vuex);
//导出vuex
export default new Vuex.Store({
	//状态
	state: {
	
	},
	//改变状态的唯一方法
	mutations: {
		
	},
	//异步api操作
	actions: {
		
	},
	//内部计算
	getters: {
	
	},
	//模块
	modules: {},
})

main.js

//导入vuex
import store from './store/index.js'
Vue.prototype.$store = store;
vuex的模块

state存放数据
mutations更新数据(唯一方式)
actions动作(异步api操作)
getters计算,从现有的state计算出新的数据modules模块

state定义数据
state: {
		gTitle: {
			text: "你好vuex",
			color: "#000",
			fontSize: "24px",
			background: "#f70"
		},
		joks:[],
	},
在页面中使用
$store.state.gTitle.text
修改只能通过mutations
组件中简写
import {mapState} from 'vuex'
computed:{
...mapState(["gTitle"])}
<view :style="gTitle">
mutations 改变数据
setFontSize (state,data) {
state.gTitle.fontSize=data+"px"
}
在页面中使用
this.$store.commit("setFontSize",80)
actions 异步操作
actions: {
		//和后端交互,异步操作都会放在actions中
		getJok(context,data){
			uni.request({
				url:"http://520mg.com/mi/list.php",
				method:'GET',
				data:data,
				// axios get请求传参用的params , post用data
				// uni.request :postget传参也是用data
				//更加content-type如果是application/json
				//那么data是jison如果是urlencoeded data就是url编码形式
				success:res=>{
					console.log(res,"getJok");
					context.commit("setJoks",res.data.result)
				}
			})
		}
	},
在页面中使用
this.$store.dispatch("getJok".{page:1)
简写
导入
import {mapActions} from 'vuex'计算
methods:{
...mapActions["getJok"])
使用
this.getJok
getters 计算
getters:{
"totalLen":function(state)i return xxx}}
在页面中使用
 this.$store.getter.totalLen
 简写
 import {mapGetters} from 'vuex'computed:{
...mapGetter(["totalLen"])}
this.totalLen
支付与打包
支付 app的支付
准备工作

支付厂商
获取id
微信:微信支付平台
https://pay.weixin.qq.com/
支付宝

打包

manifest.json
app模块配置
payment支付
请添加图片描述

代码
	01 获取支付厂商
uni.getProvider()
		uni.getProvider({service: "payment"})
	02 用户发起支付
requestPayment(item,index){}
	03 获取订单信息
getOrderInfo(item.id)
	04 发起支付api
uni.requestPayment({
provider:item.id, //提供商
orderInfo: orderInfo, //订单信息
})
小程序的支付
01 用户的点击 发起支付
async weixinPay() 
02 获取openid
本地存储 ||loginMpWeixin
	获取code
uni.login({})
	获取openid
uni.request({})
03 获取订单信息
 this.getOrderInfo('wxpay')
04 根据订单信息发起支付
uni.requestPayment({...orderInfo})
打包html代码上传服务器
配置相对地址
	manifest.json
web配置
运行的基础路径  ./
发行->发到网站-PC
unpackage>dist>build>H5
上传服务器
	flashFXP工具上传
打包微信小程序上传
01 配置id

manifest.json 微信小程序配置

02 单击发行

发行->小程序微信

03 进入小程序上传

小程序右上角上传(先测试,真机测试)

04 微信提交审核

mp.weixin.qq.com
版本管理
审核
审核通过发布
认真填写隐私协议

05 如果网络请求配置域名必须是https开头

开发管理
服务器设置
服务器域名
request合法域名
uni.request,wx.request 请求的域名必须事先定义好
uploadFile合法域名
如果有上传也要配置上传的域名
downloadFile合法域名
配置下载域名

App打包上传应用商店

应用商店
华为
opple
vivo
小米
现在只有华为可以个人上传
其他都必须是公司
个人上传
app的版权证明(600-1500)
国家的隐私条例
应用商店的隐私审核

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值