微信小程序实现双向绑定

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

小程序中的简易双向绑定

简易双向绑定

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

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

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

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

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

  1. 只能是一个单一字段的绑定,如:
<input model:value="值为 {{value}}" />
<input model:value="{{ a + b }}" />
  1. 目前,尚不能 data 路径,如:
<input model:value="{{ a.b }}" />

微信小程序实现双向绑定----借助数组

因为微信小程序双向绑定不支持表达式、路径和对象,只支持单一字段的绑定, 所以可以借助列表渲染 wx:for 在上使用 wx:for 控制属性绑定一个数组,即可使用数组中各项的数据渲染。

1.定义数组对象

  data: {
    pagetitle: "添加设备",
    tempFiles: [], //本地临时图片资源
    basePath: config.api.basePath,
    deviceMsg: [
      {
        unique_fields: "", //设备特有属性信息
        name: "", //	设备名称
        device_taglib_list: [], //自定义标签
        img_urls: [], //	安装图片集合
        children: [], //子设备
        parent_id: 0, //父IDs
        installation_position: "",
      },
    ],
 
  },        // 设备基本信息
        typeName: "", //设备类型名字
        building_id: "", //所属建筑
        org_id: "", //所属单位
        type: "", //	设备类型
        imei: "", //imei
        relation: "0", //设备关系

2.借助数组把对象数据渲染到页面

页面代码wxml

<view class="card-content">
     <view class="device-related card-item">
       <text class="child-label require"> 设备关系 </text>
       <view class="child-item">
         <radio-group class="radio-group" bindchange="bindinput" data-index="{{index}}" data-item="{{'relation'}}">
           <label>
             <image wx:if="{{item.relation ==='0'}}" class="img-radio" src="/assets/image/home/device/radio-selected.png" />
             <view wx:else class="radio-null"> </view>
             <radio value="{{'0'}}" checked />
             <view class="label-text"> 无部件 </view>
           </label>
           <label>
             <image wx:if="{{item.relation === '1'}}" class="img-radio" src="/assets/image/home/device/radio-selected.png" />
             <view wx:else class="radio-null"> </view>
             <radio value="{{'1'}}" />
             <view class="label-text"> 有部件 </view>
           </label>
         </radio-group>
       </view>

     </view>
     <view class="device-parent  card-item">
       <navigator url="/pages/home/device/selectDevice/index" class="child-item" hover-class="navigator-hover">
         <text class="child-label"> 父级设备 </text>
         <view class="child-context"></view>
         <image class="img-right" src="/assets/image/common/nav-next-light.png" mode="" />
       </navigator>
     </view>
     <view class="device-name  card-item">
       <view class="child-item">
         <text class="child-label require"> 设备名称 </text>
         <input class="child-context" type="text" placeholder="请输入设备名称" placeholder-class="placeholder" value="{{item.name}}" bindinput="bindinput" data-index="{{index}}" data-item="{{'name'}}" />
       </view>
     </view>

  
     <view class="device-unit  card-item">
       <navigator class="child-item" url="pages/home/device/deviceDetail/index" hover-class="navigator-hover">
         <text class="child-label"> 所属单位 </text>
         <view class="child-context placeholder">
           {{'请选择所属单位'}}
         </view>
         <image class="img-right" src="/assets/image/common/nav-next-light.png" mode="" />
       </navigator>
     </view>

     <view class="device-install-base  card-item">
       <view class="child-item">
         <text class="child-label require"> 安装位置 </text>
         <input class="child-context" placeholder="请输入设备详细位置" placeholder-class="placeholder" bindinput="bindinput" data-index="{{index}}" data-item="{{'installation_position'}}" />
         <image class="img-right-base" src="/assets/image/home/device/device-base-black.png" mode="" />
       </view> 
     </view>

     <view class="device-base-tag  card-item">
       <view class="child-item">
         <text class="child-label"> 点位标记 </text>
         <view class="child-context placeholder">
           {{'请选择标点'}}
         </view>
         <button class="btn-base-tag">标记</button>
       </view>
     </view>
   

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1H1da8Xs-1685354597327)(null)]

3.定义实现双向绑定方法

重点关注图中标红的区域,通过自定义属性给事件函数传参,传入index:当前属性的下标,item:当前绑定的属性名,array:当前绑定的数组名。为不同的dom元素绑定不同的属性名称,便于定位改属性。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-s2H3ovNy-1685354597314)(null)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6j6eBpst-1685354597300)(null)]

这里我们用使用数组的方法先找到下标再通过键名修改属性值,这一步到了我们就完成了一大步啦 。
最后我们通过 this.setData({ [arrayName]: array }); 实现将页面数据同步到逻辑层,就完成了数据的双向绑定了

js代码 文章来源地址https://www.toymoban.com/news/detail-739070.html

 
 
