前端---uniapp

1.简介

UniApp 是一个使用 Vue.js 开发所有前端应用的框架,可以开发跨平台应用,如:iOS、Android、H5、小程序等。UniApp 提供了丰富的组件和 API,使得开发者可以使用一套代码,实现多平台开发。官方文档UniApp官方文档

2.环境配置

安装 Node.js
安装 HBuilderX 编辑器
安装 Vue CLI(可选,用于命令行创建项目)

3.创建 UniApp 项目

使用 HBuilderX 编辑器创建新项目,选择 UniApp 项目模板。
配置项目名称、目录等信息。
选择需要支持的平台,如:H5、小程序等。

4.代码结构

UniApp 的项目结构如下:

├── components       # 组件目录  
├── pages            # 页面目录  
│   ├── index        # index 页面目录  
│   │   ├── index.vue  # index 页面文件  
│   │   └── index.json # index 页面配置  
│   └── ...  
├── static           # 静态资源目录  
├── main.js          # 入口文件  
├── manifest.json    # 配置文件  
├── pages.json       # 页面配置文件  
└── uni.scss         # 全局样式文件

5.常用的组件

  1. 视图容器viewscroll-view等。

  2. 基础内容texticonprogress等。

  3. 表单组件buttonforminputpicker等。

  4. 导航navigatortab-bar等。

  5. 媒体组件imagevideoaudio等。

  6. 地图map

  7. 画布canvas

1. 视图容器 - view

view 组件类似于 HTML 中的 div,用于布局和承载其他组件。

<template>  
  <view class="container">  
    <view class="header">标题</view>  
    <view class="content">内容区域</view>  
    <view class="footer">页脚</view>  
  </view>  
</template>  
  
<style scoped>  
.container {  
  display: flex;  
  flex-direction: column;  
  height: 100vh;  
}  
.header, .content, .footer {  
  flex: 1;  
  text-align: center;  
  padding: 20px;  
}  
.header {  
  background-color: #f5f5f5;  
}  
.content {  
  background-color: #fff;  
}  
.footer {  
  background-color: #f5f5f5;  
}  
</style>

2. 基础内容 - text

text 组件用于显示文本内容。

<template>  
  <view>  
    <text class="text-content">这是一段文本内容。</text>  
  </view>  
</template>  
  
<style scoped>  
.text-content {  
  font-size: 16px;  
  color: #333;  
  margin-top: 20px;  
}  
</style>

3. 表单组件 - input

input 组件用于接收用户输入。

<template>  
  <view>  
    <input type="text" v-model="inputValue" placeholder="请输入内容" />  
    <text>你输入的是:{{ inputValue }}</text>  
  </view>  
</template>  
  
<script>  
export default {  
  data() {  
    return {  
      inputValue: ''  
    };  
  }  
};  
</script>

4. 导航 - navigator

navigator 组件用于页面间的跳转。

<template>  
  <view>  
    <navigator url="/pages/detail/detail">跳转到详情页</navigator>  
  </view>  
</template>

6.事件绑定

在 UniApp 中,事件绑定是组件与用户交互的关键部分。通过事件绑定,你可以监听组件上的各种事件,并在事件触发时执行相应的逻辑。

1. 点击事件 - @click

@click 事件用于监听用户的点击操作。

<template>  
  <view>  
    <button @click="handleClick">点击我</button>  
  </view>  
</template>  
  
<script>  
export default {  
  methods: {  
    handleClick() {  
      uni.showToast({  
        title: '你点击了按钮',  
        icon: 'success'  
      });  
    }  
  }  
};  
</script>

2. 输入事件 - @input

@input 事件用于监听输入框内容的变化。

示例:当用户在输入框中输入内容时,实时显示输入的内容。

<template>  
  <view>  
    <input type="text" @input="handleInput($event)" v-model="inputValue" />  
    <text>你输入的是:{{ inputValue }}</text>  
  </view>  
</template>  
  
<script>  
export default {  
  data() {  
    return {  
      inputValue: ''  
    };  
  },  
  methods: {  
    handleInput(e) {  
      console.log('输入内容:', e.detail.value);  
      this.inputValue = e.detail.value;  
    }  
  }  
};  
</script>

3. 滚动事件 - @scroll

@scroll 事件用于监听滚动视图的滚动行为。

示例:当用户滚动页面时,输出滚动的位置信息。

<template>  
  <scroll-view @scroll="handleScroll" scroll-y="true" style="height: 300px;">  
    <!-- 滚动内容 -->  
  </scroll-view>  
</template>  
  
<script>  
export default {  
  methods: {  
    handleScroll(e) {  
      console.log('滚动位置:', e.detail.scrollTop);  
    }  
  }  
};  
</script>

4. 表单提交事件 - @submit

