mpvue学习之路

前面简书同志分享的步骤和现阶段有些差异:本人现阶段学习的是v 2.0.0
文档:http://mpvue.com/mpvue/quickstart.html
mpvue是美团点评团队出品的小程序框架
传送门:https://www.jianshu.com/p/8f779950bfd9
WePY是由腾讯团队推出的小程序组件化开发框架

image.png

uni-app是一个使用vue.js开发所有前端应用的框架,开发者编写一套代码,可发布ios、android、H5以及各种小程序(微信、支付宝、百度、头条,钉钉、QQ)
传送门 https://uniapp.dcloud.io/

目录结构

类似于vue目录

  • main.js+App.vue:这两个是入口文件,相当于原生小程序框架中的app.json和app.js的复合体
    image.png

    mian.js为入口文件
    image.png

    webpack需要修改的地方
    传送门:http://mpvue.com/build/
    小程序每个页面的配置和全局的配置有专门的json文件管理,全局的是app.json,每个页面时main.json
    image.png

app.json文件

"pages":[
  "pages/index/main" //路径为main.js,不是index.vue
]

main.js

import vue from 'vue'
import App from './index'  //index.vue
const app=new vue(App)
app.$mount() //手动挂载

与vue的不同

跳转页面:

<a href="/pages/counter/main" class="counter">去往Vuex示例页面1</a>

新增页面(新建文件的时候)需要npm run dev 注意:新增文件必须重新启动,编译器不会自动检测新加入的文件

mpvue的局限性

1.在模板中,动态插入html的v-html指令不可用
可以使用<rich-text> wxParse(https://github.com/icindy/wxParse)来实现
2.在模板中,用于数据绑定的双括号{{}}中的表达式存在诸多限制
在vue本身模板内{{}},我们可以对绑定变量进行比较丰富的处理,比如:

  • 可以调用methods下的函数:例如:
<template>
  <div>{{ formatMessage(msg) }}</div>
</template>

<script>
export default {
  data() {
    return {
      msg: "Hello,World"
    }
  },
  methods: {
    formatMessage(str) {
      return str.trim().split(',').join('#')
    }
  }
}
</script>
  • vue中如果变量是对象的话,也可以调用对象的成员方法
<div>{{msg.trim().split(',').json('#')}}</div>
  • vue中可以使用过滤器来处理变量,最有用的场景算是格式化数据了
<div>{{msg | format}}</div>

以上这些mpvue中都不可以使用,只能使用简单的运算(+ - * % ! == ==== :> < [] .)
复杂的运算的替换方法为计算属性computed
3.在模板中,除事件监听外,其余地方都不能调用methods下的函数
在vue中,模板里调用methods部分定义的函数是非常常见的,比如下面这段代码,在v-if指令中调用getErrorNum()

<div v-if="getErrorNum()>0 && code == 10001" class="error">{{errmsg}}</div>

可是在mpvue里,就是不可用的! 因为小程序模板wxml里不支持这种函数调用,导致mpvue没有很好的方式转译过去。替代方法还是计算属性
4.在模板中,嵌套使用v-for,必须指定索引index
通常在vue模板中嵌套循环渲染数组的时候,一般是这个样子的

<template>
  <ul v-for="category  in  categories">
      <li  v-for = product  in  categories.product>
            {{product.name}}
      </li>
  </ul>
</template>

mpvue中

<template>
  <ul v-for="(category ) in  categories">
      <li  v-for = (product,proindex)  in  categories.product>
            {{product.name}}
      </li>
  </ul>
</template>

5.事件处理中注意点
在mpvue中,一般可以使用web的DOM事件名来绑定事件,mpvue会将web事件名映射成对应的小程序事件名,对应列表如下:

//左侧为web事件,右侧为小程序事件
click : tap
touchstart : touchstart
touchmove : touchmove
touchcancel : touchcancel
touchend : touchend 
tap : tap
longtap longtap
input input
change :change
submit : submit
blur : blur
focus : focus
reset : reset
confirm confirm
columnchange: columnchange
linechange :linechange
error: error
scrolltoupper : scrolltoupper
scrolltolower :scrolltolower
scroll : scroll

除了上面的的之外,web表单组件<input>/<textarea>的change事件会被转为blur事件,
keydown,keypress 键盘事件没有了,因为小程序没有键盘
vue事件修饰符
.prevent 可以直接干掉,因为小程序里没有默认事件,比如submit并不会跳转页面
.capture 支持1.0.9以后 事件捕获
含义:给元素添加一个监听器,当元素发生冒泡时,先触发带有该修饰符的元素,如果有多个该修饰符,则由外而内触发
.self 没有可以判断的标识
含义:只当事件在该元素本身(比如不是子元素)触发时触发,忽略事件冒泡和事件捕获的影响
7.对于表单,请直接使用小程序原生的表单组件
表单组件又多,又复杂,框架可能hold不住,所以在实际开发中,推荐使用小程序的表单组件标签来写,而不是使用web表单组件标签来写,当然了,在mpvue中使用了小程序的组件标签,数据绑定功能还是完全可以用的。示例:

<template>
  <div>
      <picker  @change="handlePickerChange" :value="selectedIndex"  :range="message">
            <view class="picker">
                当前消息:{{messages[selectedIndex]}}
            </view>
      </picker>
  </div>
</template>
<script>
  export default {
      data(){
        return {
         selectedIndex:0,
          message:['hello','word','haha']
      }
     },
     methods:{
        handlePickerChange  (e) {
         console.log(e)
       }
    }
   }
</script>

其他注意事项:

在web vue开发中,通常使用vue-router来进行页面路由,但是在mpvue中使用<a>标签和小程序原生api wx.navigateTo等来做路由功能,还有请求后端数据,vue中使用的axios,mpvue中使用wx.request等来进行

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

推荐阅读更多精彩内容