zoukankan      html  css  js  c++  java
  • 微信小程序——动态修改页面数据(和样式)及参数传递

    1.1.1动态修改页面数据

    在小程序中我们经常要动态渲染数据,对于新手而言我们常常遇到修改的数据在控制台显示和页面显示不一致,因为我们用“=”修改数据的,这种是可以修改,但无法改变页面的状态的,还会造成数据不一致,代码如下:

    data: {
        array: [{ text: '数组' }]
      }
    
    onLoad:function(){
      this.data.array[0].text=1;
      console.log(this.data.array[0].text);
    }

    修改代码:

    onLoad:function(){
        // this.data.array[0].text=1;
        this.setData({
          'array[0].text': '1'
        })
        console.log(this.data.array[0].text);
      }

    1.2.1参数传递及修改样式

    微信小程序的事件绑定中,我们常常需要传递参数及动态修改元素的样式,但微信小程序不支持jQuery和DOM操作,即不能用这两种方法修改样式:

    1、$("$id").css("color","red");

    2、document.getElementById("id").style.color="red";

    虽然微信小程序都不支持JQ和DOM操作,但有另外一套方法;下面我将实现点击事件中传参并修改元素的样式,代码如下:

    <!-- 循环 -->
    <view wx:for="{{isChecked}}" wx:key="index">
      <checkbox checked="{{item}}"></checkbox>
    </view>
    
    <!-- 循环 -->
    <view wx:for="{{isChecked}}" wx:key="index">
      <!-- 先绑定click函数,通过自定义的属性data-id传参给click函数 -->
      <view class="vf {{item==true?'':'vf-active'}}" bindtap="click" data-id="{{index}}">{{index+1}}</view>
    </view>

    这里写了两个样式,点击之后“vf-active”的样式才显示出来

    checkbox{
      float: left;
      padding: 25rpx;
    }
    .vf{
      background: #666;
      color: #fff;
      height: 60rpx;
      width: 60rpx;
      float: left;
      margin: 30rpx;
      text-align: center;
      line-height: 60rpx;
      border-radius:10rpx; 
    }
    .vf-active{
      background: #07c160;
    }

     

    这里通过e.target.dataset动态获取参数(也可以使用e.currentTarget.dataset,效果一样)

    Page({
      data: {
        isChecked: [true, true, true, true, true, true, true, true, true, true, true, true, true, true]
      },
      // 动态修改数据
      click: function (e) {
        console.log(e.target.dataset.id);
        var id = e.target.dataset.id
        var str = "isChecked[" + id + "]"//重点在这里,组合出一个字符串
        this.setData({
          [str]: false//用中括号把str括起来即可
        })
      },
      onLoad:function(){
    
      }
    })

     效果如下:

     

     

    1.3.1使用setData修改数组或对象

    前面已经讲过要想动态修改数据就必须使用setData,数组和对象也一样,但新手使用setData就容易遇到问题了:

     这样修改直接报红

    在修改数组和对象的时候就直接将要修改的参数名写成对应字符串就可以了,然后使用[]将字符串括起来,代码如下:

    var str = "isChecked[" + id + "]"//重点在这里,组合出一个字符串
    this.setData({
       [str]: false//用中括号把str括起来即可
    })

    修改对象也一样:

    var ifo = "info[" + 0 + "].data"
    this.setData({
        [ifo]:"这是修改后的"
    })

    总结:

    1、直接用“=”赋值,这种是可以修改,但无法改变页面的状态的,还会造成数据不一致

    2、this.setData,setData 函数用于将数据从逻辑层发送到视图层(异步),同时改变对应的 this.data 的值(同步)

    3、微信小程序不支持jQuery和DOM操作修改样式,但可以先写两套样式然后使用三元运算符

    4、e.currentTarget.dataset和e.target.dataset都可以获取数据效果一样,除非遇到了事件冒泡,点击查看区别

  • 相关阅读:
    工业4G DTU是什么和普通DTU有什么不同
    NB-IOT基站的优势和特点
    rs485通讯模块有什么作用
    串口服务器的具体做用
    4G DTU是什么 可以应用于哪些行业?
    关于linux文件出现属性显示?????????? ? ?问题的一些解决方法
    log4j.properties配置与将异常输出到Log日志文件实例
    将字符串向hdfs中写入,出现中文乱码!
    impala操作hase、hive
    Kudu基本操作及概念
  • 原文地址:https://www.cnblogs.com/bushui/p/11595281.html
Copyright © 2011-2022 走看看