微信小程序介绍及开发准备(账号,软件)
-
小程序是什么?
小程序是一个不需要下载安装就可使用的应用,它实现了应用触手可及的梦想,用户扫一扫或者搜一下即可打开应用。也体现了用完即走的理念,用户不用关心是否安装太多应用的问题。应用将无处不在,随时可用,但又无需安装卸载。”
-
小程序与应用程序区别
无需安装、不占内存、易传播
-
微信小程序有什么优势
- 开发成本大大降低
- 维护成本低
- 不用安装,即开即用,用完就走。省流量,省安装时间,不占用桌面
- 小程序作为全新的开放平台,企业只要抓住先机,便可以在红利期占据有利地位
- 挥之即来,挥之即去
- 用户体验好可增加企业与用户之间的粘性
- 营销成本低
- 吸引新用户的新大陆
- 维护老客户的得力助手
- 有利于个性化品牌形象
- 提升转化率
-
小程序能做什么
- 内容/工具小程序
- 零售小程序
- 游戏/娱乐小程序
-
小程序现状及未来趋势
现状:小程序在上线一年的时间里日活跃用户达到1.7亿,三四线及以下城市覆盖数达50%,目前已经上线小程序数量超过58万个。
未来趋势:今年1月9日,艾媒咨询发布的《2017年度中国微信小程序电商应用专题研究报告》称,到2020年,小程序电商的规模将扩大到3.98亿,2018年的增长率会达到157.1%。
-
微信小程序开发准备
目录结构介绍
wxml
WXML(WeiXin Markup Language)是框架设计的一套标签语言,结合基础组件、事件系统,可以构建出页面的结构
常用组件
view
text
scroll-view
image
input
radio
radio-group
checkbox
checkbox-group
button
navigator
WXSS 样式
WXSS(WeiXin Style Sheets)是一套样式语言,用于描述 WXML 的组件样式
- 尺寸单位
rpx(responsive pixel): 可以根据屏幕宽度进行自适应。规定屏幕宽为750rpx - 样式导入
@import后跟需要导入的外联样式表的相对路径,用;表示语句结束。
注意:
静态的样式统一写到 class 中。
style 接收动态的样式,在运行时会进行解析,请尽量避免将静态的样式写进 style 中,以免影响渲染速度。
----
WXML 模板
数据绑定
<!-- 数据绑定 -->
<view> {{ message }} </view>
Page({
// 数据定义
data: {
message: 'Hello MINA!'
}
})
合法用法:
- 算术运算
- 三元运算
- 字符拼接
- 组件属性(需要在双引号之内)
<view id="item-{{id}}"> </view> - 控制属性(需要在双引号之内)
<view wx:if="{{condition}}"> </view> - 关键字(需要在双引号之内)
<checkbox checked="{{false}}"> </checkbox>
列表渲染
默认数组的当前项的下标变量名默认为 index,数组当前项的变量名默认为 item
<view wx:for="{{array}}">
{{index}}: {{item.message}}
</view>
使用 wx:for-item 可以指定数组当前元素的变量名,
使用 wx:for-index 可以指定数组当前下标的变量名:
<view wx:for="{{array}}" wx:for-index="idx" wx:for-item="itemName">
{{idx}}: {{itemName.message}}
</view>
block wx:for渲染包含多节点的代码块
注意: 并不是一个组件,它仅仅是一个包装元素,不会在页面中做任何渲染,只接受控制属性
<block wx:for="{{[1, 2, 3]}}">
<view> {{index}}: </view>
<view> {{item}} </view>
</block>
wx:key
wx:key 的值以两种形式提供
- 字符串,代表在 for 循环的 array 中 item 的某个 property,该 property 的值需要是列表中唯一的字符串或数字,且不能动态改变。
- 保留关键字 *this 代表在 for 循环中的 item 本身,这种表示需要 item 本身是一个唯一的字符串或者数字。
注意:
-
当 wx:for 的值为字符串时,会将字符串解析成字符串数组
-
花括号和引号之间如果有空格,将最终被解析成为字符串
条件渲染
<view wx:if="{{length > 5}}"> 1 </view>
<view wx:elif="{{length > 2}}"> 2 </view>
<view wx:else> 3 </view>
block wx:if
注意: 并不是一个组件,它仅仅是一个包装元素,不会在页面中做任何渲染,只接受控制属性
<block wx:if="{{true}}">
<view> view1 </view>
<view> view2 </view>
</block>
事件
-
事件分类
- 冒泡事件:当一个组件上的事件被触发后,该事件会向父节点传递。
- 非冒泡事件:当一个组件上的事件被触发后,该事件不会向父节点传递。
-
事件绑定
事件绑定以bind或者catch开头。
bind事件绑定不会阻止冒泡事件向上冒泡,catch事件绑定可以阻止冒泡事件向上冒泡。
-
传参
-
事件对象
-
参数
<!-- 注意:以data-开头,多个单词由连字符-链接,不能有大写(大写会自动转成小写)如data-element-type --> <view data-alpha-beta="1" data-alphaBeta="2" bindtap="bindViewTap"> DataSet Test </view>bindViewTap:function(event){ event.currentTarget.dataset.alphaBeta === 1 // - 会转为驼峰写法 event.currentTarget.dataset.alphabeta === 2 // 大写会转为小写 } -
配置文件(app.json及页面json)
每一个小程序页面也可以使用.json文件来对本页面的窗口表现进行配置。 页面的配置比app.json全局配置简单得多,只是设置 app.json 中的 window 配置项的内容,页面中配置项会覆盖 app.json 的 window 中相同的配置项
生命周期
路由
组件
-
新建一个components文件夹
-
在components文件夹下面新建一个Diaog文件夹
-
选中该文件夹,新建 --> Component --> 取名dialog
-
在dialog.json中添加如下代码
{ "component": true, "usingComponents": {} } -
完成组件的静态页面部分 dialog.wxml/dialog.wxss
<view class='dialog_container' hidden="{{!isShow}}"> <view class='mask'></view> <view class='dialog'> <view class='dialog-title'>{{ title }}</view> <view class='dialog-content'>{{ content }}</view> <view class='dialog-footer'> <view class='dialog-btn' catchtap='_cancelEvent'>{{ cancelText }}</view> <view class='dialog-btn' catchtap='_confirmEvent'>{{ confirmText }}</view> </view> </view> </view>/* components/dialog/dialog.wxss */ .mask { position: fixed; z-index: 1000; top: 0; right: 0; left: 0; bottom: 0; background: rgba(0, 0, 0, 0.3); } .dialog { position: fixed; z-index: 5000; width: 80%; max-width: 600rpx; top: 50%; left: 50%; -webkit-transform: translate(-50%, -50%); transform: translate(-50%, -50%); background-color: #FFFFFF; text-align: center; border-radius: 3px; overflow: hidden; } .dialog-title { font-size: 18px; padding: 15px 15px 5px; } .dialog-content { padding: 15px 15px 5px; min-height: 40px; font-size: 16px; line-height: 1.3; word-wrap: break-word; word-break: break-all; color: #999999; } .dialog-footer { display: flex; align-items: center; position: relative; line-height: 45px; font-size: 17px; } .dialog-footer::before { content: ''; position: absolute; left: 0; top: 0; right: 0; height: 1px; border-top: 1px solid #D5D5D6; color: #D5D5D6; -webkit-transform-origin: 0 0; transform-origin: 0 0; -webkit-transform: scaleY(0.5); transform: scaleY(0.5); } .dialog-btn { display: block; -webkit-flex: 1; flex: 1; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); position: relative; } .dialog-footer .dialog-btn:nth-of-type(1) { color: #353535; } .dialog-footer .dialog-btn:nth-of-type(2) { color: #3CC51F; } .dialog-footer .dialog-btn:nth-of-type(2):after { content: " "; position: absolute; left: 0; top: 0; width: 1px; bottom: 0; border-left: 1px solid #D5D5D6; color: #D5D5D6; -webkit-transform-origin: 0 0; transform-origin: 0 0; -webkit-transform: scaleX(0.5); transform: scaleX(0.5); } -
完成组件逻辑部分 dialog.js
// components/dialog/dialog.js Component({ options: { multipleSlots: true // 在组件定义时的选项中启用多slot支持 }, /** * 组件的属性列表 * 用于组件自定义设置 */ properties: { // 弹窗标题 title: { type: String, value: '标题' }, // 弹窗内容 content: { type: String, value: '弹窗内容' }, // 弹窗取消按钮文字 cancelText: { type: String, value: '取消' }, // 弹窗确认按钮文字 confirmText: { type: String, value: '确定' } }, /** * 私有数据,组件的初始数据 * 可用于模版渲染 */ data: { // 弹窗显示控制 isShow: false }, /** * 组件的方法列表 * 更新属性和数据的方法与更新页面数据的方法类似 */ methods: { /* * 公有方法 */ //隐藏弹框 hideDialog() { this.setData({ isShow: !this.data.isShow }) }, //展示弹框 showDialog() { this.setData({ isShow: !this.data.isShow }) }, /* * 内部私有方法建议以下划线开头 * triggerEvent 用于触发事件 */ _cancelEvent() { //触发取消回调 this.triggerEvent("cancelEvent") }, _confirmEvent() { //触发成功回调 this.triggerEvent("confirmEvent"); } } }) -
在需要使用的page的json文件中,添加如下代码,引入组件
{ "usingComponents": { "dialog": "/components/Dialog/dialog" } } -
在需要的页面使用组件
<dialog id='dialog' title='CSDN博客' content='小程序组件' cancelText='取消' confirmText='确定' bind:cancelEvent="_cancelEvent" bind:confirmEvent="_confirmEvent"> </dialog> <button type="primary" bindtap="showDialog"> ClickMe! </button>onReady: function () { //获得dialog组件 this.dialog = this.selectComponent("#dialog"); }, showDialog() { this.dialog.showDialog(); }, //取消事件 _cancelEvent() { console.log('你点击了取消'); this.dialog.hideDialog(); }, //确认事件 _confirmEvent() { console.log('你点击了确定'); this.dialog.hideDialog(); }
1761

被折叠的 条评论
为什么被折叠?



