uni-app:只用2小时学习+上手就够了

UniAPP是一个基于Vue.js的跨平台开发框架,允许开发者编写一次代码,部署到iOS、Android、H5以及多个小程序平台。文章介绍了UniAPP的初始化配置,如工程目录结构、应用和页面生命周期,以及路由配置和页面跳转。此外,还讲解了数据绑定、事件处理和自定义组件通信,适合初学者快速入门。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、UniAPP 介绍

1、什么是 UniAPP ?

  uni-app 是一个使用 Vue.js 开发所有前端应用的框架,开发者编写一套代码,可发布到 iOS、Android、H5,以及各种小程序(微信/支付宝/百度/头条/ QQ /钉钉)等多个平台,方便开发者快速交付,不需要转换开发思维,不需要更改开发习惯。

2、为什么要选择 UniAPP ?

1、开发者/案例数量更多
2、平台能力不受限
3、性能体验优秀
4、周边生态丰富
5、学习成本低

二、UniAPP 初始化相关配置

1、工程目录结构

  一个 uni-app 工程,就是一个 Vue 项目,你可以通过 HBuilderX 或 cli 方式快速创建 uni-app 工程,详见:快速上手
在这里插入图片描述

2、应用配置 manifest.json

3、编译配置 vue.config.js

4、全局配置 page.json

决定页面文件的路径、窗口样式、原生的导航栏、底部的原生tabbar 

5、全局样式 uni.scss

6、主组件 App.vue

调用应用生命周期函数、配置全局样式、配置全局的存储globalData

7、入口文件 main.js

	因为大家都是初学者或者是需要快速上手项目,所以上面的内容尽可能先了解,
我们从最简单的uniapp的基础指令等相关的学习,等到有一定的开发经验和更加熟悉
小程序之后咱们就可以对上面的部分内容进行系统的学习。初学者只做大致了解即可

三、UniAPP 生命周期

    uni-app 完整支持 Vue 实例的生命周期,同时还新增 应用生命周期页面生命周期

1、应用生命周期

1.1 应用生命周期相关简介

应用生命周期即:小程序注册时触发的生命周期钩子函数

  1. 用户首次打开小程序,触发 onLaunch(全局只触发一次)。
  2. 小程序初始化完成后,触发onShow方法,监听小程序显示。
  3. 小程序从前台进入后台,触发 onHide方法。
  4. 小程序从后台进入前台显示,触发 onShow方法。
  5. 小程序后台运行一定时间,或系统资源占用过高,会被销毁。

前台、后台定义: 当用户点击左上角关闭,或者按了设备 Home 键离开微信小程序并没有直接销毁,而是进入了后台;当再次进入微信或再次打开小程序,又会从后台进入前台。

1.2代码示例
App({
  onLaunch (options) {
  	//小程序初始化完成时触发,全局只触发一次
  },
  onShow (options) {
  	//小程序启动,或从后台进入前台显示时触发
  },
  onHide () {
  	//小程序从前台进入后台时触发
  },
  onError (msg) {
  	//小程序发生脚本错误或 API 调用报错时触发
  },
  onPageNotFound(){
  	//小程序要打开的页面不存在时触发
  },
  onThemeChange(){
  	//系统切换主题时触发
  },
  //存储全局变量
  globalData: {
    userInfo: null,
    urlFirst:''
  }
  //globalData: 'I am global data'
})

2、页面生命周期

1.1 页面生命周期相关简介

页面生命周期即:页面从创建到销毁的过程

  1. 小程序注册完成后,加载页面,触发onLoad方法。
  2. 页面载入后触发onShow方法,显示页面。
  3. 首次显示页面,会触发onReady方法,渲染页面元素和样式,一个页面只会调用一次。
  4. 当小程序后台运行或跳转到其他页面时,触发onHide方法。
  5. 当小程序有后台进入到前台运行或重新进入页面时,触发onShow方法。
  6. 当使用重定向方法wx.redirectTo(OBJECT)或关闭当前页返回上一页wx.navigateBack(),触发onUnload
1.2代码示例
函数名说明
onLoad监听页面加载,其参数为上个页面传递的数据,参数类型为Object(用于页面传参),参考示例
onShow监听页面显示。页面每次出现在屏幕上都触发,包括从下级页面点返回露出当前页面
onReady监听页面初次渲染完成。注意如果渲染速度快,会在页面进入动画完成前触发
onHide监听页面隐藏
onUnload监听页面卸载
onResize监听窗口尺寸变化
onPullDownRefresh监听用户下拉动作,一般用于下拉刷新,参考示例
onReachBottom页面滚动到底部的事件(不是scroll-view滚到底),常用于下拉下一页数据。具体见下方注意事项
onTabItemTap点击 tab 时触发,参数为Object,具体见下方注意事项
onShareAppMessage用户点击右上角分享
onPageScroll监听页面滚动,参数为Object
onNavigationBarButtonTap监听原生标题栏按钮点击事件,参数为Object
onBackPress监听页面返回
onNavigationBarSearchInputChanged监听原生标题栏搜索输入框输入内容变化事件
onNavigationBarSearchInputConfirmed监听原生标题栏搜索输入框搜索事件,用户点击软键盘上的“搜索”按钮时触发。
onNavigationBarSearchInputClicked监听原生标题栏搜索输入框点击事件
onShareTimeline监听用户点击右上角转发到朋友圈
onAddToFavorites监听用户点击右上角收藏

