Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【微信小程序】数据绑定

【微信小程序】数据绑定

作者头像
颜颜yan_
发布于 2022-12-01 11:42:21
发布于 2022-12-01 11:42:21
1.8K00
代码可运行
举报
运行总次数:0
代码可运行

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


文章目录


前言

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


实现数据绑定

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

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

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

初始化数据绑定

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

post.js

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    /**
     * 页面的初始数据
     */
    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组件里进行数据绑定。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    <!-- 文章列表 -->
    <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对象,它的属性值都是文本与数字,接下来,我们增加对象和数组看看,如下👇

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 /**
     * 页面的初始数据
     */
    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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 /**
     * 页面的初始数据
     */
    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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 <!-- 文章列表 -->
    <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>

总结

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-11-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【微信小程序】列表渲染wx:for
哈喽大家好,本期是微信小程序专栏第十二期,本期我们将学习列表渲染wx:for。 注意:每期内容是连载呢,建议大家可以看看往期内容,更好理解噢~
颜颜yan_
2022/12/01
1.1K0
【微信小程序】列表渲染wx:for
WeChat 文章列表页面(二)
本次的系列博文的知识点讲解和代码,主要是来自于 七月老师 的书籍《微信小程序开发:入门与实践》,由个人总结并编写,关于更多微信小程序开发中的各项技能,以及常见问题的解决方案,还请大家购买书籍进行学习实践,该系列博文的发布已得到七月老师的授权许可
Nian糕
2018/08/21
1.2K0
WeChat 文章列表页面(二)
【微信小程序】冒泡事件与非冒泡事件、将文章数据从业务中分离、wxml的模块化
哈喽大家好,本期是微信小程序专栏第十四期。上期我们实现了从welcome页面跳转到page页面,本期我们先对上期内容进行一个补充知识点,也就是冒泡事件与非冒泡事件的定义。本期主要实现的功能是将page.js中的文章数据分离到一个单独的js中,即将文章数据从业务中分离,通过这一功能的实现学习wxml的模块与模块化等知识点。 注意:每期内容是连载呢,建议大家可以看看往期内容,更好理解噢~
颜颜yan_
2022/12/01
6970
【微信小程序】冒泡事件与非冒泡事件、将文章数据从业务中分离、wxml的模块化
【微信小程序】收藏功能的实现(条件渲染、交互反馈)
哈喽大家好,本期是微信小程序专栏第十九期。本期主要内容收藏功能的实现(条件渲染、交互反馈)。 每期内容是连载呢,建议大家可以看看往期内容,更好理解噢~
颜颜yan_
2023/02/02
2.1K1
【微信小程序】收藏功能的实现(条件渲染、交互反馈)
WeChat 模块、模板与缓存
本次的系列博文的知识点讲解和代码,主要是来自于 七月老师 的书籍《微信小程序开发:入门与实践》,由个人总结并编写,关于更多微信小程序开发中的各项技能,以及常见问题的解决方案,还请大家购买书籍进行学习实践,该系列博文的发布已得到七月老师的授权许可
Nian糕
2018/08/21
1.4K0
WeChat 模块、模板与缓存
微信小程序实战--集阅读与电影于一体的小程序项目(一)
真正的数据肯定不可能像上面那样写在wxml文件里面,而是从服务器加载的数据,下面模拟从服务器加载数据。
zhang_derek
2018/08/30
1.2K0
微信小程序实战--集阅读与电影于一体的小程序项目(一)
【微信小程序】vertical属性、文章列表
哈喽大家好,本期是微信小程序专栏第八期,本期的主要内容是以vertical属性为例了解Boolean值的一个小“陷阱”、文章列表的制作。 注意:每期内容是连载呢,建议大家可以看看往期内容,更好理解噢~
颜颜yan_
2022/12/01
7220
【微信小程序】vertical属性、文章列表
微信小程序实战–集阅读与电影于一体的小程序项目(二)
9.文章列表页跳转到文章详情页 给每篇文章添加个postId posts-data.js var local_database = [{ date: "2018/8/16", title: "荷塘月色", imgSrc: '/images/post/sls.JPG', content: '这几天心里颇不宁静。今晚在院子里坐着乘凉,忽然想起日日走过的荷塘,在这满月的光里,总该另有一番样子吧。', reading: "100", collection: '50', avatar: '
zhang_derek
2018/08/30
6660
微信小程序实战–集阅读与电影于一体的小程序项目(二)
小程序的模板化编程
之前编写的新闻列表页面中,我们把示例数据都放在了js文件中,但实际上数据是不应该写在js文件中的,所以我们得把这些数据分离到一个单独的数据文件中。然后post.js文件就加载这个数据文件中的数据即可,这样也可以模拟一下加载服务器数据的过程。
端碗吹水
2020/09/23
1.4K0
小程序的模板化编程
微信小程序实战–集阅读与电影于一体的小程序项目(三)
在文章详情页,点击播放音乐后,然后返回到文章列表页,再进到详情页,发现播放按钮是暂停状态,这是因为应用程序存在生命周期,下面就解决这个问题。
zhang_derek
2018/08/30
9800
微信小程序实战–集阅读与电影于一体的小程序项目(三)
第三个页面:构建新闻详情页面
在编写从文章列表跳转到新闻详情页的代码之前,先来修改一下之前的页面,之前我们编写了两个模板文件,但是还有两个细节没有完善好,一个是post.wxss中的.post-container样式没有移植到模板文件中,另一个是wxml模板文件中每句数据绑定代码都需要通过item这个子元素去调用属性,显得有点麻烦,我们可以使用一种语法去解决这个问题。
端碗吹水
2020/09/23
1.9K0
第三个页面:构建新闻详情页面
编写第二个页面:新闻阅读列表页面
关于Swiper组件的官方描述文档: https://mp.weixin.qq.com/debug/wxadoc/dev/component/swiper.html
端碗吹水
2020/09/23
2.2K0
编写第二个页面:新闻阅读列表页面
WeChat 文章列表页面(一)
本次的系列博文的知识点讲解和代码,主要是来自于 七月老师 的书籍《微信小程序开发:入门与实践》,由个人总结并编写,关于更多微信小程序开发中的各项技能,以及常见问题的解决方案,还请大家购买书籍进行学习实践,该系列博文的发布已得到七月老师的授权许可
Nian糕
2018/08/21
8690
WeChat 文章列表页面(一)
微信小程序-开发入门(一)
微信小程序已经火了一段时间了,之前一直也在关注,就这半年的发展来看,相对原生APP大部分公司还是不愿意将主营业务放到微信平台上,以免受制于腾讯,不过就小程序的应用场景(用完即走和二维码分发等)还是很值得我们学习的,技术上面如果了解React的话,会发现他们在组件化上面有很多雷同之处。说白了,小程序就是基于微信平台的H5轻应用,微信将系统底层功能(设备、位置、媒体、文件等)和微信自身功能(登录、支付、分享等)封装成相应API供小程序调用。
全栈程序员站长
2022/09/20
9120
微信小程序-开发入门(一)
微信小程序 开发笔记
参考:https://developers.weixin.qq.com/miniprogram/dev/reference/api/Page.html
yiyun
2022/04/01
5530
微信小程序 开发笔记
第四个页面:制作电影资讯页面
之前的文章列表页面还有一个小功能没有实现,就是点击点击轮播图就能跳转到相应的文章详情页面,这个和点击文章列表跳转到文章详情页面的实现方式是一样的。
端碗吹水
2020/09/23
1.6K0
第四个页面:制作电影资讯页面
微信小程序-开发入门(一)
微信小程序已经火了一段时间了,之前一直也在关注,就这半年的发展来看,相对原生APP大部分公司还是不愿意将主营业务放到微信平台上,以免受制于腾讯,不过就小程序的应用场景(用完即走和二维码分发等)还是很值得我们学习的,技术上面如果了解React的话,会发现他们在组件化上面有很多雷同之处。说白了,小程序就是基于微信平台的H5轻应用,微信将系统底层功能(设备、位置、媒体、文件等)和微信自身功能(登录、支付、分享等)封装成相应API供小程序调用。 自己根据官方文档写过一个DOME,借助和风天气开放API接口,实现天气
小古哥
2018/03/08
2.6K2
微信小程序-开发入门(一)
【腾讯游戏人生】微信小程序开发总结
目前【腾讯游戏人生】小程序已经发布上线,大家可以扫小程序码进行体验。接下来主要介绍在开发该款小程序过程中的一些思考和积累。
一时两无
2018/06/08
3.3K3
【微信小程序】数据绑定
把data中的数据绑定到页面中渲染,使用Mustache语法将变量包起来即可,语法格式如下:
hacker707
2022/10/31
1.5K0
【微信小程序】数据绑定
WePY 在小程序性能调优上做出的探究
导语 性能调优是一个亘古不变的话题,无论是在传统H5上还是小程序中。因为实现机制不同,可能导致传统H5中的某些优化方式在小程序上并不适用。因此必须另开辟蹊径找出适合小程序的调估方式。 预先加载 这一节
Gcaufy
2017/05/09
5K1
WePY 在小程序性能调优上做出的探究
相关推荐
【微信小程序】列表渲染wx:for
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验