uin-app开发-基本目录结构介绍与基础语法

1,158 阅读4分钟

一、什么是uin-app(uniapp.dcloud.io/)

uni-app 是一个使用 Vue.js 开发所有前端应用的框架,开发者编写一套代码,可发布到iOS、Android、H5、以及各种小程序(微信/支付宝/百度/头条/QQ/钉钉/淘宝)、快应用等多个平台。

开发环境:HBuilder。 官网下载地址:www.dcloud.io/hbuilderx.h… (下载App开发版,可开箱即用;如下载标准版,在运行或发行uni-app时,会提示安装uni-app插件,插件下载完成后方可使用。)

二、新建项目

1. 点击左上角文件 -> 新建 -> 项目

image.png

2. 弹窗中填写创建的项目名称、项目路径,选择模板,选择vue版本,点击创建即可

image.png

三、运行

点击运行,uniapp会编译成不同终端的代码,运行到不同的终端(h5、小程序等)

运行到小程序模拟器之前,要进行一个运行配置,因为小程序模拟器是在微信开发者工具里面的

1. 点击运行 -> 运行到小程序模拟器 -> 运行设置

image.png

2. 找到小程序运行配置,配置微信开发者工具在你电脑中的路径

image.png

四、基本目录结构介绍

image.png

main.js 是uniapp的入口文件(初始化vue实例、定义全局组件、使用需要的插件如 pinia)

import App from './App'
import * as Pinia from 'pinia';

// #ifndef VUE3 //不是vue3应用
import Vue from 'vue'

Vue.config.productionTip = false
App.mpType = 'app'
const app = new Vue({
    ...App
})
app.$mount()
// #endif


// #ifdef VUE3 //是vue3应用
import { createSSRApp } from 'vue'

export function createApp() {
  const app = createSSRApp(App)
  app.use(Pinia.createPinia()); // 集成状态管理pinia
  return {
    app,
    Pinia, // 此处必须将 Pinia 返回
  }
}
// #endif

App.vue是uniapp的根组件(根应用),监听应用生命周期、配置全局样式、配置全局的存储globalData。

注:应用生命周期仅可在App.vue中监听,在页面监听无效

<script>

export default {
  onLaunch: function() {
    console.log('App Launch')
  },

  onShow: function() {
    console.log('App Show')
  },

  onHide: function() {
    console.log('App Hide')
  }
}
</script>
<style>

/*每个页面公共css */

</style>

pages.json 全局配置文件(决定页面文件的路径、窗口样式、原生的导航栏、底部的原生tabbar 等,类似微信小程序中app.json的页面管理部分)

navigationBarTextStyle:导航栏标题颜色及状态栏前景颜色( black/white)

navigationBarTitleText:导航栏标题文字内容

navigationStyle:导航栏样式(default/custom取消默认的原生导航栏)

更多配置学习详见官网:uniapp.dcloud.net.cn/collocation…

image.png

五、基础语法(开发规范)

uni-app开发可以理解为vue和小程序的混合开发,如果掌握了vue和小程序开发,那么uni-app开发也会变得非常简单。

1.页面文件遵循vue的单文件组件规范(index.vue)
2.组件标签靠近小程序规范(view)

uniapp.dcloud.net.cn/component/

scroll-view定义可滚动视图区域,上拉刷新下拉加载更多

属性:

scroll-x:允许横向滚动

scroll-y:允许纵向滚动

show-scrollbar:控制是否出现滚动条

@scrolltoupper:滚动到顶部/左边,会触发 scrolltoupper 事件

@scrolltolower:滚动到底部/右边,会触发 scrolltolower 事件

@refresherpulling:自定义下拉刷新控件被下拉

@refresherrefresh:自定义下拉刷新被触发

@refresherrestore: 自定义下拉刷新被复位

@refresherabort:自定义下拉刷新被中止

3.接口能力(API)靠近小程序规范,但需将前缀 wx 替换为 uni(如路由跳转)uniapp.dcloud.net.cn/api/
uni.getSystemInfo({//异步获取系统信息
	success: function (res) {
		console.log(res.windowHeight)//可使用窗口高度
	}
});
uni.createSelectorQuery().select(".test")//获取节点信息
.boundingClientRect((data) => {//节点的布局位置的查询请求
    console.log("得到布局位置信息" + JSON.stringify(data));
    console.log("节点离页面顶部的距离为" + data.height);
})
.exec();
4.数据绑定及事件处理同vue规范(v-for=”” :key=”” @click=””),同时补充了App及页面的生命周期
5.为兼容多端运行,建议使用flex布局进行开发
6.样式穿透: /deep/ .btn{}

下面是一个简单的demo示范:(.vue文件)

<template>

  <view class="g-container">

    <!-- 标签 小程序 -->
    <input type="text" placeholder="请输入内容" v-model="inputValue"><button @click="onConfirm">确定</button>

  </view>

  <view class="g-list">

    <view v-for="item in list" :key="item.id" ">
       <text @click="onDelete(item.id)">{{item.id}} - {{item.name}} - {{item.price}} - {{item.num}}</text>
    </view>

  </view>

</template>

<script setup>
  import {ref} from 'vue'

  const list = ref([
    {id:1001,name:'javascript高级编程',price:88.89,num:1},
    {id:1002,name:'vue高级编程',price:188.89,num:1},
  ])

  const inputValue = ref('')

  // 确定
  const onConfirm = ()=>{

    const good = {
      id:Math.floor(Math.random()*(9999-1000)+1000),
      name:inputValue.value,
      price:Math.floor(Math.random()*(999-100)+100),
      num:Math.floor(Math.random()*10)
    }

    list.value.push(good)
    inputValue.value = '' // 清除数据

  }

  // 删除
  const onDelete = (id)=>{
  
    const index = list.value.findIndex(item=>item.id===id)
    list.value.splice(index,1) //

  }

</script>

<style scoped lang="scss">

.g-container{

  margin: 5px;
  display: flex;

  input{
    border: 1px solid gray;
    height: 40px;
    flex: 1;
  }

  button{
    width: 100px;
  }

}

</style>

六、混入封装

1. 什么是混入

类似于全局方法(工具类:utils),但是混入的this是可以使用的(指向组件this:vueComponent)。

比如某一个功能在很多组件和很多页面都会使用,那么就可以用混入封装起来

2.在mixins文件夹下创建mixins.js文件
export function mixin() {
  const courseType = ( courseLevel )=>{
    let value = ''
    switch( courseLevel ){
      case 1:
        value ='初级'
      break;
      case 2:
        value ='中级'
      break;
      case 3:
        value ='高级
      break;
    }
    return value;
  }
  
  return courseType
}

3.在.vue文件中使用

<script setup>
  import {ref,computed,watch} from 'vue'
  import {mixin} from './mixins/mixins.js'
  
  const {courseType} = mixin()
</script>