@submit 事件用于监听表单的提交行为。

<template>  
  <form @submit="handleSubmit">  
    <input type="text" name="username" />  
    <input type="password" name="password" />  
    <button formType="submit">提交</button>  
  </form>  
</template>  
  
<script>  
export default {  
  methods: {  
    handleSubmit(e) {  
      console.log('表单数据:', e.detail.value);  
      // 执行提交逻辑,如发送请求等  
    }  
  }  
};  
</script>

5. 触摸事件

UniApp 还支持各种触摸事件,如 @touchstart@touchmove@touchend,用于监听用户的触摸行为。

示例:监听手指触摸屏幕、移动和离开的过程。

<template>  
  <view  @touchstart="handleTouchStart" @touchmove="handleTouchMove" @touchend="handleTouchEnd">  
    <!-- 触摸区域 -->  
  </view>  
</template>  
  
<script>  
export default {  
  methods: {  
    handleTouchStart() {  
      console.log('手指触摸屏幕');  
    },  
    handleTouchMove() {  
      console.log('手指在屏幕上移动');  
    },  
    handleTouchEnd() {  
      console.log('手指离开屏幕');  
    }  
  }  
};  
</script>

7.全局配置

在 UniApp 中,tabBar 是一个常用的全局配置项,用于在应用的底部导航栏展示多个标签页,用户可以通过点击不同的标签来切换页面。下面是一个 tabBar 配置的案例文档,展示了如何设置底部导航栏。

1. 配置 tabBar

manifest.json 文件的 tabBar 部分,可以配置底部导航栏的样式和页面。

{  
  "tabBar": {  
    "color": "#999", // 文字默认颜色  
    "selectedColor": "#007AFF", // 文字选中颜色  
    "backgroundColor": "#FFFFFF", // 背景色  
    "borderStyle": "black", // tabbar 上边框的颜色,可选值 black/white  
    "list": [  
      {  
        "pagePath": "pages/index/index", // 页面路径,必须在 pages 中先定义  
        "text": "首页", // tab 上按钮文字  
        "iconPath": "static/tabbar/home.png", // 图片路径,未设置则显示文字,iOS/Android 必须提供  
        "selectedIconPath": "static/tabbar/home-active.png" // 选中时的图片路径,iOS/Android 必须提供  
      },  
      {  
        "pagePath": "pages/me/me",  
        "text": "我的",  
        "iconPath": "static/tabbar/me.png",  
        "selectedIconPath": "static/tabbar/me-active.png"  
      }  
      // ... 其他标签页配置  
    ]  
  }  
}

2. 设置页面路径

pages 配置项中,确保你设置了 tabBarlist 数组内所有 pagePath 对应的页面。

{  
  "pages": [  
    "pages/index/index",  
    "pages/me/me",  
    // ... 其他页面路径  
  ],  
  // ... 其他配置项  
}

3. 注意事项

  • tabBar 中的 list 数组至少包含两个 pagePath,最多包含五个。

  • iconPathselectedIconPath 必须为本地图片路径,且两个属性都需要提供。

  • 如果应用运行在 H5 平台上,tabBar 配置不会生效,因为 H5 没有原生的底部导航栏概念。

  • 如果某些页面不需要显示 tabBar,可以在页面的 json 配置文件中设置 "navigationBarShow": false

8.UniApp 页面导航与传参

在 UniApp 中,页面导航通常指的是从一个页面跳转到另一个页面的过程,而传参则是指在页面跳转时传递数据给目标页面。下面将介绍 UniApp 中页面导航和传参的常用方法。

1. 页面导航

UniApp 支持多种页面导航方式,包括使用 uni.navigateTouni.redirectTouni.reLaunchuni.switchTabuni.navigateBack 等 API。

  • uni.navigateTo:保留当前页面,跳转到应用内的某个页面。

  • uni.redirectTo:关闭当前页面,跳转到应用内的某个页面。

  • uni.reLaunch:关闭所有页面,打开到应用内的某个页面。

  • uni.switchTab:跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面。

  • uni.navigateBack:关闭当前页面,返回上一页面或多级页面。

// 跳转到应用内的某个页面  j
uni.navigateTo({  
  url: '/pages/detail/detail?id=1'  
});  
  
// 关闭当前页面,跳转到应用内的某个页面  
uni.redirectTo({  
  url: '/pages/profile/profile'  
});  
  
// 关闭所有页面,打开到应用内的某个页面  
uni.reLaunch({  
  url: '/pages/login/login'  
});  
  
// 跳转到 tabBar 页面  
uni.switchTab({  
  url: '/pages/index/index'  
});  
  
// 返回上一页面或多级页面  
uni.navigateBack({  
  delta: 1 // 返回的页面数,如果 delta 大于现有页面数,则返回到首页  
});

