【微信小程序】数据绑定

news2025/7/22 0:17:10

在这里插入图片描述

🏆今日学习目标:第十一期——数据绑定
😃创作者:颜颜yan_
✨个人主页:颜颜yan_的个人主页
⏰预计时间:25分钟
🎉专栏系列:我的第一个微信小程序


文章目录

  • 前言
  • 实现数据绑定
  • 初始化数据绑定
    • post.js
    • post.wxml
    • 初始化数据的绑定过程
    • 查看数据绑定对象
      • 将页面的数据以json的形式呈现
    • 绑定复杂对象
  • setData方法实现数据绑定
      • post.js
    • post.wxml
  • 总结


前言

哈喽大家好,本期是微信小程序专栏第十一期,本期主要是通过将post.wxml页面的数据移植到post.js中来学习数据绑定。
注意:每期内容是连载呢,建议大家可以看看往期内容,更好理解噢~


实现数据绑定

如何让data中的数据在页面中显示呢,小程序采用数据绑定的机制来做数据的初始化和更新。

小程序的脚本逻辑是运行在JSCore中,JSCore是一个没有DOM的环境,它完全抛弃了DOM结构,我们只能使用数据绑定来做数据的相关操作。
不同于AngularJS的双向数据绑定,小程序仅实现了从逻辑层传递到渲染层的数据绑定,反之则不可以。
小程序使用Page方法参数里的data变量作为数据绑定的桥梁,直接写在data里的数据,被称为数据绑定的初始化数据。

小程序的数据绑定方式有以下两种,接下来我们来看看吧~

初始化数据绑定

初始化数据绑定通常将这些数据直接写在Page方法参数的data对象下面。

post.js

如下,我们先在post.js中添加一个临时变量作为测试数据,包括以下内容。

    /**
     * 页面的初始数据
     */
    data: {
        date:"Nov 9 2022",
        title:"那个不为人知的故事",
        postImg:"/images/post/unknow-story.jpg",
        avatar:"/images/avatar/avatar-5.png",
        content:"超人气作者Twentine(无量渡口)经典之作,直击心底深处的柔软。这是杨昭和陈铭生的故事,这是卧底缉毒警察的故事。 你始终不曾离去,你永远在我心底。",
        readingNum:10989,
        collectionNum:1867,
        commentNum:999
    },

post.wxml

接下来,对post.wxml文件做一些改动,就可以让wxml能够“接收”这些初始化数据。
小程序使用Mustache语法双大括号{{}}在wxml组件里进行数据绑定。

    <!-- 文章列表 -->
    <view class="post-container">
        <view class="post-author-date">
            <image src="{{avatar}}"></image>
            <text>{{date}}</text>
        </view>
        <text class="post-title">{{title}}</text>
            <image class="post-image" src="{{postImg}}" mode="aspectFit"></image>
            <text class="post-content">{{content}}</text>
            <!-- 收藏 浏览 评价-->
            <view class="post-like">
                <image src="/images/icon/wx_app_collect.png"></image>
                <text>{{readingNum}}</text>
                <image src="/images/icon/wx_app_view.png"></image>
                <text>{{collectionNum}}</text>
                <image src="/images/icon/wx_app_message.png"></image>
                <text>{{commentNum}}</text>
            </view>
    </view>

从以上代码我们可以看到双大括号{{}}中,写入了一些变量名。变量名称同js文件里data对象的属性名称是相同的。所以,数据绑定只需要将data对象的属性名填入到双大括号{{}}中即可。MINA框架会自动在运行时用data数据替换这些{{}}

如下,文章的数据正常显示出来了,这说明数据绑定成功了。

在这里插入图片描述

初始化数据的绑定过程

接下来,我们通过页面生命周期图解来了解初始化数据的绑定过程~

在这里插入图片描述
当页面执行了一个onShow函数后,逻辑层会收到一个通知(Notify);随后逻辑层会将data对象以json的形式发送到View视图层(Send Initial Data),视图层接收初始化数据后,开始渲染并显示初始化数据(First Render),最终将数据呈现在开发者的眼前。
注意:如果数据绑定是作用在组件的属性中,则一定要在{{}}外边加上双引号,否则小程序会报错。如果是内容型的数据绑定,则不需要加双引号。

