简介
wepy是微信小程序的官方框架,使用wepy可以快速开发微信小程序,以一个MVVM模式进行开发调试
学习使用wepy框架,你最好是有使用过vue的基础,已经阅读过微信小程序的官网文档最好不过。
学习一门新技术我们首先知道为什么要使用它
小程序的缺点
不能使用less/sass
不能使用npm包及es6高级语法
每个页面对应4个文件
wepy 框架的优点
针对原生API进行优化
单文件模式,统一使用.wpy文件(类似.vue)
支持组件化开发
支持使用NPM包管理
wepy创建与使用
wepy安装或更新都通过npm包进行管理
1.全局安装或更新wepy命令行工具1
npm install wepy-cli -g
2.在开发目录中生成工程文件1
wepy new myproject //注释1.7以上版本根据提示安装生成 wepy init standard myproject
3.切换到项目目录,安装依赖关系1
cd myproject || npm install
4.开启实时编译,生成dist目录1
wepy build --watch
此时工程文件已经生成完成并且已经实时监控,使用微信小程序开发者工具打开dist目录查看效果,使用IDE(编辑器) 打开myproject文件进行查看,具体编辑src目录下文件,自动生成dist小程序文件即可。
注释:.wap文件类似.vue文件,一个文件由style、template、script三部分组成。
methods方法使用
注意,对于WePY中的methods属性,因为与Vue中的使用习惯不一致,非常容易造成误解
这里需要特别强调一下:WePY中的methods属性只能声明页面wxml标签的bind、catch事件,不能声明自定义方法,这与Vue中的用法是不一致的。
使用组件的方式
WePY中,在父组件template模板部分插入驼峰式命名的子组件标签时
不能将驼峰式命名转换成短横杆式命名(比如将childCom转换成child-com),这与Vue中的习惯是不一致。
组件的循环使用
1 |
|
computed计算属性
1 | 注意:只要是组件中有任何数据发生了改变,那么所有计算属性就都会被重新计算。 |
watch监听器
1 | data = { |
wepy自带的一些方法
1 | 1.在Page页面实例中,可以通过```this.$parent```来访问App实例。 |
props传值
静态传值
parent.wpy父亲页面1
2
3
4
5
6
7
8
9
10
11<template>
<child :title="mytitle"></child>
</template>
<script>
export default class Index extends wepy.page {
data = {
mytitle:'我是准备传给儿子组件字符串类型'
}
}
</script>
child.wpy儿子组件1
2
3
4
5
6
7
8
9
10
11
12
13
14
15<template>
<view>{{title}}<view>
</template>
<script>
export default class Child extends wepy.component {
props = {
// 静态传值
title:String
}
onLoad () {
console.log(this.title);
}
}
</script>
动态传值
parent.wpy父亲页面1
2
3
4
5
6
7
8
9
10
11<template>
<child :title="parentTitle" :syncTitle.sync="parentTitle" :twoWayTitle="parentTitle"></child>
</template>
<script>
export default class Index extends wepy.page {
data = {
parentTitle: 'p-title'
};
}
</script>
child.wpy儿子组件1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39<template>
<view>{{title}}<view>
</template>
<script>
export default class Child extends wepy.component {
props = {
// 静态传值
title: String,
// 父向子单向动态传值
syncTitle: {
type: String,
default: 'null'
},
twoWayTitle: {
type: Number,
default: 'nothing',
twoWay: true
}
};
onLoad () {
console.log(this.title); // p-title
console.log(this.syncTitle); // p-title
console.log(this.twoWayTitle); // p-title
this.title = 'c-title';
console.log(this.$parent.parentTitle,111111111111); // p-title.
this.twoWayTitle = 'two-way-title';
this.$apply();
console.log(this.$parent.parentTitle); // two-way-title. --- twoWay为true时,子组件props中的属性值改变时,会同时改变父组件对应的值
this.$parent.parentTitle = 'p-title-changed';
this.$parent.$apply();
console.log(this.title); // 'c-title';
console.log(this.syncTitle); // 'p-title-changed' --- 有.sync修饰符的props属性值,当在父组件中改变时,会同时改变子组件对应的值。
}
}
</script>