wepy框架构建小程序(1)

基本操作:

# 安装脚手架工具
npm install wepy-cli -g # 创建一个新的项目
npm init standard myproject # 进入新项目文件夹和安装依赖
cd myproject && npm install # 跑项目
npm run dev

vscode 编辑器设置

在编辑器设置中设置:

{
// 小程序设置为false
"vetur.validation.template": false
}

由于编辑器的设置有分用户设置工作区设置用户设置就是全局的基本设置,由于上面的功能在Vue项目需要开启,所以上面的设置代码应该在工作区设置中设置

简单点说就是,用户设置是全局设置,而工作区设置就是当前打开的文件夹有效,也就是局部的设置。

定义事件(重点)

事件在web端是很重要的部分,这里要搞得清清楚楚。

事件分捕获阶段事件触发点冒泡阶段

我们用的最多的是冒泡阶段。原生小程序定义事件的方式是键值对的方式key:value

原生小程序的keys:

  • bind:冒泡阶段,对应web端的on
  • catch:用这个key来定义事件不会冒泡,相当于web端的event.stopPropagation()
  • capture-bind:这个key用来定义捕获阶段,不像web端,我们要兼容IE,只考虑冒泡,因为IE老版本没有捕获
  • capture-catch:这个key在触发事件后,终止捕获,由于是捕获 -> 触发事件 -> 冒泡,所以终止捕获也终止了冒泡

bindtap:在小程序中用tap替代click,移动端用tap是避免点击事件的300ms延时造成的bug,tap触发更快。

bind:tap:这个方式也可以,就是key:value方式定义事件,value就是事件名,其他事件名大多和web端一样

wepy的事件定义:

  • bindtap替换@tap
  • catchtap替换@tap.stop
  • capture-bind:tap替换@tap.capture
  • capture-catch:tap替换@tap.capture.stop

这些语法就是Vue的语法,就是要区分这个key:value,key是什么,value是什么

安装Sass

npm i wepy-compiler-sass --save-dev

然后在<style lang='scss'>

.wpy文件

  • <template>:对应.wxml
  • <script>:分成两部分。1、逻辑部分:除了config对象,其他对应.js文件;2、配置部分:即config对象,对应.json
  • <style>:对应.wxss
  • 注意:由于config对象对应.json,但是可以是原生js对象,最后会格式化成JSON

上面3个标签都支持srclang属性:

  • src:引入外联的文件,使用了这属性,内联的代码无效
  • lang:有多个值

各个标签的lang

  • style:默认值css、可能值css、less、scss、stylus、postcss
  • template:默认值wxml、可能值wxml、xml、pug
  • script:默认值babel、可能值babel、TypeScript

状态管理器: redux + wepy-redux

先用redux生成store

import { createStore, combineReducers, applyMiddleware } from 'redux'
import promiseMiddleware from 'redux-promise'
import * as reducers from './reducer' // 生成的store和React中的redux生成方法一模一样
const store = createStore(
combineReducers(reducers),
applyMiddleware(promiseMiddleware)
)

React注入store是通过<Provider>,而wepy-redux注入store的方法用setStore(store)

wepy有3中实例App实例Page实例Component实例App只能有一个,注入store就是要在app.wpy中注入

import { setStore } from 'wepy-redux'

// app.wyp
setStore(store)
  • setStore(store)要在wepy.app的页面注入

然后就可以在任何一个组件中使用:

  import { connect } from 'wepy-redux'

  @connect({
num(state) {
return state.counter.num
},
inc: 'inc'
}, {
addNum: INCREMENT,
asyncInc
})
  • connect(states, actions)
  • states:可以是数组Array或者对象Object,用法和VuexmapState一样
// states为数组,元素只能是字符串,和`vuex`的用法一样
@connect(['num', 'inc'])
  • actions:只能是对象Object,对象的value可以是字符串(action.type)或者函数

