uniapp跳转带回数据

1. 什么是uniapp

Uniapp是DCloud公司推出的一款基于Vue.js的开发工具,可以让开发者在写一套代码的情况下生成多个平台的应用,包括iOS、Android、H5等等。同时,uniapp还拥有类似于flutter的框架Weex,可以直接开发小程序。

uniapp的优势在于对于多端开发的支持,既能够在不同端之间快速切换,在调试时也能够方便地进行跨平台测试。而uniapp的开发也类似于Vue.js,提供了许多基础组件和高阶API支持,是一款十分实用的开发工具。

2. uniapp中的页面跳转

2.1 通过uni.navigateTo实现页面跳转

在uniapp中,页面跳转的方法与小程序十分相似,可以通过uni.navigateTo实现。相比于小程序,uniapp的页面跳转有更多的参数可以配置,使得页面之间的传参更加方便。

// 在A页面跳转到B页面

uni.navigateTo({

url: '/pages/B/B?id=123&name=test'

})

在上述代码中,我们在调用uni.navigateTo时,除了指定跳转目标地址之外,还可以通过url参数传入一些变量。在B页面中,可以通过uni.getStorageSync方法获取跳转参数。

// 在B页面获取跳转参数

onLoad: function(options) {

let id = options.id

let name = options.name

}

在B页面的onLoad函数中,可以通过options参数获取跳转参数,并进行相应处理。

2.2 通过uni.navigateBack实现页面返回

在uniapp中,我们也可以通过uni.navigateBack实现返回上一页。

// 返回到上一页

uni.navigateBack()

在进行uni.navigateBack操作时,如果需要传递数据到上一页,可以使用uni.navigateBack({data: {xxx}})进行设置。

// 在B页面返回到A页面,并传递数据

uni.navigateBack({

delta: 1,

data: {

result: 'success'

}

})

在上述代码中,delta参数表示返回的页面数。在A页面中,我们可以利用onBackPress时的res.param获取返回的数据。

// 在A页面处理返回结果

onBackPress: function(res) {

let result = res.param.result

}

2.3 通过uni.redirectTo实现页面重定向

在uniapp中,我们也可以通过uni.redirectTo实现页面重定向。重定向的过程与跳转类似,但是在实际运行过程中,会将之前所有的页面栈清空,只保留当前的一级页面。

// 重定向到B页面

uni.redirectTo({

url: '/pages/B/B?id=123&name=test'

})

在进行重定向时,我们需要注意一点,由于页面已经栈内内容已经清空,再次通过uni.navigateBack是无法返回到之前的页面。

3. uniapp中页面跳转的传参方法

在uniapp中,我们实现页面跳转时,还可以使用Uni Navigation Params Plugin这个插件实现更为灵活的传参。使用此插件需要在HBuilderX上安装插件并解锁,解锁方法可以参考uniapp官网上的教程。

3.1 使用setQueryParams方法进行传参

使用setQueryParams方法进行传参是最为常规的一种方法。通过在源页面中调用uni.setQueryParams(params)方法设置参数,在目标页面中调用uni.getPageParams()方法获取传递参数。例如:

// 在A页面设置传递参数

uni.setQueryParams({

id: 123,

name: 'test'

})

// 在B页面获取传递参数

let params = uni.getPageParams()

需要注意的是,setQueryParams方法必须在页面加载时调用,如果调用时机不当会导致传递参数失败。

3.2 使用setExtraData方法进行传参

setExtraData方法可以让我们在跳转到目标页面时进行参数的设置,从而避免了在源页面需要判断参数情况的麻烦。通过调用uni.setExtraData(params)方法设置参数,在目标页面中可以通过uni.getExtraData()方法获取传递参数。例如:

// 在A页面设置传递参数

uni.setExtraData({

id: 123,

name: 'test'

})

// 在B页面获取传递参数

let params = uni.getExtraData()

与setQueryParams方法相比,setExtraData方法不需要判断参数情况,更加方便。需要注意的是,由于setExtraData设置参数会在跳转到目标页面时被执行,因此可能会影响跳转时的性能。

4. uniapp中参数回传方法

4.1 使用uni.navigateBack实现数据传递

在uniapp中,我们可以通过uni.navigateBack实现数据传递,例如我们在B页面中需要将数据传递给A页面:

// 在B页面返回到A页面,并传递数据

uni.navigateBack({

delta: 1,

success: function(res) {

// 将数据传递回A页面

res.eventChannel.emit('acceptDataFromB', {data: 'HelloA'})

}

})

在B页面中调用navigateBack方法时,我们可以在success回调函数中利用eventChannel.emit方法将需要传递的数据传递回A页面中。

// 在A页面中接收B页面传递数据

onLoad: function(options) {

// 获取eventChannel对象

let eventChannel = this.getOpenerEventChannel()

// 监听acceptDataFromB事件,并将数据存储到data中

eventChannel.on('acceptDataFromB', function(data) {

this.setData({

data: data

})

})

},

在A页面中,我们可以通过getOpenerEventChannel方法获取由B页面传递回来的eventChannel对象,并在callback中处理传递的数据。

4.2 使用uni.$emit实现数据传递

与vue.js的事件传递方法相同,我们也可以在uniapp中使用uni.$emit实现数据传递。通过在源页面中调用uni.$emit(eventName, params)方法设置参数,在目标页面中通过on监听eventName事件获取传递参数。例如:

// 在A页面设置传递参数

uni.$emit('customEvent', {

id: 123,

name: 'test'

})

// 在B页面监听customEvent事件,并获取传递参数

uni.$on('customEvent', function(params) {

console.log(params)

})

通过uni.$emit方法设置参数,我们在B页面中可以通过uni.$on方法监听到指定的事件并获取参数。这种传递方式相比与uni.navigateBack方法更为灵活,但是需要注意传递事件名称和监听函数必须保持一致。

5. 总结

在实际开发过程中,页面跳转和参数传递是开发中十分重要的部分。通过本文的介绍,我们可以掌握uniapp中页面跳转的方法以及传参方式,更加灵活地处理页面间的跳转和传参的情况。在日常开发中,我们需要根据项目的实际需求,选择合适的方法来处理数据传递的情况。