微信小程序基础语法总结

配置文件

app.json的配置(全局)

{

// 用来配置页面的路径

"pages":[

"pages/index/index", // 首页

"pages/Test/Test" // 跳转的页面

],

"window":{

"enablePullDownRefresh": true, // 是否支持下拉刷新

"backgroundTextStyle":"dark", // 下拉刷新的字体颜色,支持light

"backgroundColor": "#e04c4c", // 设置下拉刷新的背景颜色

"navigationBarBackgroundColor": "#fff", // 设置微信程序顶部导航栏颜色

"navigationBarTitleText": "yejiawei", // 顶部导航栏文字

"navigationBarTextStyle":"black" // 顶部导航栏文字样式,black或者white

"onReachBottomDistance": 50 // 设置上拉事件触发时距离底部的位置

},

"tabBar": { // 设置tab切换栏的配置

"list": [

{

"pagePath": "pages/index/index", // 跳转的路径

"text": "首页", // tab的文字

"iconPath": "/images/t1.jpg" // 设置背景图路径

},

{

"pagePath": "pages/Test/Test",

"text": "测试",

"selectedIconPath": "/images/t1.jpg" // 设置选中时图片的路径

}

],

"color": "#e04c4c", // 设置tab按钮字体颜色

"selectedColor": "#000", // 设置按钮选中的颜色

"backgroundColor": "#1aad16", // 设置tab按钮的背景颜色

"borderStyle": "black", // 设置tabbar边框颜色,只支持black/white

"position": "top" // 设置tabbar的位置,设置为top无法显示图片

},

"networkTimeout": {

"request": 10000, // request请求的超时时间

"connectSocket": 10000, // connectSocket的超时时间

"downloadFile": 10000, // 下载文件的超时时间

"uploadFile": 1000 // 上传文件的超时时间

},

"debug": true // 开启debug模式,在控制台输出程序信息

}

page.json的配置(页面)

设置的配置用来覆盖app.json中的window配置

{

"navigationBarBackgroundColor": "#ffffff", // 设置微信程序顶部导航栏颜色

"navigationBarTextStyle": "black", // 顶部导航栏文字样式,black或者white

"navigationBarTitleText": "微信接口功能演示", // 顶部导航栏文字

"backgroundColor": "#eeeeee", // 设置下拉刷新的背景颜色

"backgroundTextStyle": "light", // 下拉刷新的字体颜色,支持light

"enablePullDownRefresh": true, // 是否支持下拉刷新

"disableScroll": true, // 是否支持滚动

"onReachBottomDistance": 50 // 设置上拉事件触发时距离底部的位置

}

程序入口函数(App)

App({

onLaunch: function (options) {

// 程序加载调用

},

onShow: function (options) {

// 从后台进入前台调用,默认程序第一次加载回调用

},

onHide: function () {

// 从前台切换到后台调用

},

onError: function (msg) {

// 程序报错调用

},

myFunc: function() {

// 自定义函数

},

globalData: {

// 全局自定义数据

userInfo: "yejiawei"

}

})

上面的onLaunch和onShow方法都有options参数,options参数里面有如下属性

{

path: "pages/index/index" // 程序打开的路径

query: {}, // 当调用wx.navigateTo可以传递query

scene: 1001, // 打开小程序的场景值

referrerInfo: { // 从其他程序中进入到此程序,会返回此字段

appId: ..., // 其他程序的appId

extraData: ... // 其他程序传递过来的数据

}

}

可以使用 var app = getApp(); 来获取小程序实例,console.log(app.globalData.userInfo)

页面的入口函数(Page)