@connect(null, {
test: 'TEST',
test2: (...args) => ({ type: 'TEST', payload: args }),
test3: { type: 'TEST', payload: 1 }
}) // 对于value是字符串,`test(1)`相当于
dispatch({
type: 'TEST',
payload: 1
}) // 调用`test(1, 2)`相当于
dispatch({
type: 'TEST',
payload: [1, 2]
}) // 调用`tes2()`相当于
dispatch(val.apply(store, args)) // this 指向store 但是自定义的函数要返回符合 { type: 'TEST', payload }的`action`对象 // 调用`test3()`
dispatch({ type: 'TEST', payload: 1 })
  • 最主要的是dispatch还是redux的dispatch,搞成这样是想把dispatch搞成和vuex的dispatch一样使用,可以支持异步(redux中原本的dispatch是同步的)
  • 这里的dispatch是通过middleware修改了redux原生的dispatch,使用了redux-promise,这样dispatch就可以支持异步以及promise
  • wepy还使用了redux-actions,来实现mutationsactions。如果不喜欢这个可以自己换redux-thunk,都可以,这些内容都属于redux(异步action),有自己的实现方案就行,你甚至都不用也可以。
  • 关于actions,如果是异步的,用test2的方式,同步的直接一个type字符串或者一个action对象

页面生命周期钩子、组件生命周期钩子

  • onLoad
  • onShow
  • onReady
  • onHide
  • onUnload

其中组件和页面公用onLoadonShow

还要区分三大实例App实例Page实例Component实例

组件间通信

小程序的组件间通信和web端的组件是有分别的,小程序的组件,两者通信主要通过广播的方式。

  • $broadcast:事件是由父组件发起,所有子组件都会收到此广播事件,除非事件被手动取消
  • $emit:事件发起组件的所有祖先组件会依次接收到$emit事件
  • $invoke:是一个页面或者组件对另一个组件中的方法的直接调用

// 所有在当前页面或者组件中的组件,如果events定义了changeState事件,就会调用其回调函数,以及传入参数
this.$broadcast('changeState', arg1, arg2, ...) // 所有在当前组件的父组件或者父页面中,如果events定义了getId事件,就会调用其回调函数,以及 传入参数11
this.$emit('getId', 11) // 调用当前页面或者当前组件中的组件AddNumber的方法,方法add定义于methods中,以及传入参数2,相对于AddNumber.methods.add(2)
this.$invoke('AddNumber', 'add', 2)

wepy框架构建小程序(1)的更多相关文章

  1. wepy框架开发小程序遇到的node-sass问题解决方案

    一.报错图 二.解决方案 主要是windows平台缺少编译环境, 1.先运行: npm install -g node-gyp 2.然后运行cmd:(右键点击:以管理员身份运行) 输入:npm ins ...

  2. 使用wepy开发微信小程序商城第二篇:路由配置和页面结构

    使用wepy开发微信小程序商城 第二篇:路由配置和页面结构 前言: 最近公司在做一个微信小程序的项目,用的是类似于vue的wepy框架.我也借此机会学习和实践一下. 小程序官方文档:https://d ...

  3. 使用wepy开发微信小程序商城第三篇:购物车(布局篇)

    使用wepy开发微信小程序商城 第三篇:购物车(布局篇) 前两篇如下: 使用wepy开发微信小程序商城第一篇:项目初始化 使用wepy开发微信小程序商城第二篇:路由配置和页面结构 基于上两篇内容,开始 ...

  4. 使用wepy开发微信小程序商城第一篇:项目初始化

    使用wepy开发微信小程序商城 第一篇:项目初始化 前言: wepy小程序项目初始化的操作,官方文档看了好几遍,感觉写得不是很清楚. 这篇写得挺好的:小程序开发之wepy 1.初始化项目 (1)全局安 ...

  5. mpvue框架的小程序和H5同时开发

    demo链接1.样式统一为了达到共用一套样式,采用px2rem-loader和px2rpx-loader进行代码的打包,细节如下: 由于UI设计图是在蓝湖上标注,宽度750,选择像素 PX 样式中直接 ...

  6. mpvue构建小程序(步骤+地址)

    mpvue 是一个使用 Vue.js 开发小程序的前端框架(美团的开源项目).框架基于 Vue.js 核心,mpvue 修改了 Vue.js 的 runtime 和 compiler 实现,使其可以运 ...

  7. WePY 在手机充值小程序中的应用与实践

    wepyjs 发布了两个月了,中间经历了很多版本更新,也慢慢开始有一些用户选择 wepyjs 作为开发框架来开发小程序,比如一些线上小程序. 以及一些来自网上的 wepyjs 的相关资源: demo源 ...

  8. 基于 mpvue 框架的小程序选择控件,支持单列,多列,联动

    最近在学着写mpvue小程序,在做选择控件时候遇到了点问题,按照微信小程序方法picker,很不方便! 在网上搜到一个很好用的组件下面给大家分享: 组件说明文档链接:https://go.ctolib ...

  9. 使用wepy开发微信小程序01——常用的组件

    1.axio.js 'use strict' import axios from 'axios' import wepyAxiosAdapter from 'wepy-plugin-axios/dis ...