3、应用生命周期 VS 页面生命周期

页面展示时的逻辑:
应用onlaunch==》应用onshow(前台运行)==》页面onluad==》
页面onshow==〉页面onready(页面首次渲染)==》
页面onhide(页面隐藏)==》应用onhide(后台运行)==》
页面unload(页面卸载)

如下图所示:
在这里插入图片描述

四、UniAPP 路由配置及页面跳转

1、路由配置

开发者需要在pages.json里配置每个路由页面的路径及页面样式

"pages": [
        {
            "path": "pages/index",
            "style": {
                "navigationBarTitleText": "路由配置",
                "navigationBarBackgroundColor": "#FFFFFF",
                "navigationBarTextStyle": "black",
                "backgroundColor": "#FFFFFF",
                "enablePullDownRefresh": true
            }
        },
        {
            "path": "pages/user",
            "style": {
                "navigationBarTitleText": "路由配置",
                "navigationBarBackgroundColor": "#FFFFFF",
                "navigationBarTextStyle": "black",
                "backgroundColor": "#FFFFFF",
                "enablePullDownRefresh": true
            }
        }
]

2、路由跳转导航

路由导航有两种方式:标签式导航编程式导航

路由方式页面栈表现标签式编程式
初始化新页面入栈
打开新页面新页面入栈 <navigator open-type="navigate" />uni.navigateTo({})
页面重定向当前页面出栈,新页面入栈<navigator open-type="redirect" />uni.redirectTo({})
页面返回页面不断出栈,直到目标返回页<navigator open-type="navigateBack" />uni.navigateBack({})
Tab 切换页面全部出栈,只留下新的 Tab 页面<navigator open-type="switchTab" />uni.switchTab({})
重加载页面全部出栈,只留下新的页面<navigator open-type="reLaunch" />uni.reLaunch({})

3、小程序路由传参与接受参数

//页面跳转并传递参数
uni.navigateTo({
    url: 'page2?name=liy&message=Hello'
});
// 页面 2 接收参数
onLoad: function (option) { //option为object类型,会序列化上个页面传递的参数
    console.log(option.name); //打印出上个页面传递的参数。
    console.log(option.message); //打印出上个页面传递的参数。
}

五、uniapp重要指令

