只接受发布货源信息,不可发布违法信息,一旦发现永久封号,欢迎向我们举报!
免费发布信息
16货源网 > 餐饮行业新闻资讯 > 网站建设资讯大全 >  mpvue开发小程序教程(五)


  • 【莆田鞋厂家分类】
  • 【奢侈大牌包包厂家分类】
  • 【潮牌奢侈服饰鞋子厂家分类】
  • 【名表厂家分类】

厂家货源分类区域

mpvue开发小程序教程(五)

发布时间:2019-09-24 06:25:18  来源:网友自行发布(如侵权请联系本站立刻删除)  浏览:   【】【】【
作者:一斤代码,原文地址:https://dwz.cn/u3dqw5wd在上一章节中,我们了解了组件的三个基本特性以及组件的基本使用方法。在实际的小程序开发中,我们应该以组件的思维去设计每个小程序的功
mpvue开发小程序教程(五)

作者:一斤代码,原文地址:https://dwz.cn/u3dqw5wd

在上一章节中,我们了解了组件的三个基本特性以及组件的基本使用方法。在实际的小程序开发中,我们应该以组件的思维去设计每个小程序的功能页面,对其进行合理的组件拆分,让每个部分都保持功能简洁、条理清楚、各司其职,这样会让代码变得更易理解和维护,间接的也提升了代码的健壮性,降低出现Bug的几率,即使出现Bug,也会更容易进行定位和调试。

由于mpvue采用的是Vue框架的基础设施,所以大部分的功能都是和Vue一致的。但是,mpvue的代码毕竟最终还是要转译成小程序原生框架下的代码的,由于小程序框架本身存在的一些功能限制,导致有些功能不能被翻译过去,也就是说有些标准的Vue功能在mpvue下是不可以使用或有特殊限制的。

今天我们就来罗列一下,在使用mpvue的时候那些需要特别注意的点。

1. 在模板中,动态插入HTML的v-html指令不可用

这条很好理解,小程序的界面并不是基于浏览器的BOM/DOM的,所以不能动态的在界面模板里直接插入HTML片段来显示。