2. 传参

在导航时,我们经常需要向目标页面传递一些参数。这些参数可以通过 URL 的查询字符串(query string)进行传递。

示例代码:

假设我们要从 list 页面跳转到 detail 页面,并传递一个 id 参数。

// 在 list 页面的某个方法中  
uni.navigateTo({  
  url: '/pages/detail/detail?id=' + item.id // 假设 item.id 是要传递的 ID 值  
});

detail 页面代码:

detail 页面的 onLoad 方法中,我们可以通过 this.$route.query 获取到传递过来的参数。

export default {  
  onLoad(options) {  
    // 获取传递过来的 id 参数  
    const id = options.id;  
    // 根据 id 做一些处理,比如请求数据等  
  }  
}

此外,对于页面栈中的页面,还可以通过 getCurrentPages 方法获取到页面栈的信息,进而获取到之前页面传递的数据。

// 获取当前页面栈  
const pages = getCurrentPages();  
// 获取上一个页面的实例对象  
const prevPage = pages[pages.length - 2];  
// 假设上一个页面通过某个方法将数据保存在了 `data` 对象中  
const dataFromPrevPage = prevPage.data.someData;
注意事项
  • 当使用 uni.navigateTo 导航到新页面时,如果新页面在页面栈中已经存在,则不会创建新的实例,而是复用已有的页面实例。因此,在复用页面时,需要注意数据的处理,避免数据状态混乱。

  • 在传参时,请确保传递的参数值是有效的,并且对于敏感数据要进行适当的加密和校验。

  • 对于复杂的应用场景,可能需要结合 Vuex 或其他状态管理库来管理跨页面的数据状态。

9 数据请求方式

1.使用uni.request

uni.request({
    url:'https://woniu.h5project.cn/1.1/classes/Job',
    method:'GET',
    header:{
        "X-LC-Id": "自己的id",
        "X-LC-Key": "自己的key",
        "Content-Type": "application/json"
    },
    success: (res) => {
        console.log(res);
    }
})

2.自行封装uni.request

// promise的三种状态: pendding处理中  resolve成功   reject失败
​

import {BASE_URL,ID,KEY} from '../config/index.js'
​
function http({url,method="GET",data={}}){
  return new Promise((resolve,reject)=>{
    uni.request({
      url:BASE_URL+url,
      method,
      data,
      header:{
        'X-LC-Id': ID, //此处必须使用自己的ID
        'X-LC-Key': KEY,  //此处必须使用自己的Key
        'Content-Type': 'application/json'
      },
      success:(res)=>{
        resolve(res)   //交给then
      },
      fail:(err)=>{
        reject(err)  //交给catch
      }
    })
  })
}
​
function get(url,data){
  return http({url,method:'GET',data})
}
​
function post(url,data){
  return http({url,method:'POST',data})
}
​
function del(url,data){
  return http({url,method:'DELETE',data})
}
​
export {
  http,
  get,
  post,
  del
}

3.使用luch-request第三方库

luch-request - DCloud 插件市场

3.x文档 | luch-request (quanzhan.co)

axios 可能不兼容小程序

import Request from '../js_sdk/luch-request/luch-request/index.js'
import {BASE,ID,KEY} from '../config/index.js'
const http = new Request()
/* config 为默认全局配置*/
http.setConfig((config) => { 
    config.baseURL = BASE+'/1.1/'; /* 根域名 */
    config.header = {
        "X-LC-Id": ID,
        "X-LC-Key": KEY,
        "Content-Type": "application/json"
    }
    return config
})
// 请求拦截器
http.interceptors.request.use((config) => { // 可使用async await 做异步操作
  config.header = {
    ...config.header,
    // a: 1 // 演示拦截器header加参
  }
  console.log('请求拦截器');
  return config
}, config => { // 可使用async await 做异步操作
  return Promise.reject(config)
})
//响应拦截器
http.interceptors.response.use((response) => { /* 对响应成功做点什么 可使用async await 做异步操作*/
  console.log('响应拦截器',response)
  return response
}, (response) => { /*  对响应错误做点什么 (statusCode !== 200)*/
  console.log(response)
  return Promise.reject(response)
})
​
export default http

10 组件库配置

1.colorUI 倾向于布局

GitHub文档

ColorUI-UniApp - DCloud 插件市场

  • 下载核心代码

  • 将colorui文件夹引入项目中

  • 使用组件

2.图鸟UI

图鸟UI - DCloud 插件市场

TuniaoUI (tuniaokj.com)

写在最后:本篇博文给大家分享了一些uniapp的基础知识,希望能够给大家带来帮助,博主小,中,大厂均有面试经历,目前是一名全栈工程师,坚持每日分享全栈相关知识,希望能够和大家共同进步。

  • 27
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值