查看数据绑定对象

调试——AppData可以查看数据情况。

AppData面板对于调试和理解数据绑定有非常重要的作用,所以,当我们遇到数据绑定相关的问题时,就可以打开AppData面板来查看具体的数据绑定情况。
AppData下的数据以页面为组织单位,现在只在post页面做了数据绑定,所以AppData里面只有这一个页面的数据。如果同时绑定多个页面,则会显示多个页面的数据。
在这里插入图片描述

将页面的数据以json的形式呈现

如下,点击Tree,切换为Code,就可以将页面的数据以json的形式呈现了。
在这里插入图片描述
在这里插入图片描述
注意:json格式的数据,非常利于我们快速复制这些数据。

绑定复杂对象

在上面的代码中,data对象是最简单的js对象,它的属性值都是文本与数字,接下来,我们增加对象和数组看看,如下👇

 /**
     * 页面的初始数据
     */
    data: {
        object:{
            date:"Nov 9 2022",
        },
        title:"那个不为人知的故事",
        postImg:"/images/post/unknow-story.jpg",
        avatar:"/images/avatar/avatar-5.png",
        content:"超人气作者Twentine(无量渡口)经典之作,直击心底深处的柔软。这是杨昭和陈铭生的故事,这是卧底缉毒警察的故事。 你始终不曾离去,你永远在我心底。",
        readingNum:10989,
        collectionNum:{
            array:[1867]
        },
        commentNum:999
    },

此时,相应的wxml页面里也需要作出调整,如下👇
在这里插入图片描述

setData方法实现数据绑定

这种方式也可以理解为数据更新,这样的数据更新将引起页面的Rerender(重新渲染。)

setData方法位于Page对象的原型链上:Page.prototype.setData。大多数情况下,我们使用this.setData的方式来调用这个方法。setDate的参数接受一个对象以Key和Value的形式将this.data中的Key对应的值设置成value。
注意:

  1. setData会改变this.data变量里相同的Key的值。
  2. setData执行后会通知逻辑层执行Rerender,并立刻重新渲染视图。

如下,在data下面添加一个onLoad函数,并使用setData方法👇
在这里插入图片描述
运行后发现,文章标题由设定的“那个不为人知的故事”更改成了“那个故事”,其他的数据没有改变,是因为我们使用this.setData只更新了title这一个数据,没有更新其他的数据。
在这里插入图片描述
注意:setData参数中的key是非常灵活的,以下是key可能出现的形式。

key使用字符串表示

在这里插入图片描述

key使用数组表示

在这里插入图片描述
在这里插入图片描述

key使用object对象表示

在这里插入图片描述
在这里插入图片描述
用this.Data所绑定或者更新的数据并不要求在this.data中预先定义
如下,我们来看看这种方法的代码吧~

post.js

 /**
     * 页面的初始数据
     */
    data: { 
    },

    /**
     * 生命周期函数--监听页面加载
     * option为页面跳转所带来的参数
     */
    onLoad:function(options) {
        var StoryData = {
            object:{
                date:"Nov 9 2022",
            },
            title:"那个不为人知的故事",
            postImg:"/images/post/unknow-story.jpg",
            avatar:"/images/avatar/avatar-5.png",
            content:"超人气作者Twentine(无量渡口)经典之作,直击心底深处的柔软。这是杨昭和陈铭生的故事,这是卧底缉毒警察的故事。 你始终不曾离去,你永远在我心底。",
            readingNum:10989,
            collectionNum:{
                array:[1867]
            },
            commentNum:999
        }
        this.setData({
            postData: StoryData
        })
    },

相应的wxml也要做出调整噢~