题外话,如果有在小程序里插入html片段的需求怎么办?可以用 <rich-text>组件或者 wxParse(https://github.com/icindy/wxParse)来实现。

2. 在模板中,用于数据绑定的双括号语法{{}}中的表达式功能存在诸多限制

在Vue本身的模板内双括号语法中,我们可以对绑定变量进行比较丰富的处理,比如:

  • 可以调用methods下的函数, 例如:

  1. <template>

  2. <div>{{ formatMessage(msg) }}</div>

  3. </template>


  4. <script>

  5. export default {

  6. data() {

  7. return {

  8. msg: "Hello,World"

  9. }

  10. },

  11. methods: {

  12. formatMessage(str) {

  13. return str.trim().split(',').join('#')

  14. }

  15. }

  16. }

  17. </script>

  • 如果变量是对象的话,也可以调用对象的成员方法

  1. <div>{{ msg.trim().split(',').join('#') }}</div>

  • 可以使用过滤器来处理变量,最有用的场景算是格式化数据了

  1. <div>{{ msg | format }}</div>

以上这些好用的功能,在mpvue中,记得都是通通不能用的哦!!!

我们只能在双括号中使用一些简单的运算符运算( +-*%?:!=====><[].)。

但是也得找些可用的替代方案呐,大伙先考虑使用计算属性(computed)来做吧。

3. 在模板中,除事件监听外,其余地方都不能调用methods下的函数

在Vue中,模板里调用 methods部分定义的函数是非常常见的,比如下面这段代码所示,在 v-if指令中调用函数 getErrorNum()

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

可是,在mpvue里就是不可以用!因为在小程序原生模板 wxml里就不支持这种函数调用,导致mpvue没有很好的方式转译过去(虽然小程序有 wxs,但是感觉翻译过去mpvue要做的工作会比较复杂)。

所以,可用的替代方案可能还是计算属性了。

4. 在模板中,不支持直接绑定一个对象到styleclass属性上

在Vue中我们可以为HTML元素的 classstyle绑定一个对象,并按照对象内的属性值来决定是否添加对应的属性名到HTML元素的样式名。示例如下:

  1. <template>

  2. <div :class="classObject"></div>

  3. </template>


  4. <script>

  5. export default {

  6. data() {

  7. return {

  8. classObject: {

  9. active: true,

  10. 'text-danger': false

  11. }

  12. }

  13. }

  14. }

  15. </script>

上面这段代码的运行后生成的HTML将是:

  1. <div class="active"></div>

但是在mpvue下面这个特性也不能用,按官方说法是由于涉及到一些性能相关的原因。那如果要动态改变组件的 class该怎么写呢?官方给出的方式是这样的:

  1. <div :class="{ active: classObject.active, 'text-danger': classObject['text-danger']}"></div>

其实改动不大,稍微多打了一些字而已,相当于在模板的 class里再定义一个对象罢了。但是据文档中说这样会提升性能。好吧,为了性能,这点麻烦还是能忍受的。但是它又说了:从性能考虑,建议不要过度依赖此......看来即使这样,也还是有性能问题。

看来最好一点的方案,还是得使用计算属性,直接生成一串样式的字符串,绑定到 classstyle上:

  1. <template>

  2. <div :class="classStr"></div>

  3. </template>


  4. <script>

  5. export default {

  6. data() {

  7. return {

  8. classObject: {

  9. active: true,

  10. 'text-danger': false

  11. }

  12. }

  13. },

  14. computed: {

  15. classStr() {

  16. let arr = []

  17. for (let p in this.classObject) {

  18. if (this.classObject[p]) {

  19. arr.push(p)

  20. }

  21. }

  22. return arr.join(' ')

  23. }

  24. }

  25. }

  26. </script>

5. 在模板中,嵌套使用v-for时,必须指定索引index

通常,我们在Vue模板中嵌套循环渲染数组的时候,一般是这个样子的:

  1. <template>

  2. <ul v-for="category in categories">

  3. <li v-for="product in category.products">{{product.name}}</li>

  4. </ul>

  5. </template>

但在mpvue中使用这种嵌套结构的 v-for时,则必须每层的 v-for上都给出索引,且索引需取不同名字:

  1. <template>

  2. <ul v-for="(category, index) in categories">

  3. <li v-for="(product, productIndex) in category.products">{{product.name}}</li>

  4. </ul>

  5. </template>

6. 事件处理中的注意点

在mpvue中,一般可以使用Web的DOM事件名来绑定事件,mpvue会将Web事件名映射成对应的小程序事件名,对应列表如下:

  1. // 左侧为WEB事件 : 右侧为对应的小程序事件

  2. {

  3. click: 'tap',

  4. touchstart: 'touchstart',

  5. touchmove: 'touchmove',

  6. touchcancel: 'touchcancel',

  7. touchend: 'touchend',

  8. tap: 'tap',

  9. longtap: 'longtap',

  10. input: 'input',

  11. change: 'change',

  12. submit: 'submit',

  13. blur: 'blur',

  14. focus: 'focus',

  15. reset: 'reset',

  16. confirm: 'confirm',

  17. columnchange: 'columnchange',

  18. linechange: 'linechange',

  19. error: 'error',

  20. scrolltoupper: 'scrolltoupper',

  21. scrolltolower: 'scrolltolower',

  22. scroll: 'scroll'

  23. }

除了上面的之外,Web表单组件 <input><textarea>的change事件会被转为blur事件。

然后,像 keydownkeypress之类的键盘事件也没有了,因为小程序没有键盘,所以不需要这些事件。

还有,Vue里面绑定事件的时候,可以指定事件修饰符,但是在mpvue里,官方给出了一些注意信息:

  • .stop 的使用会阻止冒泡,但是同时绑定了一个非冒泡事件,会导致该元素上的 catchEventName 失效!【这个亲测了一下,感觉是最新版本里修复了还是怎么的,没有文档里说的这个问题了】

  • .prevent 可以直接干掉,因为小程序里没有什么默认事件,比如submit并不会跳转页面【也就是不需要支持】

  • .capture 支持 1.0.9 【也就是在 mpvue 1.0.9及以后版本支持】

  • .self 没有可以判断的标识 【也就是不支持】

  • .once 也不能做,因为小程序没有 removeEventListener, 虽然可以直接在 handleProxy 中处理,但非常的不优雅,违背了原意,暂不考虑【也就是不支持】

所以呢,总之当你在遇到事件相关的问题,请回来查看一下文档,看看自己是否已经掉在坑里了。

7. 对于表单,请直接使用小程序原生的表单组件

一句话,表单组件又多又复杂,框架可能Hold不住。所以在实际开发中,推荐直接使用小程序的表单组件标签来写,而不是使用Web的表单组件标签来写。当然了,在mpvue中使用了小程序的组件标签,数据绑定功能还是完全可以用的。给个示例:

  1. <template>

  2. <div>

  3. <picker @change="handlePickerChange" :value="selectedIndex" :range="messages">

  4. <view class="picker">当前消息:{{ messages[selectedIndex] }}</view>

  5. </picker>

  6. </div>

  7. </template>


  8. <script>

  9. export default {

  10. data () {

  11. return {

  12. selectedIndex: 0,

  13. messages: ['Hello', 'World', 'Haha']

  14. }

  15. },

  16. methods: {

  17. handlePickerChange (e) {

  18. console.log(e)

  19. }

  20. }

  21. }

  22. </script>

其他注意事项

另外,在Vue开发Web应用的时候,通常使用 vue-router来进行页面路由。但是在mpvue小程序开发中,不能用这种方式,请使用 <a>标签和小程序原生API wx.navigateTo等来做路由功能。

还有就是请求后端数据,我们通常在Web开发中使用 axios等ajax库来实现,但是在小程序开发中也是不能用的,也请使用小程序的原生API wx.request等来进行。

推荐阅读

1、mpvue开发小程序教程(一)

2、mpvue开发小程序教程(二)

3、mpvue开发小程序教程(三)

责任编辑:爱编码
热门阅读排行

实力商家展示

  • 任县飞泰机械厂
  • 山东胜天半子科技有限公司
  • 盛通四方数字商品市场股份有限
  • 中添区块链技术(深圳)有限公
  • 北京胜天半子网络科技有有限公
  • © 16货源网