1、uni-app` 使用vue的数据绑定方式解决js和 DOM 界面交互的问题

<text>{{textvalue}}</text><!-- 这里演示了组件值的绑定 -->  
<button :type="buttontype" @click="changetextvalue()">修改为789</button><!-- 这里演示了属性和事件的绑定 -->  

2、有时也需要在内联语句处理器中访问原始的 DOM 事件。可以用特殊变量 $event 把它传入方法:

3、事件映射表

// 事件映射表,左侧为 WEB 事件,右侧为 ``uni-app`` 对应事件
	{
		click: 'tap',
		touchstart: 'touchstart',
		touchmove: 'touchmove',
		touchcancel: 'touchcancel',
		touchend: 'touchend',
		tap: 'tap',
		longtap: 'longtap', //推荐使用longpress代替
		input: 'input',
		change: 'change',
		submit: 'submit',
		blur: 'blur',
		focus: 'focus',
		reset: 'reset',
		confirm: 'confirm',
		columnchange: 'columnchange',
		linechange: 'linechange',
		error: 'error',
		scrolltoupper: 'scrolltoupper',
		scrolltolower: 'scrolltolower',
		scroll: 'scroll'
	}

4、表单组件

  • H5 的 select 标签用 picker 组件进行代替
  • 表单元素 radioradio-group 组件进行代替
<radio-group class="radio-group" @change="radioChange">
	<label class="radio" v-for="(item, index) in items" :key="item.name">
	<radio :value="item.name" :checked="item.checked" /> {{item.value}}</label>
</radio-group>

六、UniAPP 自定义组件与通信

1、自定义组件

组件可以使用「全局注册」和「页面引入」两种方式进行使用,使用分为三步:

导入 import xxx from 'xxx'
注册 Vue.use('xx',xx) components:{ xxx }
使用 <xx />

2、父子组件通信

父组件通过自定义属性向子组件传递数据
子组件通过 props 接收父组件传递的数据
父组件通过自定义事件标签向子组件传递事件
子组件通过触发父组件定义事件方式修改父组件数据

七、项目进阶理解

<think>好的,用户之前已经问过开发微信小程序需要哪些语言,现在他问是否只用JavaScript就可以。我需要先回顾之前的回答,我之前提到需要四种核心语言:JavaScript、WXML、WXSS和JSON。用户现在可能想确认是否能仅用JavaScript而不用其他语言,或者是否有其他替代方案。 首先,我应该明确回答用户的问题:不能仅用JavaScript,因为微信小程序的框架要求必须使用WXML和WXSS来构建视图和样式,同时JSON用于配置。但JavaScript确实是处理逻辑的主要语言。 然后,我需要详细解释各个部分的作用,说明为什么不能只用JavaScript。比如,WXML负责结构,WXSS负责样式,JSON处理配置,这些都无法用JavaScript替代。同时,可以提到一些工具或框架,如使用第三方框架如Taro或Uni-app,可能允许使用其他语言如TypeScript或Vue,但最终还是会编译成小程序所需的四种文件。 还要考虑用户可能的背景,他们可能对前端开发有一定了解,但想简化技术栈,或者想复用现有的JavaScript技能。需要指出虽然逻辑层用JavaScript,但其他部分仍需对应的语言,不过学习曲线较低,因为类似HTML和CSS。 可能用户还关心是否可以通过某些方式绕过使用其他语言,比如动态生成WXML,但需要指出小程序框架的限制,无法完全避免。同时,可以提到一些社区工具或插件,但官方不支持纯JavaScript开发。 最后,总结重点,强调必须四种语言协作,但JavaScript是核心,其他相对易。这样用户能明确知道需要学习的内容,同时不会被其他语言难度吓退。</think>--- **可以明确回答**:仅用JavaScript无法独立开发完整的微信小程序,但**JavaScript是逻辑层的核心语言**,需配合其他三种必要语言(WXML、WXSS、JSON)共同使用。以下是具体分析: --- ### **一、为什么不能只用JavaScript?** 微信小程序的开发框架**强制分离逻辑层、视图层、样式层和配置层**,四者缺一不可: 1. **WXML**:负责页面结构(类似HTML),无法用JavaScript动态生成DOM。 2. **WXSS**:负责样式(类似CSS),直接内联样式会导致代码冗余且难以维护。 3. **JSON**:负责页面/全局配置(如导航栏标题),无法通过JavaScript直接替代。 --- ### **二、如何理解JavaScript的核心作用?** 虽然必须配合其他语言,但**JavaScript承担了最关键的功能**: 1. **逻辑控制**: - 数据绑定(通过`this.setData()`更新视图)。 - 事件处理(如`bindtap`点击事件)。 2. **API调用**: - 调用微信原生接口(如`wx.request`、`wx.getLocation`)。 3. **生命周期管理**: - 控制页面/组件的加载、显示、隐藏等(如`onLoad`、`onShow`)。 --- ### **三、替代方案:用框架减少代码差异** 若希望减少对WXML/WXSS的直接编写,可通过**跨端框架**间接使用JavaScript生态: 1. **Taro**: - 支持React/Vue语法,编译为WXML+WXSS+JS- 示例:用React JSX替代WXML。 2. **Uni-app**: - 使用Vue语法,一套代码编译到多端(包括小程序)。 3. **原生增强**: - 结合`npm`引入JavaScript工具库(如`lodash`、`moment`)。 --- ### **四、特殊情况说明** 1. **纯逻辑小程序(无界面)**: - 例如后台云函数,可只用JavaScript(需搭配云开发环境)。 2. **动态内容生成**: - 可通过JavaScript生成数据,但最终仍需通过WXML绑定到视图层。 - 示例: ```javascript // JS中定义列表数据 Page({ data: { items: ["A", "B", "C"] } }) ``` ```html <!-- WXML中循环渲染 --> <view wx:for="{{items}}">{{item}}</view> ``` --- ### **五、学习建议** 1. **优先掌握JavaScript**: - 理解ES6语法、Promise异步操作、模块化开发。 2. **快速上手WXML/WXSS**: - 学习成本低(类似HTML/CSS),1-2天可掌握基础。 3. **善用工具链**: - 微信开发者工具提供实时预览和调试,降低试错成本。 --- **总结**: - **必须使用**:JavaScript + WXML + WXSS + JSON。 - **JavaScript核心地位**:负责所有动态逻辑,但需其他语言配合实现完整功能。 - **简化路径**:通过跨端框架(如Taro)可减少直接编写WXML/WXSS的工作量。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值