uni-app

uni-app

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:关闭当前页面,返回上一页面或多级页面。
// 跳转到应用内的某个页面  
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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/29731.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uni微信小程序使用lottie

在uni插件市场找到 lottie-uni https://ext.dcloud.net.cn/plugin?id1044按照文档要求安装 HBuilderX 引入 下载或导入示例获取插件 import lottie from /common/lottie-miniprogram.jsindex.vue <template><uni-popupref"popup"type"center"ba…

俄罗斯ozon爆款推荐丨ozon学生受众产品

在俄罗斯电商平台OZON上&#xff0c;学生受众是一个庞大且活跃的群体。为了满足他们的需求&#xff0c;OZON平台上涌现出了一系列受学生欢迎的爆款产品。以下是一些针对学生受众的OZON爆款推荐&#xff1a; OZON选品工具&#xff1a;D。DDqbt。COM/74rD Top1 UNO纸牌游戏 俄语…

【OpenGL学习】OpenGL不同版本渲染管线汇总

文章目录 一、《OpenGL编程指南》第6版/第7版的渲染管线二、《OpenGL编程指南》第8版/第9版的渲染管线 一、《OpenGL编程指南》第6版/第7版的渲染管线 图1. OpenGL 2.1、OpenGL 3.0、OpenGL 3.1 等支持的渲染管线 二、《OpenGL编程指南》第8版/第9版的渲染管线 图2. OpenGL …

windows 下安装Nuclei 详细教程

一、软件介绍 Nuclei是一款基于YAML语法模板的开发的定制化快速漏洞扫描器。它使用Go语言开发&#xff0c;具有很强的可配置性、可扩展性和易用性。 二、下载安装 官网&#xff1a;https://docs.projectdiscovery.io/tools/nuclei/overview Nuclei项目地址&#xff1a;​​…

Elasticsearch在日志分析中的神奇之旅

在数字化日益深入的今天&#xff0c;日志分析成为了企业运维、产品迭代、安全监控等环节中不可或缺的一环。海量的日志数据如何被高效、准确地分析&#xff0c;成为了我们面临的挑战。而Elasticsearch&#xff0c;这款基于Lucene构建的开源、分布式、RESTful搜索引擎&#xff0…

记一次 .NET某机械臂上位系统 卡死分析

一&#xff1a;背景 1. 讲故事 前些天有位朋友找到我&#xff0c;说他们的程序会偶发性的卡死一段时间&#xff0c;然后又好了&#xff0c;让我帮忙看下怎么回事&#xff1f;窗体类的程序解决起来相对来说比较简单&#xff0c;让朋友用procdump自动抓一个卡死时的dump&#x…

【JavaScript】防抖(Debounce)与节流(Throttle)技术

防抖&#xff08;debounce&#xff09;和节流&#xff08;throttle&#xff09;确实属于性能优化的知识范畴&#xff0c;但它们在日常的JavaScript编程中也非常常见。这是因为&#xff0c;如果不正确处理高频事件&#xff08;如resize、scroll、keydown等&#xff09;&#xff…

0. 云原生之基于乌班图远程开发

云原生专栏大纲 文章目录 安装乌班图配置静态IP重置root密码开启root远程登录开启远程SSH访问安装docker安装docker-compose安装Edge浏览器安装搜狗输入法安装TeamViewer安装虚拟显示器安装JDK安装maven安装vscodevscode插件安装VSCode配置maven、git、jdk、自动报错vscode快捷…

vue脚手架 笔记05

目录 01 路由懒加载(重要) 02 axios在脚手架中的使用 03.axios的二次封装 04 组件缓存 01 路由懒加载(重要) 一次性导入会出现严重的问题 : 首屏卡顿 因为main.js中引入了router/index.js router/index.js又使用了import语句 静态的引入了每一个组件 导致了首屏卡顿 所以我…

30v-180V降3.3V100mA恒压WT5107

30v-180V降3.3V100mA恒压WT5107 WT5107是一款恒压单片机供电芯片&#xff0c;它可以30V-180V直流电转换成稳定的3.3V直流电&#xff08;最大输出电流300mA&#xff09;&#xff0c;为各种单片机供电。WT5107的应用也非常广泛。它可以用于智能家居、LED照明、电子玩具等领域。比…

