小程序编程第21课

教程

各位战友,早上好。这节课接着做项目,这节课我们的目标是把计算结果直接展示在页面上,而不是通过弹窗展示。

上节课我们只校验了本金,我们把期数和利率的校验也给加上,如果你已经加上了,那么就不用管了

if (p === '') {
   wx.showModal({
     title: '提示',
     content: '请输入本金',
     showCancel: false
   })
   return
 } else if (n === '') {
   wx.showModal({
     title: '提示',
     content: '请输入期数',
     showCancel: false
   })
   return
 } else if (i === '') {
   wx.showModal({
     title: '提示',
     content: '请输入本利率',
     showCancel: false
   })
   return
 }

现在我们想要把结果直接展示在页面上,而不是弹窗。

那我们该怎么办呢?

首先我们要在页面上画出一块地方,让我们的结果能放进去。

于是,我们又要打开index.wxml

我们在计算按钮增加如下代码

<view>
	计算结果
</view>
<view>
	{{result}}
</view>

这里view标签我们已经讲过了,就是视图标签,可以用来在页面展示任何东西

这里有个{{result}}是啥意思呢?

就是把我们的结果展示在这里,result是变量,它被包了两对大括号

这是小程序固定的语法,可以把data中的属性绑定到这里

什么是data中的属性呢?

打开我们的index.js文件,你可以看到page函数的参数对象里面,有个属性就叫data,它的值是一个对象

现在这个data对象有4个属性,这里的4个属性是可以直接展示到页面的,现在这里面没有result属性,所以当我们保存index.wxml时,页面只会增加一行计算结果的字,不会展示result属性

现在,我们在这个data对象里增加一个reuslt属性,属性值可以为空字符串

data: {
	reuslt: '',
    motto: 'Hello World',
    userInfo: {},
    hasUserInfo: false,
    canIUse: wx.canIUse('button.open-type.getUserInfo')
  },

因为是空字符串,所以,我们保存了之后,页面还是没有变化。为了检查我们是不是真的把result属性展示到页面了,我们随便给个字符串。

data: {
	reuslt: '1234',
    motto: 'Hello World',
    userInfo: {},
    hasUserInfo: false,
    canIUse: wx.canIUse('button.open-type.getUserInfo')
  },

保存一下,我们发现页面上出现了1234,因为我们还没有计算,所以我们还是先还原为空字符串。

现在我们要修改一下展示结果的那段代码了

我们要把结果保存在这个reuslt属性里面

我们怎么才能做到呢?

先把之前弹窗展示结果的代码删掉

wx.showModal({
      title: '计算结果',
      content: fv,
      showCancel: false
    })

因为fv是我们的计算结果,那我们只需要把fv保存到result中就可以了

怎么做呢?那就是使用我们之前很熟悉的一个函数

this.setData({
      result: fv
})

我们来分析一下这几行代码的意思,this是什么东西?表示这个。

这个是指谁?

指的就是这个page参数对象

this有点像,我们日常对话中常常说的「我」,表示指代

因为this指代的是一个对象,所以this可以看成是一个对象

所以可以用.访问其属性,setData是一个隐藏的属性,是特定于微信小程序的。虽然我们再这个参数对象中没有看到,但是它的确是存在的

然后这个setData又是一个函数,所以我们可以传递参数

我们传递的参数是一个对象,这个对象里面还有一个result属性,也就是我们刚刚在上面定义的result属性,然后属性值正好是我们的结果

这几行代码组合起来的意思就是,设置data中result属性的值

然后我们保存一下,看看效果

结果被展示在页面上了。需要注意的是,只有在data对象中的属性才能被展示到页面上,我们再index.js上面定义的p和i,n是不能直接展示到页面上的,要把他们展示到页面上,需要在data中增加属性才可以。

作业

点击计算按钮后,把输入的本金和期数利率也展示到页面上

像这样

在这里插入图片描述
官方文档

参考答案

//index.js
//获取应用实例
const app = getApp()

let p = ''; // 本金
let i = ''; // 利率
let n = ''; // 期数

Page({
  data: {
    result: '',
    motto: 'Hello World',
    userInfo: {},
    hasUserInfo: false,
    canIUse: wx.canIUse('button.open-type.getUserInfo'),
    p: '',
    n: '',
    i: ''
  },
  //事件处理函数
  bindViewTap: function () {
    wx.navigateTo({
      url: '../logs/logs'
    })
  },
  onLoad: function () {
    if (app.globalData.userInfo) {
      this.setData({
        userInfo: app.globalData.userInfo,
        hasUserInfo: true
      })
    } else if (this.data.canIUse) {
      // 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回
      // 所以此处加入 callback 以防止这种情况
      app.userInfoReadyCallback = res => {
        this.setData({
          userInfo: res.userInfo,
          hasUserInfo: true
        })
      }
    } else {
      // 在没有 open-type=getUserInfo 版本的兼容处理
      wx.getUserInfo({
        success: res => {
          app.globalData.userInfo = res.userInfo
          this.setData({
            userInfo: res.userInfo,
            hasUserInfo: true
          })
        }
      })
    }
  },
  getUserInfo: function (e) {
    console.log(e)
    app.globalData.userInfo = e.detail.userInfo
    this.setData({
      userInfo: e.detail.userInfo,
      hasUserInfo: true
    })
  },
  handlePInput: function (e) {
    p = e.detail.value
  },
  handleNInput: function (e) {
    n = e.detail.value
  },
  handleIInput: function (e) {
    i = e.detail.value
  },
  calculate: function () {
    if (p === '') {
      wx.showModal({
        title: '提示',
        content: '请输入本金',
        showCancel: false
      })
      return
    } else if (n === '') {
      wx.showModal({
        title: '提示',
        content: '请输入期数',
        showCancel: false
      })
      return
    } else if (i === '') {
      wx.showModal({
        title: '提示',
        content: '请输入本利率',
        showCancel: false
      })
      return
    }

    let fv = p * (1 + i / 100) ** n
    fv = fv.toFixed(2)
    this.setData({
      result: fv,
      p: p,
      n: n,
      i: i
    })
  }
})
<view class="row">
	<text>本金</text>
	<input bindinput="handlePInput" type="number" placeholder="请输入"></input>
	<text></text>
</view>
<view class="row">
	<text>期数</text>
	<input bindinput="handleNInput" type="number" placeholder="请输入"></input>
	<text></text>
</view>
<view class="row">
	<text>利率</text>
	<input bindinput="handleIInput" type="number" placeholder="请输入"></input>
	<text>%年利率</text>
</view>
<button bindtap="calculate" type="warn">开始计算</button>

<view>
	计算结果:
</view>
<view>
	您输入的本金是{{p}}
</view>
<view>
	您输入的期数是{{n}}
</view>
<view>
	您输入的利率是{{i}}
</view>
<view>
	期末本息和是{{result}}
</view>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰奕辰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值