微信小程序this.setData给对象&数组动态赋值

这篇具有很好参考价值的文章主要介绍了微信小程序this.setData给对象&数组动态赋值。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 固定属性赋值

wxml:

<view>{{formData.title}}</view>

 js:

data:{
    formData:{
        title:'hellow'
    }
}

这个时候页面上显示的是 hellow

当我们修改的时候有2种方案

// 方案一 整体赋值

this.data.formData.title = 'china';
this.setData({
    form:'china'
})

// 方案二 单个属性赋值
this.setData({
   'form.title':'china'
})
或
this.setData({
   ['form.title']:'china'
})

2.动态属性赋值

wxml:

<view wx:for="{{arr}}" wx:for-item="item" wx:key="*this">{{item.title}}</view>

js:

data:{
    arr:[
        {
            id:1,
            title:'标题一'
        },
        {
            id:2,
            title:'标题二'
        }
    ]
}

修改数组里对象的属性

let index = 0;
this.setData({
    `[arr[${index}].title]`:'china'
})
或
let name = this.data.arr[0].title;
this.setData({
    [name]:'china'
})

通过es6模版字符串 `` 的方式 key 可以作为变量

wxml:

<view>{{formData.a0}}</view>
<view>{{formData.a1}}</view>
<view>{{formData.a2}}</view>

 js:

data:{
    formData:{
        a0:'111',
        a1:'222',
        a2:'333'
    }
}

循环修改

for(let i=0 ; i<2 ; i++){
    let name = `a${i}`;
    this.setData({
        [name]:'c'+i
    })
}

//显示结果
a0:c0
a1:c1
a2:c2

3.双向数据绑定

<input name="名称" type="text" value="{{formData.title}}" placeholder="请输入" />
<button bindtap="onSubmit">提交</button>

经过多次尝试提交 获取到的formData.title数据为空,据说加上model:value会生效,然而并没有任何效果,甚至一度怀疑人生,直到找到一篇帖子说 2.9.3以上版本才支持

wx.getSystemInfo({
   success: function (res) {
        console.log('该版本号为: ',res.SDKVersion)
   }
})

// 输出结果 该版本号为:  2.19.4

很显然不支持

网上搜索了一番,微信小程序居然没有双向数据绑定,如果想要动态改变 data 值需要用到 bindinput 方法拿到输入的值,再赋值给data,看到这里有点无语,既然找到了方法就写吧。

考虑到一个页面上可能存在多个input总不能每个都加一个bindinput方法吧,这样太鸡肋的,有没有办法写一个通用的。

wxml:

<input name="姓名" type="text" value="{{formData.title}}" 
data-name="title" bindinput="handleInput" placeholder="请输入" />

<input name="手机号码" type="text" value="{{formData.phone}}" 
data-name="phone" bindinput="handleInput" placeholder="请输入号码" />

<input name="地址" type="text" value="{{formData.address}}"  
data-name="address" bindinput="handleInput" placeholder="请输入" />

js:

data:{
    formData:{
        title:'',
        phone:'',
        address:''
    }
}

这样就可以用data-属性获取我当前需要修改的key,再结合上面动态变量

handleInput(e){
    let valueName = e.target.dataset.name;
    let name = `formData.${valueName}`;
    this.setData({
      [name]:e.detail.value
    })
  },

至此大功告成,虽然代码量没多少,如果不知道的话要花好多时间在这个上面。感谢前辈们的帖子,这里只描述了部分方法,还有很多更高级的用法,地址贴在下方。

参考网址:

https://blog.csdn.net/wuguidian1114/article/details/103293615

https://blog.csdn.net/weixin_47617631/article/details/126312443

https://blog.csdn.net/weixin_64397810/article/details/124218309

http://t.zoukankan.com/sgqwjr-p-9130744.html

https://blog.csdn.net/weixin_44151130/article/details/124649372文章来源地址https://www.toymoban.com/news/detail-805088.html

