基本操做:css
# 安装脚手架工具 npm install wepy-cli -g # 建立一个新的项目 npm init standard myproject # 进入新项目文件夹和安装依赖 cd myproject && npm install # 跑项目 npm run dev
在编辑器设置中设置:vue
{ // 小程序设置为false "vetur.validation.template": false }
因为编辑器的设置有分用户设置
和工做区设置
,用户设置
就是全局的基本设置,因为上面的功能在Vue项目
须要开启,因此上面的设置代码应该在工做区设置中设置
。web
简单点说就是,用户设置
是全局设置,而工做区设置就是当前打开的文件夹有效
,也就是局部的设置。vuex
事件在web端是很重要的部分,这里要搞得清清楚楚。
事件分捕获阶段
、事件触发点
、冒泡阶段
。
咱们用的最多的是冒泡阶段
。原生小程序定义事件的方式是键值对的方式key:value
。npm
原生小程序的keys
:json
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端同样redux
wepy的事件定义:小程序
bindtap
替换@tap
catchtap
替换@tap.stop
capture-bind:tap
替换@tap.capture
capture-catch:tap
替换@tap.capture.stop
这些语法就是Vue
的语法,就是要区分这个key:value
,key是什么,value是什么数组
npm i wepy-compiler-sass --save-dev
而后在<style lang='scss'>
promise
.wpy
文件<template>
:对应.wxml
<script>
:分红两部分。一、逻辑部分:除了config对象,其余对应.js
文件;二、配置部分:即config对象,对应.json
<style>
:对应.wxss
config
对象对应.json
,可是能够是原生js对象,最后会格式化成JSON上面3个标签都支持src
和lang
属性:
src
:引入外联的文件,使用了这属性,内联的代码无效lang
:有多个值各个标签的lang
:
css
、可能值css、less、scss、stylus、postcss
wxml
、可能值wxml、xml、pug
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
,用法和Vuex
的mapState
同样// 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 })
vuex
的dispatch同样使用,能够支持异步(redux中本来的dispatch是同步的)middleware
修改了redux原生的dispatch,使用了redux-promise
,这样dispatch
就能够支持异步以及promiseredux-actions
,来实现mutations
和actions
。若是不喜欢这个能够本身换redux-thunk
,均可以,这些内容都属于redux(异步action),有本身的实现方案就行,你甚至都不用也能够。onLoad
onShow
onReady
onHide
onUnload
其中组件和页面公用onLoad
和onShow
还要区分三大实例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)