post.wxml

 <!-- 文章列表 -->
    <view class="post-container">
        <view class="post-author-date">
            <image src="{{postData.avatar}}"></image>
            <text>{{postData.object.date}}</text>
        </view>
        <text class="post-title">{{postData.title}}</text>
            <image class="post-image" src="{{postData.postImg}}" mode="aspectFit"></image>
            <text class="post-content">{{postData.content}}</text>
            <!-- 收藏 浏览 评价-->
            <view class="post-like">
                <image src="/images/icon/wx_app_collect.png"></image>
                <text>{{postData.readingNum}}</text>
                <image src="/images/icon/wx_app_view.png"></image>
                <text>{{postData.collectionNum.array[0]}}</text>
                <image src="/images/icon/wx_app_message.png"></image>
                <text>{{postData.commentNum}}</text>
            </view>
    </view>

总结

以上就是今天的学习内容啦~
如果有兴趣的话可以订阅专栏,持续更新呢~
咱们下期再见~
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/17066.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[附源码]java毕业设计农村留守儿童帮扶系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Flink cdc 2.3.0 日前发布,支持众多新特性

新连接器 2.3.0 新增了 DB2 CDC 连接器 增量快照迎来新的连接器成员 2.3.0 版本MongoDB CDC&#xff0c;Oracle CDC 两大连接器均支持了增量快照&#xff0c;实现无锁读取并发读取断点续传 优化 2.3.0 版本 MySQL CDC 连接器性能和稳定性大幅提升 Flink 支持 2.3.0 版本…

11月19日绿健简报,星期六,农历十月廿六

11月19日绿健简报&#xff0c;星期六&#xff0c;农历十月廿六1. 文旅部&#xff1a;不随意关停娱乐场所&#xff0c;无疫情发生地原则上不限制大型经营性演出观众人数。2. 人社部等五部门&#xff1a;企业不得以年龄为由“一刀切”清退大龄农民工。3. 英国政府以国家安全为由&…

Java 枚举(Enum)使用

文章目录枚举引入enum关键字实现枚举enum关键字实现枚举注意事项enum常用方法一览表enum课堂练习enum实现接口枚举引入 创建Season类, 实例化春夏秋冬四个实例 Season对象有如下特点 1.季节的值是有限的几个值(spring, summer, autumn, winter) 2.只读&#xff0c;不需要修改…

开始数据治理时三个常见的陷阱和解决方法

当我们与客户合作帮助他们提高数据管理能力时,大多数部门都同意更好的数据治理将有助于解决他们的数据问题。然而,我们发现数据治理很少是优先事项,而且往往被搁置一旁,去支持更紧迫的业务工作。这有点像使用牙线——当你在牙医诊所时很容易获得动力,但当你回到家时很难保…

GC垃圾回收相关算法(宋红康JVM学习笔记)

什么是垃圾&#xff1f; 垃圾收集机制是Java的招牌能力&#xff0c;极大地提高了开发效率。如今&#xff0c;垃圾收集几乎成为现代语言的标配&#xff0c;即使经过如此长时间的发展&#xff0c;Java的垃圾收集机制仍然在不断的演进中&#xff0c;不同大小的设备、不同特征的应用…

[附源码]java毕业设计辽宁科技大学疫苗接种管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

果蔬同城配送小程序有什么作用_分享果蔬同城配送小程序的作用

1、蔬菜生鲜产品展示&#xff1a;用户打开买菜必备软件&#xff0c;就能查看琳琅满目的新鲜水果、蔬菜、肉类、零食等产品&#xff0c;为用户展示更多信息&#xff0c;提升用户下单率。经常更新商品的照片、视频&#xff0c;让客户可以在线浏览和挑选&#xff0c;足不出户就能买…

二叉树的最大深度(C++两种思路递归和层序)超详解小白入

原题链接–>戳这里直达 二叉树的最大深度深度搜索&#xff08;递归&#xff09;递归思想和详解C代码代码效率广度搜索&#xff08;层序查找&#xff09;层序查找的思路C代码代码效率总结深度搜索&#xff08;递归&#xff09; 最近新学习了树形结构&#xff0c;上课的时候听…

MATLAB算法实战应用案例精讲-【数模应用】随机梯度下降法(SGD)

