【关键词】
快应用、router、onBackPress
【问题背景】
页面栈有A、B两个页面,怎么在B页面中调A页面的方法或传参?场景是:A页面是列表页,B页面是详情页,B页面状态改变后返回A页面状态也要改变。
【解决方法】
在onBackPress里重写返回逻辑,通过router.push方式携带参数跳转,A页面在onshow里通过this.param获取(param是push传参的参数名)。
代码如下:
A页面:
-
- <div class="container">
- <text class="title">A的值是{{message}}text>
- <input class="btn" type="button" value="跳转" @click="onClick" />
- div>
-
- <style>
- .container {
- flex-direction: column;
- justify-content: center;
- align-items: center;
- }
- .btn {
- width: 140px;
- height: 60px;
- background-color: #00bfff;
- border-radius: 28px;
- }
-
- .title {
- font-size: 50px;
- }
- style>
-
- <script>
- import router from '@system.router'
- module.exports = {
- data: {
- componentData: {},
- message: 'Hello World'
- },
- onInit() {
- this.$page.setTitleBar({
- text: 'PageA',
- textColor: '#ffffff',
- backgroundColor: '#007DFF',
- backgroundOpacity: 0.5,
- menu: true
- });
- },
- onShow(options) {
- '// Do something when show.'
- console.log(this.messageB + 'this.messageB')
- // messageB是B页面携带返回的参数
- this.message = this.messageB || this.message
- },
- onClick() {
- router.push({
- uri: '/pageB',
- params: {message: this.message}
- })
- }
- }
- script>
B页面:
-
- <div class="container">
- <text class="title">接收message:{{messageB}}text>
- <input class="btn" type="button" value="改变message" @click="onClick" />
- div>
-
- <style>
- .container {
- flex-direction: column;
- justify-content: center;
- align-items: center;
- }
- .btn {
- width: 300px;
- height: 60px;
- margin-bottom: 20px;
- background-color: #00bfff;
- border-radius: 75px;
- }
-
- .title {
- font-size: 50px;
- }
- style>
-
- <script>
- import router from '@system.router'
- module.exports = {
- data: {
- componentData: {},
- messageB: ''
- },
- onInit() {
- this.$page.setTitleBar({
- text: 'PageB',
- textColor: '#ffffff',
- backgroundColor: '#007DFF',
- backgroundOpacity: 0.5,
- menu: true
- });
- },
- onShow(options) {
- '// Do something when show.'
- console.log(this.message + 'this.messageA')
- // message 是A页面传过来的值
- this.messageB = this.message
- },
- onClick() {
- this.messageB = 'Hello QuickApp'
- },
- onBackPress() {
- console.info(`Triggered:onBackPress`);
- router.clear()
- router.push({
- uri: '/hello',
- params: {messageB: this.messageB}
- })
- }
- }
- script>
效果图如下:



