微信开发者工具 小程序 navigator组件 url传参

        在微信小程序编写过程当中,为避免内容重复、页面过多造成的代码体量大的问题,笔者通过navigator组件 url传参解决了这个问题:

        一、问题描述

        A页面中存在a,b,c,d四个按钮,分辨跳转到新页面。但是制作4个新页面明显会造成工作量大和代码体量大。同时,这四个按钮的新页面格式一样,仅仅是内容不同,即四个页面可以用相同的.wxml、.wxss、.js文件表示。

        二、新建页面

        原本需要新建5个页面(A+a,b,c,d)的情况,其实只需要新建2个页面(A+B),示意图如下。

 在app.js文件中添加两个页面

"pages": [
    "pages/A/A",
    "pages/B/B"
  ],

        三、页面构建

        此时构建A页面和B页面基本代码如下:

        A.wxml(初始版):此时在模拟器中依次点击四个按钮,均可跳转到B页面。

<!--pages/A/A-->
<view class="container">
  <text>pages/A页面/A页面</text>
</view>

<view class="container">
  <navigator url="../B/B"><view>按钮a</view></navigator>
  <navigator url="../B/B"><view>按钮b</view></navigator>
  <navigator url="../B/B"><view>按钮c</view></navigator>
  <navigator url="../B/B"><view>按钮d</view></navigator>
</view>

        B.wxml(初始版):在B页面中简单设置输出文字段的代码。

<!--pages/B/B.wxml-->
<text>pages/B/B.wxml</text>

<view class="container">
  <view>
    <view>
      <text>topic:{{topic}}\n</text>
      <text>content:{{content}}</text>
    </view>
  </view>
</view>

        B.js(初始版)

Page({

  /**
   * 页面的初始数据
   */
  data: {
    topic:"",
    content:""
  }
})

#测试——B.js与B.wxml之间的数据传输

Page({

  /**
   * 页面的初始数据
   */
  data: {
    topic:"123",
    content:"321"
  }

})

 测试结果:可正常传输数据

        四、连接数据库

        1.使用微信开发者工具的“云开发”功能新建数据库B,并输入4条记录。

         2.修改数据库读写权限:所有人可读写

         3.B.js连接数据库B

const DB = wx.cloud.database().collection("B")

Page({

    ……

})

        4.B.wxml通过B.js连接数据库

        获取数据:B.wxml

<!--pages/B/B.wxml-->
<text>pages/B/B.wxml</text>

<view class="container">
    <view wx:for="{{ne}}">
      <view>
        <view>
          <text>topic:{{item.topic}}</text>
          <text>content:{{item.content}}</text>
        </view>
      </view>
    </view>
</view>

        B.js

const DB = wx.cloud.database().collection("B")

Page({
  getData() {
    DB.where({
      type:"a"
    }).
    get({
      success: res => {
        console.log(res.data)
        this.setData({    //收集数据到ne中并返回
          ne: res.data
        })
      },
      fail(res) {
        console.log("查询失败", res)
      }
    })
  },

  /**
   * 页面的初始数据
   */
  data: {
    topic:"",
    content:""
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    this.getData()
  }

})

        此时,仅得到type:"a"的记录,如下

         B.wxml通过B.js连接数据库成功

        五、navigator组件 url传参

        A.wxml中navigator组件 url传参

<!--pages/A/A-->
<view class="container">
  <text>pages/A页面/A页面</text>
</view>

<view class="container">
  <navigator url="../B/B?type=a"><view>按钮a</view></navigator>
  <navigator url="../B/B?type=b"><view>按钮b</view></navigator>
  <navigator url="../B/B?type=c"><view>按钮c</view></navigator>
  <navigator url="../B/B?type=d"><view>按钮d</view></navigator>
</view>

        B.js设置接收参数函数

const DB = wx.cloud.database().collection("B")

Page({
  getData() {
    DB.where({
      type:this.data.type    //修改为传参的数据
    }).
    get({
        ……
    })
  },

  /**
   * 页面的初始数据
   */
  data: {
    topic:"",
    content:"",
    type:""    //声明一个传参的数据
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    this.setData({
      type:options.type
    })
  }

})

        效果如下,达到预期效果:

         六、优化建议

        本文仅仅介绍了实现该功能的基本要素,下面进行优化的建议:

        1.美观展示B界面;

        2.数据库中记录中的topic字段和content字段可以存储不同的内容,只要type字段的内容相同即可;

        3.url地址还可以传递多个参数,用“&”隔开即可:

<navigator url="../B/B?type=a&topic=AAA"><view>按钮a</view></navigator>

        4.未完待续,一起进步!

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值