收藏
回答

在一个this.setData()中连续使用变量出现问题

问题模块 框架类型 API/组件名称 终端类型 操作系统 微信版本 基础库版本
API和组件 小程序 this.setData() 微信iOS客户端 Android 6.6.3 6.6.3

你想反馈一个 Bug 还是 提一个需求?

反馈一个Bug

如果是 Bug:


* Bug 表现是什么?预期表现是什么?

Bug中,在一个this.setData()内反复设置变量,提取变量出现问题。需要连续运行三次函数才能解决这个问题。

预期运行一次函数就能得到

* 如何复现?

运行函数

* 提供一个最简复现 Demo

//js页面

// pages/index-jisuan-DianDaoZhiXian/index-jisuan-DianDaoZhiXian.js

Page({


/**

  * 页面的初始数据

  */

data: {

x1: "",

y1: "",

x2: "",

y2: "",

x3: "",

y3: "",

chuiju: "",//垂距结果变量

x4: "",//结果x

y4: "",//结果y

A: "",//中间变量

B: "",//中间变量

C: "",//中间变量

},

/*以下为输入代码*/

zhiAXfun: function (e) {

this.setData({

x1: e.detail.value

})

},

zhiAYfun: function (e) {

this.setData({

y1: e.detail.value

})

},

zhiBXfun: function (e) {

this.setData({

x2: e.detail.value

})

},

zhiBYfun: function (e) {

this.setData({

y2: e.detail.value

})

},

Xfun: function (e) {

this.setData({

x3: e.detail.value

})

},

Yfun: function (e) {

this.setData({

y3: e.detail.value

})

},

/*以上为输入代码*/

jisuan: function (e) {

this.setData({

A: this.data.y2 - this.data.y1,

B: this.data.x1 - this.data.x2,

C: this.data.x2 * this.data.y1 - this.data.x1 * this.data.y2,

chuiju: ((this.data.A * this.data.x3 + this.data.B * this.data.y3 + this.data.C) / (Math.sqrt(this.data.A * this.data.A + this.data.B * this.data.B))).toFixed(3),

x4: ((this.data.B * this.data.B * this.data.x3 - this.data.A * this.data.B * this.data.y3 - this.data.A * this.data.C) / (this.data.A * this.data.A + this.data.B * this.data.B)).toFixed(3),

y4: ((-this.data.A * this.data.B * this.data.x3 + this.data.A * this.data.A * this.data.y3 - this.data.B * this.data.C) / (this.data.A * this.data.A + this.data.B * this.data.B)).toFixed(3),

jieguo: "垂距:" + this.data.chuiju + "垂点x:" + this.data.x4 + "垂点y:" + this.data.y4

})

},


/**

  * 生命周期函数--监听页面加载

  */

onLoad: function (options) {


},


/**

  * 生命周期函数--监听页面初次渲染完成

  */

onReady: function () {


},


/**

  * 生命周期函数--监听页面显示

  */

onShow: function () {


},


/**

  * 生命周期函数--监听页面隐藏

  */

onHide: function () {


},


/**

  * 生命周期函数--监听页面卸载

  */

onUnload: function () {


},


/**

  * 页面相关事件处理函数--监听用户下拉动作

  */

onPullDownRefresh: function () {


},


/**

  * 页面上拉触底事件的处理函数

  */

onReachBottom: function () {


},


/**

  * 用户点击右上角分享

  */

onShareAppMessage: function () {


}

})



//html页面

<!--pages/index-jisuan-DianDaoZhiXian/index-jisuan-DianDaoZhiXian.wxml-->

<view class="body">

<form class="biao">

<view>直线内A点</view>

<input type='text' bindinput='zhiAXfun' placeholder='x坐标'></input>

<input type='text' bindinput='zhiAYfun' placeholder='y坐标'></input>

<view>直线内B点</view>

<input type='text' bindinput='zhiBXfun' placeholder='x坐标'></input>

<input type='text' bindinput='zhiBYfun' placeholder='y坐标'></input>

<view>直线外的点</view>

<input type='text' bindinput='Xfun' placeholder='x坐标'></input>

<input type='text' bindinput='Yfun' placeholder='y坐标'></input>

<button bindtap='jisuan'>计算</button>

<text>{{jieguo}}</text>

</form>

</view>



需要连续按按钮<button>计算</button>3次,才能得出正确答案。

最后一次编辑于  2018-02-23  (未经腾讯允许,不得转载)
邀请回答
复制链接收藏投诉关注问题回答

7 个回答

  • 这都申请了
    这都申请了
    2018-02-24

    chuiju: ((this.data.A * this.data.x3 + this.data.B * this.data.y3 + this.data.C) / (Math.sqrt(this.data.A * this.data.A + this.data.B * this.data.B))).toFixed(3),这里的this.data.A、this.data.B、this.data.C你想要的是赋值前的还是赋值后的?

    2018-02-24
    赞同
    回复
  • 洪夜馨
    洪夜馨
    2018-02-24

    我想要赋值后的数据

    2018-02-24
    赞同
    回复
  • 这都申请了
    这都申请了
    2018-02-24

    那肯定不对啊

    2018-02-24
    赞同
    回复
  • 洪夜馨
    洪夜馨
    2018-02-24

    那应该怎么改呢?

    2018-02-24
    赞同
    回复
  • 这都申请了
    这都申请了
    2018-02-24

    先定义变量,再用变量赋值

    2018-02-24
    赞同
    回复
  • 洪夜馨
    洪夜馨
    2018-02-24

    我是新手,我在data:里面不是已经定义了变量了吗?

    2018-02-24
    赞同
    回复
  • 这都申请了
    这都申请了
    2018-02-24

    没有其他编程经验吗?先定义好局部变量A、B、C、chuiju、x4、y4、jieguo,然后再

    this.setData({

    A: A,

    B: B,

    C: C,

    chuiju:chuiju,

    x4: x4,

    y4: y4,

    jieguo: jieguo

    })


    2018-02-24
    赞同
    回复