uniapp-学习1

本文介绍了uniapp中事件绑定和组件间通信的方法。首先讲解了如何在事件处理函数中获取事件源和传递参数,接着详细阐述了组件的创建和使用,包括父子组件、兄弟组件间的传值策略,如通过事件总线实现通信。此外,还提到了在vue中使用事件总线的实践。

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

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

一、uniapp 绑定函数

与vue中一样 在需要绑定事件的标签上写 @click=函数名

1.1函数的形参e可接收事件源

代码如下(示例):

<template>
	<view>
		<button type="default" @click="handleClick">点击事件</button>
	</view>
</template>
<script>
	export default {
		data() {
			return {
				
			}
		},
		methods: {
			handleClick(e){
				console.log(e)
			},
		},

打印出来的e是有数据的 如下图
在这里插入图片描述

1.2.调用函数时传递的参数是实参 给实参赋值 实参会将值传给形参

代码如下(示例):

<view>
		<button type="default" @click="handleClick(10)">点击事件</button>
</view>
methods: {
			handleClick(e){
				console.log(e)
			},
		},

这时e不在=事件源的值,而是实际的参数,实参值,e=10

另外,还可以传递多个实参,用多个形参去接收

<view>
		<button type="default" @click="handleClick(10,20)">点击事件</button>
</view>
methods: {
			handleClick(e,f){
				console.log(e)
				console.log(f)
			},
		},

10会传给e,20会传给f


1.3 既要获取事件源e,又要传递实际的参数

获取事件源e,将$event 传给函数,用一个形参去接收 ( $event 就是事件源)

<view>
		<button type="default" @click="handleClick(10,20,$event)">点击事件</button>
</view>
methods: {
			handleClick(e,f,event){
				console.log(e)
				console.log(f)
				console.log(event)
			},
		},

总结

不传参数是 形式参数e是事件源,传递参数后e是实际的参数
传递参数时 $event 是事件源

二创建组件并在页面中使用组件

创建组件 新建目录components -新建组件my-comp
使用组件 在哪个页面用就在哪引入组件,引入以后需要在components声明,(在页面级,页面的组件都声明后),当做标签使用

import  myComp from '../.../components/my-comp/my-comp'
components: {
  		myComp
  	},
<my-comp></my-comp>

2.1父子组件传值

2.1.1父组件向子组件传值

在子组件(小组件)的props对象里定义要传的值的类型,与data平级

props:{
  		title:String
  	}

数据层中用插值表达式 {{ }} 展示

<view class="title">
  	{{title}}
  </view>

在父组件中 当做属性将值传给子组件

<my-comp title='我是传递的标题'></my-comp>

进阶 // title 不传值的时候在字组件有默认值

字组件中的props 定义的字段写成对象,

  	props:{
  		title:{
  			type:String,
  			default:'默认的标题'
  		}
  	},

在父组件中不传值

<my-comp ></my-comp>

2.1.2子组件向父组件传值

在子组件中有input输入框,在子组件中输入值,但在父组件使用,需要将输入的值传给父组件
通过this. $ emit(“事件名字”,事件源数据) 将数据保存下来
在父组件中 @事件名="处理函数接收传来的值

<view>
  	我是子组件,小组件
  	<view class="title">
  		{{title}}
  	</view>
  	<input type="text" v-model='value'>
  	<button type="default" @click="submit">将输入的值传给父组件</button>
  	
  </view>

在引用子组件的时候,给子组件标签绑定一个事件 @事件名=“处理函数($event)” 事件名与子组件的事件名保持一致

<my-comp  title='我是传递的标题' @submit=submitValue></my-comp>
submitValue(e){
  			console.log(e)
  		}

2.1.3 兄弟组件之间的传值

方法1:把数据放在公共的父组件中,然后在一层一层的传递,即两个子组件先向父组件传值,传到父组件上,父组件再将子组件a的数据传给子组件b,父组件再将子组件b的数据传给子组件a,实现兄弟组件之间的传值
方法2:使用vueX
方法3:通过事件总线

事件总线

触发者触发事件,处理者做出响应
// 触发事件,通知事件处理者更新 uni.$emit(事件名,需要处理的值) 触发numAchange 事件,更新
this.numA的值

	uni.$emit('numAchange',this.numA)
// 在需要处理的组件b 监听这个事件
一加载出来就需要监听,实例创建完成生命周期里监听 在created
uni.$on 监听事件
   	uni.$on('numAchange',(numA)=>{
				console.log(numA)
				}

不需要监听时必须取消监听,以免浪费资源
在实例销毁以前生命周期清除监听,在beforeDestroy用uni.$off(),参数是需要清除监听的事件
可以接收两个参数
第一个参数,清除事件名字(如果不传代表清除所有监听)

beforeDestroy() {
  		uni.$off('numAChange')
  	},

第二个参数,代表清除某个监听函数(如果不传代表清除该事件)uni.$off(‘numAChange’,this. numAChangefun)

created(){
uni.$on('numAchange',函数名
  			}
},
method:{
numAChangefun(numA){
 			console.log(numA)
},
beforeDestroy(){
uni.$off('numAChange',this.  numAChangefun)

uni.$once() 只监听一次

在vue中使用时间总线

在这里插入图片描述
新建 .js 文件, 在这个文件中挂载vue,new 一个vue实例,在哪使用把uni.换成定义的事件总线
在这里插入图片描述

<think>好的,我现在需要帮助用户了解如何在UniApp-X中集成和使用SQLite数据库。首先,我需要回顾一下用户提供的引用内容,看看已有的信息有哪些。根据引用[1],用户已经知道uni-app的基本概念,并且提到了创建uni-app项目和SQLite作为本地数据库的使用。引用[2]详细介绍了SQLite的特点和集成方法,包括安装插件、初始化数据库、增删改查操作。引用[3]则涉及uni-ui和底部导航的实现,可能与当前问题关联不大,但可能涉及到项目结构方面的内容。 首先,用户的需求是希望在UniApp-X中使用SQLite,所以需要确认UniApp-X是否支持SQLite。根据之前的引用,uni-app可以通过插件集成SQLite,比如引用[2]提到的uni-app-sqlite插件。但需要确认UniApp-X是否有类似的插件或者是否有不同的方法。由于UniApp-X是uni-app的新版本或扩展,可能需要查阅最新的文档来确认兼容性。假设UniApp-X仍然支持相同的插件机制,那么步骤可能与引用[2]中的类似。 接下来,我需要整理集成SQLite的具体步骤。根据引用[2],步骤包括安装SQLite插件、初始化数据库、创建表、执行CRUD操作。这些步骤需要适配到UniApp-X的项目结构中。此外,用户可能需要示例代码,所以需要提供一个简单的示例,比如创建数据库、创建表、插入数据、查询数据等。 另外,用户可能遇到的一些常见问题需要注意,比如数据库路径问题、异步操作的处理、错误处理等。引用[2]中提到了使用executeSql方法执行SQL语句,这需要在示例中正确展示。同时,需要注意SQLite在移动端的兼容性,比如Android和iOS的不同表现,但uni-app的插件通常已经处理了这些差异。 还需要考虑UniApp-X的特性和语法是否与标准uni-app有所不同,比如组件的使用、API的调用方式等。如果有变化,可能需要调整代码示例。例如,UniApp-X可能使用不同的语法或生命周期钩子,需要确保示例代码符合其规范。 最后,生成相关问题时要围绕SQLite在UniApp-X中的应用,可能涉及性能优化、数据同步、复杂查询、调试方法和数据加密等方面。这些问题可以帮助用户进一步深入学习和解决问题。 总结步骤: 1. 创建UniApp-X项目,确保环境配置正确。 2. 安装SQLite插件(如存在兼容问题需处理)。 3. 初始化数据库,确认路径和名称。 4. 创建表结构,使用executeSql执行CREATE语句。 5. 实现增删改查操作,处理异步结果和错误。 6. 提供示例代码,展示完整流程。 7. 提示注意事项,如路径处理、异步操作、错误处理。 8. 生成相关问题,帮助用户扩展知识。 现在需要验证这些步骤是否正确,并确保示例代码在UniApp-X中可行。如果有不确定的地方,可能需要查阅最新的UniApp-X文档或社区资源,确保信息的准确性。</think>### 在UniApp-X中集成SQLite的完整教程 #### 1. 创建UniApp-X项目 通过HBuilderX创建新项目,选择`uni-app-x`模板。项目结构需包含`manifest.json`配置文件,用于声明数据库插件[^1]。 #### 2. 安装SQLite插件 在HBuilderX插件市场中搜索`sqlite`相关插件(如`uni-app-sqlite`),点击安装。安装后需在`manifest.json`的`App插件配置`中添加SQLite支持[^2]。 #### 3. 初始化数据库 在页面逻辑中引入SQLite模块并初始化数据库: ```javascript // pages/index/index.ux import sqlite from '@uni/sqlite'; const db = sqlite.openDatabase({ name: 'test.db', location: 'default' }); ``` #### 4. 创建数据表 通过`executeSql`方法执行建表语句: ```javascript db.transaction(tx => { tx.executeSql( 'CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)', [], () => console.log('Table created'), (err) => console.error('Error:', err) ); }); ``` #### 5. 增删改查操作示例 **插入数据**: ```javascript tx.executeSql( 'INSERT INTO users (name, age) VALUES (?, ?)', ['张三', 25], () => console.log('Insert success'), (err) => console.error('Insert failed:', err) ); ``` **查询数据**: ```javascript tx.executeSql( 'SELECT * FROM users', [], (_, result) => { for (let i = 0; i < result.rows.length; i++) { console.log(result.rows.item(i)); } }, (err) => console.error('Query failed:', err) ); ``` #### 6. 完整页面示例 ```javascript // pages/database/database.ux import sqlite from '@uni/sqlite'; export default { onReady() { const db = sqlite.openDatabase({ name: 'demo.db' }); db.transaction(tx => { // 建表 tx.executeSql( 'CREATE TABLE IF NOT EXISTS books(id INTEGER PRIMARY KEY, title TEXT)' ); // 插入 tx.executeSql('INSERT INTO books (title) VALUES ("UniApp-X指南")'); // 查询 tx.executeSql( 'SELECT * FROM books', [], (_, results) => console.log(JSON.stringify(results.rows)) ); }, (error) => console.error('Transaction error:', error), () => console.log('Transaction completed')); } } ``` #### 7. 注意事项 - **路径规范**:iOS/Android的数据库默认存储路径不同,可通过`plus.sqlite.getDatabasePath()`获取具体路径 - **异步处理**:所有SQL操作需在事务回调中完成,避免直接操作DOM - **错误捕获**:务必添加`transaction`的error回调,处理SQL语法错误 - **数据类型**:SQLite采用动态类型,但建议明确定义字段类型
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值