到了这里,关于微信小程序this.setData给对象&数组动态赋值的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 小程序this.setData修改对象、数组中的值

    在微信小程序的前端开发中,使用this.setData方法修改data中的值,其格式为 this.setData({ ‘参数名1’: 值1,‘参数名2’: 值2)} 注意:如果是简单变量,参数名可以不加引号。 下面提供2种方式对data中的对象、数组中的数据进行修改: 假设原数据为: 方式一:使用[‘字符串’]

    2024年04月25日
    浏览(36)
  • 微信小程序中this.data 和 this.setData

    在微信小程序中,this.data 和 this.setData 是两个用于处理数据的不同方式。 1、this.data:this.data 是一个对象,用于存储小程序页面的数据。当我们需要获取或修改页面的数据时,可以直接访问和操作 this.data 对象。例如,this.data.name 可以获取名为 name 的数据,this.data.name = ‘Jo

    2024年02月03日
    浏览(52)
  • 微信小程序错误-TypeError: this.setData is not a function

    微信小程序在与后台获取数据的时候遇到: TypeError: this.setData is not a function错误。 产生原因: 输出结果能输出,会产生警告,原因是this不能直接在请求的回调函数里写this, 解决方法:     在请求外声明一个变量,接收onload函数的this。  

    2024年02月16日
    浏览(48)
  • 小程序 多层次对象数组的赋值、动态赋值

    对单个属性赋值  动态赋值 field 是wxml上通过data-field传过来的  对单个属性赋值:

    2024年02月15日
    浏览(55)
  • 微信小程序使用setData修改数组中的指定下标的属性值

    因为小程序中分有逻辑层和渲染层等。所以需要用setdata函数,渲染到视图界面。普通的修改属性是通过 this.setData({aa:true}) 的方法设置,但是本人遇到一种情况,需要通过下标区改变数组某一项中的某属性的值,方法如下: 结构: js: 备注:通过 let checkProp = \\\"rightRoomList[\\\" +

    2024年02月15日
    浏览(41)
  • 小程序setData修改数组和对象

    Page({   data: {     arrs:[       { text: \\\'0概率固定\\\', value: 0 },       { text: \\\'1累计固定\\\', value: 1 },       { text: \\\'2概率随机\\\', value: 2 },       { text: \\\'3概率赠送\\\', value: 3 },       { text: \\\'4保夹模式\\\', value: 4 },       { text: \\\'5累计随机\\\', value: 5 },  

    2024年02月09日
    浏览(36)
  • 微信小程序 通过setData 给两个变量设置同一个数组时,为什么修改一个变量,另一个会也被修改?

    在微信小程序中,使用 setData 方法更新数据时,如果给两个变量设置同一个数组,修改其中一个变量的值会导致另一个变量也被修改的原因是,数组是引用类型的数据,在内存中的存储方式是按引用地址存储。 当你将一个数组赋值给两个变量时,实际上两个变量共享同一块内

    2024年02月11日
    浏览(49)
  • 【微信小程序】挂载网络请求到全局this对象

    《工欲善其事,必先利其器》 有一些常用的东西,如 http 请求、弹窗、错误处理等等,如果在每个页面都引用一遍,会增加不必的代码量,我们可以在 app.js 中对 Page 对象进行简单地封装,从而让 Page 的能力更强。 一、封装原生网络请求 request.js : 二、app.js 引入网络请求,

    2024年02月07日
    浏览(42)
  • 微信小程序 - setData

    1、setData  函数用于将数据从逻辑层发送到视图层(异步),同时改变对应的  this.data  的值(同步)。 2、其中  key  可以以数据路径的形式给出,支持改变数组中的某一项或对象的某个属性,如  array[2].message , a.b.c.d ,并且不需要在 this.data 中预先定义。 3、直接修改 t

    2024年02月11日
    浏览(37)
  • 微信小程序数组对象的添加及删除(Vue2)

    数组添加元素的两个方法(都不去重) 1、数组.push(对象) 直接向数组末尾追加新的元素(不会去重) 使用push添加数组时会将整个数组直接加入数组之中 1、数组.concat(对象) 使用concat会将要追加的数据(数组)进行拆分以此追加到数据末尾 追加相同的数据 追加一组数组 3.数

    2024年02月11日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包