摘要:组件三要素组件的三要素就是小程序定义的三种文件因为本身就是模块化开发,所以这天然有利于组件化。日历组件所以利用和就可以打造一款组件了。这样就完成了一个组件编写,任何需要用到的地方都可以引入了。
背景
先谈下背景,在做一款产品的时候需要用到日期选择器,但是官方的却不太满足需求,因为无法选择农历啊。所以自己来造一个轮子好了,造轮子之前先想想啊,万一以后多个地方要用到,多个项目要用,怎么办呢?
那把这个轮子抽象,定义输入输出,即接口。组件里面怎么运转调用方不管啊,给了什么输入,就只管结果好了。
组件三要素组件的三要素就是小程序定义的三种文件:
js
wxml
wxss
因为js本身就是模块化开发,所以这天然有利于组件化。wxml和wxss呢,定义了组件的皮肤,小程序的模板template标签可以方便wxml的复用。至于wxss,没有独立出来,目前没发现要怎么整合到独立的组件中去,而不与其他的wxss发生耦合。
{{index}}: {{msg}} Time: {{time}}
用法
// 如果模板是写在多带带的wxml文件,则要inport,引入。路径则是当前文件的相对路径。
需要注意的是data数据是有多带带的作用域的,只能使用data传入的数据。具体的理解就是:
data: { item: { index: int msg: string time: string }, index: int msg: string time: string }
模板里面的数据实际显示的是item的属性,而不是和item同级的属性。
模板还有一种用法
这样就要传入模板中用到的三个变量,而不是item一个对象。模板渲染的结果则是最外层的index属性,而不是item的index属性值。
...符号是扩展运算符,理解为将一个对象所以的属性展开传递给模板,这样的好处是不要传递多个,写出的代码更加简洁。扩展运算符是ES6的特性,有兴趣可以深入学习。
如果运用扩展运算符给模板传入数据,像上面怎么去更新单个key的值呢?小程序提供了可以根据属性路径更新的方法:
// 更新单个key, this.setData({ index: 1 }); /* 更新对象中的单个key item: { index: int msg: string time: string } */ this.setData({ "item.index": 1 }); // path必须是字符串,不能是变量替代。下面是不行的 path = "item.index"; this.setData({ path: 1 });
虽然用法上是有点限制,但也避免了传入一堆的参数给模板。
值得注意的是入参data的item必须是有初始化值,否则会报错。
日历组件所以利用template和js就可以打造一款组件了。先看下我所做的组件:
定义一个wxml文件
...
定义一个js文件
class Calendar { ... }
日期类有自己的作用域名,所以组件内部的事件导致数据更新的时候,还是要用页面更新数据的方法this.setData,所以必须要将页面对象传递给组件内部。
页面调用组件:
// this 是当前页面page对象,含有setData方法。 var calendar = new Calendar(this, function(date) { that.setData({ date: date }) }); // 当选择日期变化的时候,组件内部事件: this.pageCtx 则是page上下文,即上面实例化组件入参的this对象。 changeCalendarTab(e) { this.pageCtx.setData({ "calendar_data.selectDateType": +e.target.dataset.tap }); this.data.selectDateType = +e.target.dataset.tap; this.changeCallBack && this.changeCallBack(this.getCurrentSelectDate()); }
具体组件请参考我的github:calendar。
这样就完成了一个组件编写,任何需要用到的地方都可以引入了。小程序一个不太好的地方是没有包管理的概念,导致跨项目见的公共模块复用起来比较麻烦,下次进行多带带讲解。
by addy 原创文章,欢迎转载,但希望全文转载,注明本文地址。本文地址:http://www.iamaddy.net/2017/0...
憋走,点赞是美意,打赏是鼓励~
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/87379.html
摘要:顺便补充一句,微信官方提供的判断依旧不全面,最新出来的苹果手机还没有完全支持相关的坑可以在官方社区的问答中找到。 首次在这里写点东西,还请各位大佬担待点。 摘要:昨天的placeholder-class只是希望各位看官注意,而今天的textarea就绝对是一个超级大坑!而且如果看官手中没有苹果手机测试的话,这个可就真的是个坑了!为啥?难道要等到用户向你反馈你们产品有bug???.......
摘要:假如图片链接有问题比如,依然展示占位图。使用单文件组件将配置模板脚本样式写在一个文件中,方便维护。 零、问题的由来 一般在前端展示图片时都会碰到这两个常见的需求: 图片未加载完成时先展示占位图,等到图片加载完毕后再展示实际的图片。 假如图片链接有问题(比如 404),依然展示占位图。甚至你还可以增加点击图片再次加载的功能。(例如知乎) 然鹅,小程序原生组件 image 并没有提供这...
摘要:并总结经典面试题集各种算法和插件前端视频源码资源于一身的文档,优化项目,在浏览器端的层面上提升速度,帮助初中级前端工程师快速搭建项目。 本文是关注微信小程序的开发和面试问题,由基础到困难循序渐进,适合面试和开发小程序。并总结vue React html css js 经典面试题 集各种算法和插件、前端视频源码资源于一身的文档,优化项目,在浏览器端的层面上提升速度,帮助初中级前端工程师快...
摘要:并总结经典面试题集各种算法和插件前端视频源码资源于一身的文档,优化项目,在浏览器端的层面上提升速度,帮助初中级前端工程师快速搭建项目。 本文是关注微信小程序的开发和面试问题,由基础到困难循序渐进,适合面试和开发小程序。并总结vue React html css js 经典面试题 集各种算法和插件、前端视频源码资源于一身的文档,优化项目,在浏览器端的层面上提升速度,帮助初中级前端工程师快...
阅读 3538·2021-11-22 15:22
阅读 3328·2019-08-30 15:54
阅读 2724·2019-08-30 15:53
阅读 783·2019-08-29 11:22
阅读 3528·2019-08-29 11:14
阅读 2073·2019-08-26 13:46
阅读 2206·2019-08-26 13:24
阅读 2276·2019-08-26 12:22