在一个this.setData()中连续使用变量出现问题
发布于 6 年前 作者 yuanna 10408 次浏览 来自 问答

你想反馈一个 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次,才能得出正确答案。

7 回复

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

this.setData({

A: A,

B: B,

C: C,

chuiju:chuiju,

x4: x4,

y4: y4,

jieguo: jieguo

})

我想要赋值后的数据

那应该怎么改呢?

那肯定不对啊

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

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

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你想要的是赋值前的还是赋值后的?

回到顶部