前言 随机梯度下降算法(Stochastic gradient descent, SGD)源于1951年Robbins和Monro[6]提出的随机逼近, 最初应用于模式识别和神经网络. 这种方法在迭代过程中随机选择一个或几个样本的梯度来替代总体梯度, 从而大大降低了计算复杂度. 1958年Rosenblatt等研制出的感知机采用了…

JAVA开发(Redis使用缺陷场景)

常见的redis使用缺陷场景主要有3个&#xff0c;分别是缓存穿透&#xff0c;缓存击穿&#xff0c;缓存雪崩。 穿透&#xff0c;&#xff08;关键词&#xff0c;缓存中没有的&#xff0c;数据也没有&#xff09; 击穿&#xff08;大量同时请求过期的key&#xff09; 雪崩&…

多目标优化问题入门理论

0 前言 多目标优化在推荐系统、物流配送、路径规划等中有广泛的应用 一些多目标优化算法主要就是求解问题的 Pareto 前沿或者近似前沿。从目标空间来看&#xff0c;就是他的边界了。 1. 优化问题 1.1 无约束的单目标优化问题 minxf(x),x∈RN(1)min_x \quad f(x), x \in R^N…

解决jupyter TOC勾选了但不显示的问题

解决jupyter TOC勾选了但不显示的问题 有时候TOC&#xff08;Table of content2&#xff09;反应很慢&#xff0c;或者勾选了根本就不显示。或者隔三岔五nbextension消失&#xff0c;按以下步骤解决问题&#xff1a; #mermaid-svg-rbxou4Xusp7FoS9q {font-family:"trebuc…

ArcGIS pro底图大全

ArcGIS pro底图大全 Mid-Century Street World Topographic Map Navigation Map Street Night Terrain with label Oceans National graphic style map Modern antique 668753925730)] Modern antique

CAD中如何绑定外部参照和revit中链接CAD功能

一、CAD中如何绑定外部参照 首先我们要了解什么叫外部参照外部参照是指将一副图以参照的形式引用到另外一个或多个图形文件中&#xff0c;外部参照的每次改动后的结果都会及时的反映在最后一次被参照的图形中&#xff0c;另外使用外部参照还可以有效的减少图形的容量&#xff0…

Mockito的@Mock与@MockBean

在上文的 https://blog.csdn.net/dlf123321/article/details/127930378 里 大家初步会用mockito了 但是马上出现了一个问题。 package com.example.demo.controller;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.example.demo.entity.Per…

【算法】数组之二分查找移除元素

目录 1、数组理论基础 2、二分查找 2.1 区间左闭右闭写法 2.2 区间左闭右开写法 3、移除元素 3.1 暴力解法 3.2 双指针&#xff08;快慢指针&#xff09;法 1、数组理论基础 参考以前的博客&#xff1a;http://t.csdn.cn/HAVSF 2、二分查找 力扣https://leetcode.cn/p…

Denodo通过重要任命新增执行团队成员:Daniel Lender担任首席财务官,Stephen Welles担任首席法务官

韩国Pulmuone选择Aera Decision Cloud™来提升服务&#xff0c;降低成本&#xff0c;并支持可持续性 决策智能化公司Aera Technology今日宣布与韩国领先的生鲜食品公司、全球排名居首的豆腐生产商Pulmuone Co. Ltd.合作&#xff0c;帮助这家全球领军企业实现供应链决策智能化。…

数据结构之栈和队列

目录 1.栈的概念2、栈的实现 1、队列的概念2、队列的实现 今天介绍的是栈和队列。 先说栈吧。 1.栈的概念 栈也是线性表的一种&#xff0c;不过他较为特殊。他只能在一边进行数据的出入。也就是说晚进的数据先出去。进行数据进出的一端叫做栈顶&#xff0c;另一端叫做栈底…

从ReentrantReadWriteLock开始的独占锁与共享锁的源码分析

FBI WARNING&#xff08;bushi&#xff09; 当涉及sync调用时&#xff0c;并不会分析尝试获取和释放之后的后继逻辑&#xff0c;因为这个逻辑是由AQS类实现的。请看姊妹篇之并发入门组件AQS源码解析。 开始的开始是一个demo 以下的代码&#xff0c;会将独占锁持有5分钟&…