条件编译
// #ifndef VUE3
import Vue from 'vue'
import './uni.promisify.adaptor'
Vue.config.productionTip = false
App.mpType = 'app'
// 初始化vue应用
const app = new Vue({
...App
})
// 挂载vue应用
app.$mount()
// #endif
// #ifdef VUE3
import { createSSRApp } from 'vue'
export function createApp() {
const app = createSSRApp(App)
return {
app
}
}
// #endif
- #ifndef
- #endif
官方链接
场景:一套代码兼容到各个平台,每个平台有差异。 就会出现这种情况: 有一段代码在某一个平台生效,其他平台就不生效
document.getElementById('test')
以上代码在h5能正常运行,但是在小程序中会报错.
应用
app.vue就是一个应用(小程序的壳子)。
注意: app.vue没有template,你写了也不会生效
- style: 注入全局的样式
- script:
- 应用的生命周期
页面
通常页面放在pages下,一定要在pages.json中进行注册,才算是一个页面。
命名
pages
- index
- index.vue
- homeA
- homeA.vue
- home-a
- home-a.vue
创建
右键pages,创建页面,生成页面,并且能够把页面注册到pages.json中。
配置
在pages.json中的路由对每一个页面进行单独的配置。
官方文档
页面生命周期
官网地址
- onLoad 同小程序的 类似与vue的created
- 发起网络请求
- 接收页面参数
- onShow 、 onHide (类似于: keep-alive 包裹的组件多了两个生命周期: 失活,激活)
- onPullDownRefresh: 下拉刷新
- onReachBottom: 触底加载
页面也有vue的那一套生命周期,建议不要混着用,就用官网这一套
组件
分类
-
内置的组件
- uni-app帮我们写好的,直接使用即可
-
第三方组件
- ui框架的组件
-
自己开发的组件
- 引入 注册 使用
-
全局的组件
import ChildB from './components/ChildB/ChildB.vue' Vue.component('ChildB', ChildB)
在main.js中进行注册
-
easyCom 组件
- 链接
组件的生命周期
组件通信
- 父子通信【给vue2完全相同】
- 兄弟之间通信
- 乱传 【有点变化】
- vuex【同vue2】
乱传(vue2)
-
初始化一个$bus,挂载vue的原型上
Vue.protoType.$bus = new Vue() this.$bus
-
发送方
- 拿到$bus
- b u s . bus. bus.emit(‘自定义事件的名字’, 发送的数据)
-
接收方
- 拿到$bus
- b u s . bus. bus.on(‘自定义事件的名字’, 数据 => {})
uni-app的乱传
- 发送方
- uni.$emit(‘test’, ‘数据’)
- 接收方
- uni.$on(‘test’, data => { })
uni-app中集成vuex
-
创建一个仓库
- 创建store/index.js 在这里进行仓库的创建和配置
-
配置仓库
-
数据(state)
-
mutation
-
action
-
getters
-
modules
// 创建一个仓库并导出 import vuex from 'vuex' import Vue from 'vue' // this.$store Vue.use(vuex) // new 一个store export default new vuex.Store({ strict: true, state: { name: 'uni-app', age: 24 }, mutations: { M_name(state, payload) { state.name = payload } } })
-
-
将仓库注入到vue应用, main.js new Vue的使用给其配置一个store
import store from './store' new Vue({ ...App, store })
-
组件从仓库中获取值【计算属性】
computed: { // name() { // return this.$store.state.name // }, // age() { // return this.$store.state.age // } ...mapState(['name', 'age']) },
-
组件更改仓库中的值
methods: { ...mapMutations(['M_name']), changeName() { // 不要这样做,仓库中如果开启了严格模式,会报错 // this.$store.state.name = '李四' // 提交一个mutation // this.$store.commit('M_name', '李四') this.M_name('李四') } }
应用:
App.vue。 没有template。 有自己的一套生命周期
页面
- 在pages.json 下的 pages注册
- 通常在pages下
- 有两套生命周期
- onLoad …
- vue的那一套: created …
- 注意点: 不要用vue的那一套
组件
-
easycom规范的组件
-
components/组件名称/组件名称.vue
// export default { name: '组件名称' }
直接使用即可。
-
-
生命周期(同vue2)
-
通信方式
- 子父(vue2)
- 乱传(中央事件总线)
- 比vue2更加的简单。
- 缺点:不好维护。分散
- vuex集中管理项目的数据(共享的数据)
- 集中式管理数据。
- 组件可以无视层级从仓库中获取数据
- 仓库中数据发生变化,响应的组件更新
部分API介绍
定位
位置是一个比较敏感信息。手机
-
授权,在manifest.json下mp-weixin
"mp-weixin" : { "appid" : "wx3373d91b06ee348f", "setting" : { "urlCheck" : false }, "usingComponents" : true, "permission": { "scope.userLocation": { "desc": "你的位置信息将用于小程序位置接口的效果展示" } }, "requiredPrivateInfos": [ "getLocation" ] }
这是头像获取
这是位置获取