学习MVC设计模型

MVC设计模式 概念 - 代码的分层 字母表示层理解MModle模型层业务的具体实现VView视图层展示数据CController控制器层控制业务流程 细化理解层数 View&#xff1a;视图层&#xff0c;用于存放前端页面 Controller&#xff1a;控制器层&#xff0c;用于存放Servlet Modle-Biz&…

jupyter使用的一个奇怪bug——SyntaxError: invalid non-printable character U+00A0

bug来由&#xff1a;从其他部分例如kaggle里复制来的代码直接粘贴在jupyter notebook里&#xff0c;每一行代码都会出现&#xff1a; Cell In[5], line 1 warnings.filterwarnings(ignore) ^ SyntaxError: invalid non-printable character U00A0 单元格 In[5]&#xff0c;第 …

每日一练 - PIM-DM与RPF检查机制

01 真题题目 PIM-DM 不依赖于特定的单播路由协议,而是使用现存的单播路由表进行 RPF 检查. A.正确 B.错误 02 真题答案 A 03 答案解析 此陈述是正确的。 PIM-DM&#xff08;Protocol Independent Multicast - Dense Mode&#xff09;正如其名&#xff0c;是独立于协议的组播…

多网页登录Cookie免登通俗理解

背景&#xff0c;现在有A、B两个系统&#xff0c;其中B是乾坤框架的微前端&#xff0c;里面又有若干可以单独运行的系统C、D、E、F&#xff0c;现在的目标是&#xff0c;如果没有登录过其中任一系统&#xff0c;则需要跳转登录页登录&#xff0c;登录后&#xff0c;所有的A-F都…

Python 自动化测试入门有哪些内容?

自动化测试是软件测试领域中的一个重要技术&#xff0c;它利用脚本和工具来执行测试任务&#xff0c;减少了人工操作的工作量和时间消耗。Python 是一种功能强大且易于学习的编程语言&#xff0c;被广泛应用于自动化测试领域。本文将从0到1讲解如何使用 Python 进行自动化测试&…

网络编程(一)基本概念

文章目录 一、概念&#xff08;一&#xff09;网络发展阶段1. ARPAnet阶段2. TCP/IP两个协议阶段3. 网络体系结构和OSI开放系统互联模型4. TCP/IP协议簇体系结构&#xff08;1&#xff09; 应用层&#xff1a;&#xff08;2&#xff09;传输层&#xff1a;&#xff08;3&#x…

白名单在数据防篡改方面的优势与局限

白名单作为一种安全机制&#xff0c;其主要目的是通过预先设定受信任的程序、文件或用户列表&#xff0c;来限制系统资源的访问和执行权限。这种机制在防止未授权的程序或文件运行方面具有一定的效果&#xff0c;从而在一定程度上减少病毒入侵的机会。然而&#xff0c;当我们探…

读书笔记-《人人都是产品经理》

在开发工程师与产品经理的段子中&#xff0c;常看到“人人都是产品经理”这句话&#xff0c;用来调侃这个岗位似乎没有什么门槛。 很明显&#xff0c;这句话的出处&#xff0c;即本书作者想表达的是每个人都可以运用产品思维去解决问题。 01 产品 产品&#xff1a;用来解决某…

python中scrapy

安装环境 pip install scrapy 发现Twisted版本不匹配 卸载pip uninstall Twisted 安装 pip install Twisted22.10.0 新建scrapy项目 scrapy startproject 项目名 注意&#xff1a;项目名称不允许使用数字开头&#xff0c;也不能包含中文 eg: scrapy startproject scrapy_baidu_…

接口响应时间测试

curl 要使用 curl 测试一个接口的响应时间具体步骤和命令示例: 打开你的终端或命令行工具。 使用 curl 命令并添加 -w(或者 --write-out)参数来输出时间统计信息。 示例命令: curl -o /dev/null -s -w "Time to Connect: %{time_connect}\nTime to Start Transfer: …