随机推荐

  1. jmeter小问题解决方案合集

    问题1.在http请求,post的body中输入中文,显示乱码,怎么解决? 在jmeter的bin目录下,找到这个文件jmeter.properties,把jsyntaxtextarea.font.f ...

  2. 旅行青蛙分析(Android篇)

    近期旅行青蛙这款游戏非常的火热,周围的朋友.家人都养了一只小青蛙.看到网上有人说这款游戏可以直接逆向编译,没有加密:所以在搜索相关资料后花了一些时间进行逆向分析与修改.这篇文章里,我将介绍如何获取稀有 ...

  3. POJ 2796:Feel Good 单调栈

    题目,给定一个数列,n <= 1e5 .要求找出一个区间,使得其内区间最小值 * 区间总和的值最大,要求输出区间. 首先先维护一个单调递增的栈,同时记录一个lef值表示:lef[i]表示当前栈内 ...

  4. superset 配置连接 hbase

    1. 简单说明 最近配置superset查询hbase, 根据网上查询到的文档和经验,成功了一次(python3.4  superset 0.20.),后边重试换各种版本就不行了.最后根据错误终于发现 ...

  5. android 开发-(Contextual Menu)上下文菜单的实现

    在android3.0以后,安卓设备不在提供物理的菜单按键,同时,android应用提供了另外的菜单实现机制,来替代之前的菜单创建方式.安卓设备中,平常可以使用长按住某个内容弹出菜单选项.这就是我们需 ...

  6. 一、 Spring Cloud Eureka ,咱们先跑起来

    一.Spring Cloud 简介 Spring Cloud 是一个基于Spring Boot 实现的微服务架构开发工具.是一个涉及到服务治理.分布式配置管理.负载均衡.服务容错.API网关.消息总线 ...

  7. hibernate课程 初探单表映射2-7 hbm配置文件常用设置

    本节主要简介hbm配置文件以下内容: 1 mapping标签 2 class标签 3 id标签 1 hibbernate-mapping标签 schema 模式名称 catalog 目录名称 defa ...

  8. Error和Exception的区别?

    Error和Exception都继承自Throwable类 二者不同之处在于: Exception: 1.可以是可控制的(checked)或是不可控制的(unchecked) 2.表示一个有程序员编写 ...

  9. N 叉树的层序遍历

    给定一个 N 叉树,返回其节点值的层序遍历. (即从左到右,逐层遍历). 例如,给定一个 3叉树 : 返回其层序遍历: [ [1], [3,2,4], [5,6] ] 说明: 树的深度不会超过 100 ...

  10. Hyper-V 2016 配置管理系列(应用篇)

    远程连接到Hyper-V HOST 为了日常运维管理操作,使用远程PowerShell工作.Windows 10上安装了RSAT(远程管理工具 ).然后安装了Hyper-V控制台: 在能够远程连接到H ...