赞
踩
WePY
WePY
是腾讯官方出品的一个小程序快速开发框架,对原生小程序的开发模式进行了再次封装
WePY
WePY
相比于原生小程序开发,拥有众多的开发特性和优化方案
WePY
的安装与运行WePY
WePY
的安装或更新都通过 npm
进行全局安装npm install wepy-cli -g
WePY
项目wepy init standard wepyproject
wepy init
” – 是固定写法,代表要初始化 wepy
项目;standard
” – 代表模板类型为标准模板,可以运行 ”wepy list
” 命令查看所有可用的项目模板wepyproject
” – 为自定义的项目名称。ESLint
选项!回车表示采用默认值WePY
项目cd myproject
切换至 `WePY`` 项目根目录npm install
安装 WePY
项目依赖项wepy build --watch
开启实时编译(执行窗口不可关闭)
wepy build --watch
命令,会循环监听 WePY
项目中源代码的变化,自动编译生成小程序项目注意:生成的小程序项目默认被存放于 dist 目录中。
WePY
项目目录├── dist 小程序运行代码目录(该目录由WePY的build指令自动编译生成,请不要直接修改该目录下的文件)
├── node_modules (项目的依赖包)
├── src 代码编写的目录 (该目录为使用WePY后的开发目录)
│ ├── components WePY组件目录(组件不属于完整页面,仅供完整页面或其他组件引用)
│ │ ├── com_a.wpy 可复用的WePY组件a
│ │ ├── com_b.wpy 可复用的WePY组件b
│ ├── pages WePY页面目录(属于完整页面)
│ │ ├── index.wpy index页面(经build后,会在dist目录下的pages目录生成index.js、index.json、index.wxml和index.wxss文件)
│ │ ├── other.wpy other页面(经build后,会在dist目录下的pages目录生成other.js、other.json、other.wxml和other.wxss文件)
│ └── app.wpy 小程序配置项(全局数据、样式、声明钩子等;经build后,会在dist目录下生成app.js、app.json和app.wxss文件)
└── package.json 项目的package配置
WePY
项目导入到开发者工具中WePY
项目到微信开发者工具wepy-cli
工具生成的项目根目录下,包含 project.config.json
文件,
appId
、生成的小程序项目根路径等。project.config.json
文件,
wepy
项目根目录,project.config.json
文件的配置,把 wepy
编译生成的小程序项目加载到微信开发者工具中。ESLint
报错的问题ESLint 是好用的代码格式检查工具,能够帮助程序员养成良好的代码书写习惯。首次把 WePY 项目加载到微信开发
者工具后,终端会报两个红色的错误信息,截图如下:
这是因为 ESLint 规定,不允许在代码中出现连续多个空行,此时根据报错信息,在vscode
中打开,找到对应的文件,删除多余的空行,重新编译 WePY 项目即可。
文件后缀为.wpy,可共用 Vue 的高亮规则,但需要手动设置。如下是 VS Code 中实现代码高亮的相关设置步骤:
① 在 Code 里先安装 Vue 的语法高亮插件 Vetur。
② 打开任意 .wpy 文件。
③ 点击右下角的选择语言模式,默认为纯文本。
④ 在弹出的窗口中选择 .wpy 的配置文件关联。
⑤ 在选择要与 .wpy 关联的语言模式 中选择 Vue。
⑥ 在 VS Code 编辑器设置中设置。// 文件-首选项-设置-settings.json 中,添加 “files.associations”: { “*.wpy”: “vue” }
WePY
和 小程序项目的关系wepy init
命令初始化的wepy
项目,实际是一个模板项目,不能直接当作小程序运行。把模板项目编译为小程序项目
,才可以运行。WePY
文件介绍.wpy
文件的组成部分.wpy
文件可分为三大部分,各自对应于一个标签:
<script></script>
标签中的内容,又可分为两个部分:
config
对象之外的部分,对应于原生的 .js
文件config
对象,对应于原生的 .json
文件<template></template>
模板部分,对应于原生的 .wxml
文件。<style></style>
样式部分,对应于原生的 .wxss
文件。app.wpy
不需要 template
,所以编译时会被忽略。.wpy
文件的使用说明.wpy
文件中的 script
、template
、style
这三个标签都支持 lang
和 src
属性,
lang
决定了其代码编译过程,src
决定是否外联代码,存在 src
属性且有效时,会忽略内联代码。语法属性
标签 | lang 默认值 | lang 支持值 |
---|---|---|
style | css | css 、less 、scss 、stylus 、postcss |
template | wxml | wxml 、xml 、pug(原jade) |
script | babel | babel 、TypeScript |
<style lang="less" src="page1.less"></style>
<template lang="wxml" src="page1.wxml"></template>
<script>
// some code
</script>
app.wpy
入口文件
app.wpy
中所声明的小程序实例继承自wepy.app
类,包含一个config
属性和其它全局属性、方法、事件。
config
属性会被编译为小程序的 app.json
全局配置文件;config
属性之外的其它节点,会被编译为小程序的 app.js
文件;app.wxss
全局样式;app.wpy
全局配置小程序外观在小程序的入口文件中找到 window 节点:
app.wpy
->script
标签 ->config
->window
即可全局配置小程序的外观
window: {
backgroundTextStyle: 'dark',
navigationBarBackgroundColor: '#fff',
navigationBarTitleText: 'app',
navigationBarTextStyle: 'black'
}
.wpy
文件中 script
标签组成结构页面文件
page.wpy
中所声明的页面实例继承自wepy.page
类
属性 | 说明 |
---|---|
config | 页面配置对象,对应于原生的page.json 文件,类似于app.wpy 中的config |
components | 页面组件列表对象,声明页面所引入的组件列表 |
data | 页面渲染数据对象,存放可用于页面模板绑定的渲染数据 |
methods | wxml事件处理函数对象,存放响应wxml中所捕获到的事件的函数,如bindtap 、bindchange |
events | WePY组件事件处理函数对象,存放响应组件之间通过$broadcast 、$emit 、$invoke 所传递的事件的函数 |
其它 | 小程序页面生命周期函数,如onLoad 、onReady 等,以及其它自定义的方法与属性 |
WePY
框架开发规范与使用在 src -> pages 目录下,创建 home.wpy 页面,并创建页面的基本代码结构,示例代码如下:
<template>
<view>home首页</view>
</template>
<script>
import wepy from 'wepy'
export default class Home extends wepy.page {
config = {
navigationBarTitleText: 'home'
}
methods = {}
}
</script>
<style lang="less">
</style>
打开 src
-> app.wpy
入口文件,将新创建的页面路径,注册到 config
-> pages
数组中,并调整为数组的第一项即可
pages: ['pages/home', 'pages/index']
script
标签中,必须导入 wepy
模块,并创建继承自 wepy.page
的页面类;否则会报错。app.wpy
的 config
-> pages
数组中。必须再回到原新增页面文件中,摁下 Ctrl + S 快捷键重新编译生成页面,否则会报错
。在
wepy
框架中,优化了事件绑定机制,支持类似于Vue.js
的事件绑定语法
WePY
中,统一使用 @
绑定事件,传递参数直接采用@tap='handle({{params}})'
传递<template> <view> <view>home首页</view> <button @tap="btnHandler({{number}})" type="primary" size="mini">WePY@绑定事件</button> </view> </template> <script> import wepy from 'wepy' export default class Home extends wepy.page { config = { navigationBarTitleText: 'home' } data = { number: 10 } methods = { // 触发事件函数写在methods里 // num形参值为data中number的值 btnHandler(num) { console.log('按钮被点击了') console.log('传递的参数为' + num) this.add() } } // 自定义方法要写在外面,与methods平级节点 add() { console.log('自定义函数' ) } } </script> <style lang="less"> </style>
页面绑定事件的注意事项
WePY
中的 methods
属性只能声明页面 wxml
标签的事件处理函数
,不能声明自定义方法
,methods
平级的节点位置,这与 Vue
中的用法是不一致的。.wpy
页面中的私有数据,需要定义到 data 节点中,页面上使用双大括号语法 {{ }} 渲染 data 中的数据<input value="{{val}}" placeholder="请输入值" @input="inputHandle"> data = { age: 18, val: '' } methods = { inputHandle: function (e) { console.log(e.detail.value) // 用this加data函数就能直接调用 //e.detail.value 为输入文本框里输入的值 this.val = e.detail.value } }
wxs
脚本的使用wxs
脚本定义为外联文件,并且后缀名为 .wxs
<script></script>
标签内,通过 import
导入相对路径的 wxs
模块class
类中,通过 wxs = { }
注册刚才导入的 wxs
模块注意
:被注册的 wxs 模块,只能在当前页面的 template 中使用,不能在script中使用// wxs/home.wxs
module.exports = {
mes: 'hi'
}
// 引入页面的js
import homeWxs from '../wxs/home.wxs'
// 新建一个与data、config平级的节点
wxs = {
homeData: homeWxs
}
<!--在页面上显示-->
<view>{{homeData.mes}}</view>
promisify
启用 async
和 await
wepy-cli
创建的项目,不支持使用 ES7
的 async
和 await
来简化 Promise API
的调用。src
-> app.wpy
,找到 constructor()
构造函数,在构造函数中代码的最后一行,添加 this.use('promisify')
constructor () {
super()
this.use('requestfix')
this.use('promisify')
}
WePY
发送 get
和 post
请求
WePY
框架对原生小程序做了封装,之前通过wx
调用的API
,都可以直接使用wepy
进行调用
// wepy 发送 Get 请求
async getInfo () {
const res = await wepy.request('接口地址')
console.log(res)
}
// wepy 发送 Post 请求
async getInfo () {
const res = await wepy.request({
url: '接口地址',
method: 'post',
data: {
name: 'lengend'
}
})
console.log(res)
}
在异步函数中更新数据的时候,页面检测不到数据的变化,必须手动调用
this.$apply
方法。
作用是强制页面重新渲染
// 被 async 修饰的函数叫做异步函数
async getInfo() {
const res = await wepy.request('接口地址’)
this.getMsg = res.data
this.$apply()
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。