setData修改数据

微信小程序提供 setData 方法用于修改 data里的数据

  • 示例1: 点击按钮,修改data里的show值用来控制元素的显示和隐藏
<view class="container">
    <view class="box" wx:if="{{show}}">
      要显示和隐藏的内容
      {{message}}
    </view>

    <button type="primary" bindtap="changeShow">
    {{show?'隐藏':'显示'}}
    </button>
</view>
Page({
    data: {
        message: "hello 小程序",
        show: true
    },
    changeShow(){
        let show = this.data.show
        console.log(show)
        this.setData({
            show: !show
        })
    },
})
  • 示例2: 在输入框中输入内容,改变data里的message属性
  <input class="weui-input" 
  auto-focus 
  bindchange="changeValue"
  placeholder="将会获取焦点"/>
  <text>{{message}}</text>
Page({
    data: {
        message: "hello 小程序",
    },
    changeValue(ev){
        this.setData({
            message: ev.detail.value
        })
    },
})
  • 示例3:边输入内容边改变message的值

      <view class="container">
      <input class="weui-input" 
      auto-focus 
      bindinput="changeValue"
      placeholder="将会获取焦点"/>
      <text></text>
    
      <button bindtap="tapChange">按钮</button>
      </view>
    
      Page({
          data: {
              message: "hello"
          },
          changeValue(ev){
              this.setData({
              message: ev.detail.value
              })
          },
          tapChange(){
              this.setData({
              message: '我是button改过来的'
              })
          },
      })
    

思考: 当我点击按钮的时候,它改变了message的值,但是input里的值是否有改变,没有改变的原因是什么?

简易双向绑定

基础库 2.9.3 开始支持,低版本需做兼容处理。

双向绑定语法

在 WXML 中,普通的属性的绑定是单向的。例如:

<input value="{{value}}" />

如果使用 this.setData({ value: 'leaf' }) 来更新 value ,this.data.value 和输入框的中显示的值都会被更新为 leaf ;但如果用户修改了输入框里的值,却不会同时改变 this.data.value 。

如果需要在用户输入的同时改变 this.data.value ,需要借助简易双向绑定机制。此时,可以在对应项目之前加入 model: 前缀:

<input model:value="{{value}}" />

results matching ""

    No results matching ""