Page({ 
  // 双向绑定
function bindinput(e) {
    let item = e.target.dataset.item; //绑定的属性名
    let index = e.target.dataset.index || 0;
    let arrayName = e.target.dataset.array || deviceMsg; //绑定的数组名
    const array = this.data[arrayName];
    array[index][item] = e.detail.value; 
    this.setData({ [arrayName]: array });
  },
  
 
});

到了这里,关于微信小程序实现双向绑定的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 微信小程序学习实录1(wxml文档、引入weui、双向数据绑定、提交表单到后端)

    wx:for 在组件上使用 wx:for 控制属性绑定一个数组,即可使用数组中各项的数据重复渲染该组件。 默认数组的当前项的下标变量名默认为 index,数组当前项的变量名默认为 item 使用 wx:for-item 可以指定数组当前元素的变量名, 使用 wx:for-index 可以指定数组当前下标的变量名: 在

    2024年02月02日
    浏览(69)
  • 微信小程序的双向数据绑定和vue的哪里不一样?下拉刷新的方式代码示例

    小程序的双向数据绑定和Vue的双向数据绑定有一些不同之处。 实现方式:小程序的双向数据绑定采用的是数据劫持的方式,通过重写对象的get和set方法来监听数据的变化和更新视图。而Vue使用的是响应式数据的方式,通过使用Object.defineProperty()方法来劫持对象的属性。 语法差

    2024年02月22日
    浏览(48)
  • 微信小程序复杂对象的双向绑定(附代码可直接使用)

    最近在小程序的开发过程中,遇到一个需求,需要绑定一个list到自定义表单组件,组件根据列表渲染表单,表单的值需要和父组件双向绑定。 但是这里却出现了问题,本人先使用vue的方式将list直接做整体绑定。 结果在子组件内部使用setData对list的属性做出变更时直接报错栈

    2024年02月09日
    浏览(68)
  • uniapp 微信小程序:v-model双向绑定问题(自定义 props 名无效)

    VUE中父子组件传递数据的基本套路: 父传子 props 子传父 this.$emit(\\\'事件名\\\', \\\'数据\\\'); 使用 sync 修饰符,实现 支持同步数据 因为用的是 uniapp 开发小程序,所以要考虑到兼容性问题,不要把自己当正经VUE2。 小程序虽然支持 v-model 指令,但不支持 model 选项。 所以要么子组件中声

    2024年02月15日
    浏览(46)
  • 【微信小程序】数据绑定

    ✅作者简介:CSDN内容合伙人、阿里云专家博主、51CTO专家博主🏆 📃个人主页:hacker707的csdn博客 🔥系列专栏:微信小程序🥇 💬个人格言:不断的翻越一座又一座的高山,那样的人生才是我想要的。这一马平川,一眼见底的活,我不想要,我的人生,我自己书写,余生很长,

    2024年02月09日
    浏览(42)
  • 微信小程序——数据绑定

    在微信小程序中,可以通过以下代码实现数据绑定: 在WXML中,使用双大括号{{}}绑定数据,将数据渲染到对应的视图中。 在JS中,定义一个数据对象,并将其绑定到页面的data属性上。 当数据对象发生变化时,小程序会自动更新相关的视图。 可以通过setData方法在JS中更新数据

    2024年02月07日
    浏览(38)
  • 微信小程序数据绑定和事件触发

    数据绑定和修改 微信小程序数据绑定是指将数据和视图进行关联,当数据发生变化时,视图也会相应地发生变化。微信小程序数据绑定主要有以下几种方式: 双向绑定:双向绑定是指数据和视图之间的双向关联,当数据发生变化时,视图也会相应地发生变化,反之亦然。在

    2024年02月10日
    浏览(64)
  • 微信小程序实现双向滑动快捷选择价格(价格区间)

    实现样子 提示:效果可以自己自定义,自己将文字样式更改为自己项目属性即可 实现达到方法 1、左边为最低价,右边为最高价格,可以拖动左边最低价选择价格。拖动右边为最高价。 2、当两个价格重合时,继续拖动,向左边,左边最低价会跟着变低,直到为边端,反之右

    2024年02月12日
    浏览(47)
  • 微信小程序学习之数据绑定,事件绑定,事件传参与数据同步的学习记录

    数据绑定的基本原则:在data中定义数据,在wxml中使用数据 1.1. 在data中定义数据 在data中定义数据,找到页面对应的.js文件,然后把数据定义到data中即可。 pages/list/list.js 1.2. 在wxml中渲染数据 (mustache语法) mustache语法,插值表达式 将data中的数据绑定到页面中渲染,使用mu

    2024年02月13日
    浏览(52)
  • 微信小程序自定义slider组件实现双向滑块

    实现效果: zy-slider标签是封装的自定义组件 我放到了资源这里地址:https://download.csdn.net/download/Axiaoheng_/86399342?spm=1001.2014.3001.5503 wxml引入 参数 说明 min Number/String slider 最小值 max Number/String slider 最大值 minValue Number/String slider 左边滑块初始位置 maxValue Number/String slider 右边滑块

    2024年02月10日
    浏览(33)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包