壳牌加油站
为什么要学uni-app?
现在很多中小型公司,都有自己的小程序项目,然后开发小程序就会用到uni-app。
uni-app没有诞生之前,怎么写小程序
如果我写一套代码,然后可以变成各个平台的小程序。 —》 混合开发模式
什么时候用uni-app
怎么学习uni-app
找到官网,下载.zip文件。 一定要解压,双击.exe文件。注意:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-US73nVk2-1687444119367)(img\1.创建项目.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Z3JHznVx-1687444119369)(img\2.创建项目.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J41X3kmx-1687444119371)(img\3.运行到浏览器.png)]
运行过程中可能会有插件下载,运行成功之后有一个地址:(http://localhost:8080), 使用浏览器访问该网址即可
运行 —》 运行到小程序
第一次需要你配置微信开发者工具目录
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6OibCTba-1687444119373)(img\5.配置微信开发者工具目录.png)]
需要你开启微信开发者工具服务端口
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-psXwDCEX-1687444119376)(img\6.开启开发者工具服务.png)]
角色: 应用 页面 组件
App.vue 代表整个应用
pages: 页面就放在这里
components: 组件,一定要注意,组件不能注册到pages.json下
pages.json
index.html: 给h5用的
main.js: 入口文件
当你运行项目的时候,首先就会执行次文件(有点类似于webpack的入口,或者vue项目的main.js)
核心功能:创建一个Vue实例,并挂载
import App from './App'
// 引入Vue
import Vue from 'vue'
Vue.config.productionTip = false
App.mpType = 'app'
// new一个vue的应用
const app = new Vue({
...App
})
// 挂载应用
app.$mount()
manifest.json 配置文件
unpackage: 编译之后的代码
main.js下有一些奇怪的代码
// #ifndef VUE3
// #endif
这个代码是条件编译,uni-app是一套代码编译成多个平台,所以很多时候要考虑兼容问题。 就有以下场景:
这些场景就需要条件编译来做
练习: 头部在微信小程序中有,在h5中没有
"globalStyle": {
// #ifdef H5
"navigationStyle": "custom",
// #endif
"navigationBarTextStyle": "black",
"navigationBarTitleText": "uni-app",
"navigationBarBackgroundColor": "#F8F8F8",
"backgroundColor": "#F8F8F8"
},
就是一个.vue文件,一般放在pages里面。
{
"path": "pages/index/index",
"style": {
"navigationBarTitleText": "uni-app"
}
}
page.json pages里面进行页面的个性化配置。 此处的style会编译到页面.json中去。
官网链接
页面也是一个.vue文件,所以created 这一套生命周期也是可以用的。 但是不建议大家在页面里面使用vue这一套生命周期。
创建普通组件(vue项目,创建一个组件,引入 注册 使用)
全局组件
创建一个组件
要将次组件注册成为全局组件
其他地方使用次组件,直接使用即可
import Child from './components/Child.vue'
Vue.component('child', Child)
创建满足easycom的组件【新规范】:你只要按照uni-app这个规范创建组件, 就会省略掉引入、注册,直接使用。
就是vue的那一套
页面的生命周期在这里是不适用的!
冒泡的控制
事件绑定(wxml)
<view bind:tap="函数名" data-name="xfdsdf" ></view>
// 事件传参 (页面.js)
函数名(e) {
// 参数在e里面
}
<button @click="sendData">给父组件数据</button>
methods: {
sendData(e) {
// e就是事件对象
}
}
<button @click="sendData('1w', '一条烟')">给父组件数据</button>
methods: {
sendData(money, smoke) {
}
}
<button @click="sendData('1w', '一条烟', $event)">给父组件数据</button>
methods: {
sendData(money, smoke, e) {
}
}
<template>
<view>
<button @click="handle1">不需要传参的绑定</button>
<button @click="handle2">获取event对象</button>
<button @click="handle3(12, `abc`)">获取多个参数</button>
<button @click="handle4(12, `abc`, $event)">获取多个参数+事件对象</button>
</view>
</template>
<script>
export default {
methods: {
handle1() {
console.log('不需要参数')
},
handle2(e) {
console.log(e, '事件对象')
},
handle3(num, str) {
console.log(num, str)
},
handle4(num,str, e) {
console.log(num, str, e)
}
}
}
</script>
<child name="张三" :age="24"></child>
props: ['name', 'age'],
vue提供的内容分发的机制。通俗一点:就是父组件把一段html(wxml)传给子组件
<child>
<button>按钮</button>
</child>
父组件给子组件(child)发送了一个button
// 子组件接收父组件发送过来的button
<template>
<view>
// 占位
<slot></slot>
</view>
</template>
匿名插槽是由名字,名字叫:default。可以不写
!
uni-app中的中央事件总线比vue项目更加简单
在实际工作中中央事件中线,不怎么用。使你的代码走向未知,代码会非常混乱。
乱传的另外几个方法【掌握】
$once (只订阅一次)
$off
取消某一个事件的所有订阅
uni.$off('事件名')
取消某一个事件下的某一个订阅
const 函数 = () => {}
uni.$on('事件名', 函数)
uni.$off('事件名', 函数)
vuex的特点
uni-app中怎么引入vuex【vue一样】
创建一个仓库
import Vuex from 'vuex'
import Vue from 'vue'
// Vue要use一下Vuex
// 给每一个组件注入一个$store
Vue.use(Vuex)
export default new Vuex.Store({
state: {
name: '1114班级'
},
mutations: {},
getters: {},
actions: {},
modules: {}
})
将这个仓库注入到vue应用中
main.js中注入 new Vue
import store from '@/store'
const app = new Vue({
...App,
//
store
})
测试:将数据显示到页面上
{{ name }}
computed: {
name() {
return this.$store.state.name
}
}
授权,在manifest.json下mp-weixin
"mp-weixin" : {
"appid" : "wx3373d91b06ee348f",
"setting" : {
"urlCheck" : false
},
"usingComponents" : true,
"permission": {
"scope.userLocation": {
"desc": "你的位置信息将用于小程序位置接口的效果展示"
}
},
"requiredPrivateInfos": [
"getLocation"
]
}
使用uniapp提供的api
api调用摄像头,扫描二维码
得到二维码的数据,告诉uniapp
首页
加油
积分商城
接口: http://129.211.169.131:6368/getFractionShop
点击首页的积分商城,跳转到商城页面
调用一个接口,得到商品数据
然后渲染
要求:下拉刷新做一下
扫码:
promise.all的用法如下:【面试官】
Promise.all([p1,p2,p3,p4]).then(res => {
// 全部的promise都成功之后进入这个then
}).catch(err => {
// 但凡有一个primise失败都进入catch
})
场景:发起100个请求?99个都成功了!其中给一个失败了,就要进入catch!怎么优化
const p1 = new Promise((resove, reject) => {
setTimeout(() => {
resove(1)
}, 500)
})
const p2 = new Promise((resove, reject) => {
setTimeout(() => {
resove(2)
}, 200)
})
const p3 = new Promise((resove, reject) => {
setTimeout(() => {
reject('500')
}, 200)
}).catch(err => {
return Promise.resolve(err)
})
// 2020的新方法【最佳实践】
Promise.allSettled([p1,p2,p3]).then(res => {
console.log(res)
})
// 2020之前的用法
Promise.all([p1,p2,p3]).then(res => {
// [1,2,undefined]
console.log(res)
}).catch(err => {
console.log(err)
})
你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。
我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:
撤销:Ctrl/Command + Z
重做:Ctrl/Command + Y
加粗:Ctrl/Command + B
斜体:Ctrl/Command + I
标题:Ctrl/Command + Shift + H
无序列表:Ctrl/Command + Shift + U
有序列表:Ctrl/Command + Shift + O
检查列表:Ctrl/Command + Shift + C
插入代码:Ctrl/Command + Shift + K
插入链接:Ctrl/Command + Shift + L
插入图片:Ctrl/Command + Shift + G
查找:Ctrl/Command + F
替换:Ctrl/Command + G
直接输入1次#,并按下space后,将生成1级标题。
输入2次#,并按下space后,将生成2级标题。
以此类推,我们支持6级标题。有助于使用TOC
语法后生成一个完美的目录。
强调文本 强调文本
加粗文本 加粗文本
标记文本
删除文本
引用文本
H2O is是液体。
210 运算结果是 1024.
链接: link.
图片:
带尺寸的图片:
居中的图片:
居中并且带尺寸的图片:
当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。
去博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片
.
// An highlighted block
var foo = 'bar';
一个简单的表格是这么创建的:
项目 | Value |
---|---|
电脑 | $1600 |
手机 | $12 |
导管 | $1 |
使用:---------:
居中
使用:----------
居左
使用----------:
居右
第一列 | 第二列 | 第三列 |
---|---|---|
第一列文本居中 | 第二列文本居右 | 第三列文本居左 |
SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:
TYPE | ASCII | HTML |
---|---|---|
Single backticks | 'Isn't this fun?' |
‘Isn’t this fun?’ |
Quotes | "Isn't this fun?" |
“Isn’t this fun?” |
Dashes | -- is en-dash, --- is em-dash |
– is en-dash, — is em-dash |
一个具有注脚的文本。2
Markdown将文本转换为 HTML。
您可以使用渲染LaTeX数学表达式 KaTeX:
Gamma公式展示 Γ ( n ) = ( n − 1 ) ! ∀ n ∈ N \Gamma(n) = (n-1)!\quad\forall n\in\mathbb N Γ(n)=(n−1)!∀n∈N 是通过欧拉积分
Γ ( z ) = ∫ 0 ∞ t z − 1 e − t d t . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=∫0∞tz−1e−tdt.
你可以找到更多关于的信息 LaTeX 数学表达式here.
可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图:
这将产生一个流程图。:
我们依旧会支持flowchart的流程图:
如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。
如果你想加载一篇你写过的.md文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。
mermaid语法说明 ↩︎
注脚的解释 ↩︎