微信小程序使用this.setData()遇到的问题及解决方案详解

 更新时间:2022年08月23日 08:55:26   作者:一只程序龟  
this.setData估计是小程序中最经常用到的一个方法,但是要注意其实他是有限制的,忽略这些限制的话,会导致数据无法更新,下面这篇文章主要给大家介绍了关于微信小程序使用this.setData()遇到的问题及解决方案,需要的朋友可以参考下

前言

最近在学习小程序时遇到了关于setData()的不少问题,在这里做一些总结和记录。

使用方法总结

在更改setData下的变量时,直接写key名就可以了的,不用写this.data.属性,如下所示

Page({
    data:{
        value:'hello'
    }
    this.setData({
    value:'修改的值'
    //错误写法:this.data.value:''
    //注意key的名称一定是data中的名称
})
})

setData的第二个参数是一个回调函数,在页面渲染完后执行。

this.setData({
      value:'hello'
    }, () => { //第二个参数
       console.log("在页面渲染完value后再执行");
    })
​

利用setData()修改数组对象下的一个属性

方法一:使用双引号或单引号

Page({
    data:{   
          List: [{
            id:0,
            name:'test01'
        }]
    }
})
this.setData({
   "List.id": 6
})

方法二:使用中扩号

this.setData({
   ['List.id']: 2
})

如果数组下有多个对象,我们要如何修改其中的一个属性呢?

wxml部分代码:

//wxml
<block wx:for="{{List}}" wx:key="index" id="{{index}}">
<view class="message">
<view>{{item.id}}、</view>
<view>{{item.name}}</view>
</view>
​
<button bindtap="change" id="{{item.id}}">点我修改数据中的name</button>
</block>

错误写法:

//index.js
Page({
 data:{
        List:
        [{
            id:0,
            name:'test01'
        },
        {
            id:1,
            name:'test02'
        }],
    },
change(event){
    let index = event.currentTarget.id;
    this.setData({
    List[index].name:'newName'
})
}
})

这样写会报错:

Only digits(0-9) can be put inside [] in the path string

正确写法:

change(event){
 let index = event.currentTarget.id;
    this.setData({
    [`List[${index}].name`]:'newName'
})
}

简易双向绑定

如果需要在用户输入时改变this.data.value,需要借助简易双向绑定机制

在对应项目前加入model: 前缀即可

使用时控制台会有警告:Do not have handler in component

原因是没有绑定对应的事件,在不影响结果的情况下可以无视报错或者加一个空函数

或者使用setData()自己触发绑定更新

<input type="text"  model:value="{{value1}}" bindinput="valueChange"/> 
<input type="text"  value="{{value2}}" bindinput="inputChange"/> 
data:{
     value1:'',
     value2:''
}
//绑定model:并不出现警告的方法
valueChange(){
     console.log(this.data.value);
 }
//利用setData()更新
inputChange(e){
    let changeValue= e.detail.value;
    this.setData({
    value:changeValue
})
    console.log(this.data.value);
    },

在自定义组件中也能使用双向绑定

注意点:用于双向绑定的表达式有如下限制:

1、只能是一个单一字段的绑定,如下都是非法的;

<input model:value="值为 {{value}}" />
<input model:value="{{ a + b }}" />

2、目前,尚不能支持data路径的表达式,如

<input model:value="{{ a.b }}" />

参考了一些帖子和官方文档,如有错误或更好的方案,欢迎指出和交流!

总结

到此这篇关于微信小程序使用this.setData()遇到的问题及解决方案的文章就介绍到这了,更多相关小程序使用this.setData()问题解决内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • JS函数节流和函数防抖问题分析

    JS函数节流和函数防抖问题分析

    这篇文章主要介绍了JS函数节流和函数防抖问题分析,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-12-12
  • JS 实现获取打开一个界面中输入的值

    JS 实现获取打开一个界面中输入的值

    JS 实现获取打开一个界面中输入的值,需要的朋友可以参考一下
    2013-03-03
  • 利用babel将es6语法转es5的简单示例

    利用babel将es6语法转es5的简单示例

    Babel是一个广泛使用的转码器,babel可以将ES6代码完美地转换为ES5代码,所以下面这篇文章就来给大家详细介绍了关于利用babel将es6语法转es5的相关资料,文章通过示例介绍的非常详细,需要的朋友可以参考下。
    2017-12-12
  • 详解JavaScript中的4种类型识别方法

    详解JavaScript中的4种类型识别方法

    JavaScript中检测对象类型的运算符有:typeof、instanceof,还有对象的constructor属性: 1) typeof 运算符 typeof 是一元运算符,返回结果是一个说明运算数类型的字符串。下面由小编给大家分享JavaScript中的4种类型识别方法,需要的朋友可以参考下本文
    2015-09-09
  • 通过webpack引入第三方库的方法

    通过webpack引入第三方库的方法

    这篇文章主要介绍了通过webpack引入第三方库的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • JS使用正则表达式实现常用的表单验证功能分析

    JS使用正则表达式实现常用的表单验证功能分析

    这篇文章主要介绍了JS使用正则表达式实现常用的表单验证功能,结合实例形式分析了JS基于正则表达式的表单验证功能原理、实现技巧与操作注意事项,需要的朋友可以参考下
    2020-04-04
  • ztree获取当前选中节点子节点id集合的方法

    ztree获取当前选中节点子节点id集合的方法

    这篇文章主要介绍了ztree获取当前选中节点子节点id集合的方法,实例分析了ztree的方法transformToArray使用技巧,需要的朋友可以参考下
    2015-02-02
  • 详解JavaScript中的数据类型转换

    详解JavaScript中的数据类型转换

    在JavaScript中,数据类型的转换是一项常见的任务,不同的数据类型之间需要相互转换以满足程序的需求,本篇博客将深入探讨JavaScript中的数据类型转换,包括隐式转换和显式转换的概念、转换规则和常见的数据类型转换示例
    2023-06-06
  • JavaScript 事件入门知识

    JavaScript 事件入门知识

    这篇文章主要介绍了JavaScript 事件入门知识,需要的朋友可以参考下
    2015-04-04
  • webpack中多文件打包配置的详细流程

    webpack中多文件打包配置的详细流程

    这篇文章主要介绍了webpack中多文件打包配置的详细流程,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2023-11-11

最新评论