Page({

data: {

msg: "haha" // 页面的状态

},

onLoad: function(options) { // 页面加载完毕触发 },

onReady: function() { // 页面渲染完毕触发 },

onShow: function() { // 页面开始渲染触发 },

onHide: function() { // 页面切换到后台触发 },

onUnload: function() {  // 页面卸载触发 },

onPullDownRefresh: function() {  // 页面下拉刷新触发},

onReachBottom: function() { // 页面上滑触底触发 },

onShareAppMessage: function () {

// 页面点击转发触发,需要return一个object,只有定义了此方法,才会有转发的功能

return {

title: "分享的页面", // 分享页面的标题

path: "/pages/logs/logs" // 分享的页面的路径

}

},

onPageScroll: function(options) { // 页面滚动触发 },

myFn: function() { // 自定义函数

console.log(this.route); // 获取当前页面的路径

this.setData({ // 修改状态

msg: "haha"

}, function() {

// 状态修改完,调用此方法

})

console.log(getCurrentPages()); // 获取当前页面栈实例

}

customData: { // 自定义属性 }

})

页面路由

方法wx.navigateTo(object) 跳转到指定的页面,无法跳转到tabbar页面(当前页保留)

wx.navigateTo({

url: ‘/pages/logs/logs?id=1‘, // 页面路劲,可以传递query参数

success: function() { // 导航成功执行

console.log("跳转成功");

},

fail: function() { // 导航失败执行

console.log("跳转失败");

},

complete: function() { // 导航完成调用

console.log("导航结束");

}

})

方法wx.navigateBack(object) 返回到之前的页面

wx.navigateBack({

delta: 2 // 后退2步

})

方法wx.redirectTo(object) 销毁当前页面,跳转到指定的页面,不能跳转到tabbar页面

使用方法和navigateTo一样

方法wx.reLaunch(object) 销毁所有页面,跳转到任意指定的页面

使用方法和navigateTo一样

方法wx.switchTab(object) 跳转到tabbar页面

使用方法和navigateTo一样

模块化

js文件可以使用exports和module.exports暴露接口

exports是module.exports的一个引用

function fn () {

console.log("导入的方法执行了");

}

exports.fn = fn;

使用文件中的方法

var common  = require(‘../common.js‘);

common.fn();

WXML文件细节

状态绑定

变量使用双大括号包裹 {{msg}}

标签的属性使用双引号包裹

双引号里面的内容wx都会将其转化成字符串,所以true,false要表达本意需要再包裹双大括号

绑定对象,不需要对象的花括号

列表遍历

{{index}}: {{item}}

给index和item取别名

{{myIndex}}: {{myItem}}

渲染多节点代码块

{{index}}:

{{item}}

遍历字符串

{{item}}

绑定key,当组件重排后根据id可以复用组件和组件的状态

{{index}}:

{{item}}

条件渲染

haha

haha1

haha2

同样也可以使用block来控制多节点代码块

模板

声明一个模板

{{a}}: {{b}}

使用此模板 obj: { a: 1, b: 2 }

事件

使用bindtap绑定事件

事件对象

myFn: function(event) {

console.log(event);

// 使用data开头的自定义属性,将保存再event.currentTarget.dataset中

}

事件分类

冒泡事件

touchstart 开始触摸

touchmove 触摸移动

touchcancel 触摸打断

touchend 触摸离开

tap 瞬间触摸

longpress 超过350ms的触摸

transitionend 过渡结束

animationstart 动画开始

animationiteration 动画执行一遍后触发

animationend 动画结束触发

非冒泡事件,除了上述事件以外都是非冒泡事件

绑定事件

可以使用bind和catch绑定

bindtap或者bind:tap 不阻止冒泡

catchtap或者catch:tap 阻止冒泡

在WXML文件中导入其他WXML文件

可以将上面讲的template代码,放到一个单独的wxml文件中,然后在当前文件中使用 导入,就可以立即使用了

而的作用,是将除了template和wxs以外的代码,都拷贝到include所在的位置

wxs的使用(代码可以单独写在wxs文件中,也可以写在wxs标签中)

模块

wxs的作用其实和js文件的作用是一样的,只不过提供了另外一种方式来写js

外界要访问wxs中定义的代码需要使用module.exports导出

创建一个wxs文件,定义如下代码

var message = "你好吗?";

module.exports.message = message;

在wxml文件中使用

首先使用wxs标签导入

使用 {{wxsData.message}}

在其他wxs文件中使用

var wxsData = require("../common.wxs");

WXSS文件

尺寸单位使用rpx,一个rpx就代表一个物理像素

导入其他WXSS文件 @import "../common.wxss";

自定义组件(和vue里面的组件类似)

创建自定义组件的步骤

第一步,修改json

修改json文件为 { "component": true }

第二部,WXML文件书写

{{text}}

slot就是插槽,和vue的一样

第三步,WXSS中书写

.demo{ color: red; }

只能使用类选择器

第四部,js文件中写

Component({

properties: {

// 组件的属性,可以指定类型和默认值,和vue的props验证很像

text: {

type: String,

value: ‘默认值‘,

}

},

data: {

// 组件的状态

someData: {}

},

methods: {

// 组件的自定义方法

customMethod: function () { }

}

})

第五步,使用组件

在要使用此自定义组件的page中,修改他的json,插入如下字段

"usingComponents": {

"my-component": "../myComponent/myComponent"

}

在page组件中使用 即可

同时可以使用 传递属性值给组件内部

WXML文件的细节

写法和一般的WXML文件写法一致,不过多了slot

没有名字的slot只能有一个,如果要使用多个slot,需要操作如下几步

第一步,在js中的Component函数中,添加如下

options: {

multipleSlots: true

},

第二步,在WXML中写多个带名字的slot

{{text}}

第三步,在页面中使用

我是a

我是b

WXSS文件的细节

只能使用类选择器

可以继承组件外的样式

app.wxss文件中定义的样式,对组件无效

另外可以使用:host来定义组件标签的样式

:host{ color: black; }

js文件的细节

Component函数的使用如下

Component({

properties: { // 设置组件接受的属性

myProperty1: { // 属性名

type: String, // 类型(必填),目前接受的类型包括:String, Number, Boolean, Object, Array, null(表示任意类型)

value: ‘‘, // 属性初始值(可选),如果未指定则会根据类型选择一个

observer: function(newVal, oldVal){ // 监听属性值改变的函数 }

},

myProperty2: String // 简化的定义方式

},

data: {}, // 组件状态

methods: { // 设置方法

onMyButtonTap: function(){

console.log(this.id); // 组件标签的id

console.log(this.dataset); // 组件的data自定义属性集合

console.log(this.data); // 组件的属性和状态的集合

console.log(this.hasBehavior()) // 组件是否有behavior属性

this.setData({}) // 属性和状态都可以设置

/*

可以手动触发组件的自定义事件,比如,组件上绑定了一个自定义事件

要手动触发myEvent,需要调用

this.triggerEvent(‘myEvent‘, {

// 事件参数

}, {

bubbles: true, // 是否冒泡

composed: true, // 到父组件内部寻找同名事件

capturePhase: true // 是否捕获

}

);

/

}

},

created: function(){}, // 组件在内存中创建完毕执行

attached: function(){}, // 组件挂载之前执行

ready: function() {}, // 组件挂载后执行

detached: function(){}, // 组件移除执行

moved: function(){}, // 组件移动的时候执行

relations: {

/

嵌套的组件需要相互关联就要使用此字段

相同嵌套子节点的处理方式

假设嵌套的html结构如下

item 1

item 2

则custom-li组件中需要定义如下的relations

‘./custom-ul‘: { // 嵌套父组件的路径

type: ‘parent‘, // 关联的目标节点应为父节点

linked: function(target) { }, // custom-li插入到custom-ul时执行,target是custom-ul

linkChanged: function(target) { }, // custom-li被移动后执行,target是custom-ul

unlinked: function(target) {  } // custom-li被移除时执行,target是custom-ul

}

在custom-ul组件中也要定义此字段,只不过反过来 type 改成 child

不同嵌套子节点的处理方式

item 1

item 2

此时就要使用behavior作为公共的节点路径了,假设custom-span和custom-div都有一个名为customFormControls的behavior

custom-span和custom-div内部定义relations的方式和之前一样,只不过将type改成ancestor

custom-div中定义

‘customFormControls‘: {

type: ‘descendant‘, // 关联的目标节点应为子孙节点

target: customFormControls

}

/

},

behaviors: [

/

behaviors的作用就是用来创建一个公用的组件js,内部代码和Component一模一样

Behavior({ //... })

主要用来和当前的Component代码合并,同名的属性以当前组件的为主

*/

]

})

按需加载

实现按需加载的步骤如下

主包中应只包含tabbar

第一步,在项目根目录下创建分包的文件夹,将分包的page写在里面

第二步,在app.json中添加如下配置

"subPackages": [

{

"root": "package1", // 分包文件夹根路径

"pages": [ // 分包中包含的路径,不能添加到app.json的page中

"pages/Demo/Demo"

]

}

]

在tabbar配置项中,不能应用分包的页面

第三步,使用分包文件

在tabbar的页面中,引用分包页

wx.navigateTo({

url: ‘../../package1/pages/Demo/Demo‘

})

作者:Q轩哥

链接://www.greatytc.com/p/4a618a441d1c

来源:简书

简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,214评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,307评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,543评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,221评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,224评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,007评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,313评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,956评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,441评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,925评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,018评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,685评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,234评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,240评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,464评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,467评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,762评论 2 345

推荐阅读更多精彩内容

  • 因新工作主要负责微信小程序这一块,最近的重心就移到这一块,该博客是对微信小程序整体的整理归纳以及标明一些细节点,初...
    majun00阅读 7,315评论 0 9
  • 配置文件 app.json的配置(全局) {// 用来配置页面的路径"pages":["pages/index/i...
    Q轩哥阅读 27,087评论 2 31
  • 1.小程序起步 (1)点击https://mp.weixin.qq.com/wxopen/waregister?a...
    GXW_Lyon阅读 3,313评论 0 0
  • 今天照旧七点多去寄托班接孩子,孝杰见到我以后就马上跟我说要跟我分享一件事情。说完就从书包里拿出了他的奖状。我说:“...
    林丸子同学阅读 203评论 0 2
  • “舞不尽生旦净末丑,唱不完世间百世情”。 每每春末夏初之时,头脑中最挥之不去的一件事便是“看戏”了。 成长在大都市...
    海绵青年阅读 342评论 0 1