基于mpvue开发微信小程序(项目已开源)

花了两周时间,我的微信小程序终于开发完了(平时上班,基本上都是业余时间开发的). 下面来介绍一下项目的功能以及结构. 用到的技术栈 vue2+weui+es6;要看项目 记得切换到dev分支上; 这是一款辅助记忆单词的微信小程序,项目调用了百度翻译api,这样可以获取百度翻译的数据.

项目目录

build为相关配置; config为开发相关配置文件; dist为打包文件; src为所写的js文件了: 这里面  assets为静态文件; components为组件; models为状态管理(这个项目没有用到model); pages为所写的页面; service与utils为自己的工具(习惯这样了)

加单词页面: pages => myIndex

这个页面可以添加单词,由于没有后端服务器,所以所有的单词都是保存到localstorage,下方是代码:

  submit(e) {
    if(!e.target.value){
      return
    }
    // wx.removeStorage('words');
    let array = PubliceService.getStoreage('words') || [];
    let value = e.target.value;
    let valueObj = value ? {[value.word]: value.explain}:{};
    for (let i = 0; i < array.length; i++) {
      if(array[i][value.word]){
        PubliceService.openConfirm({title: '单词有重复', content: '您输入的单词已存在列表中,是否替换?'}, () => {
          array[i][value.word] = value.explain;
          PubliceService.setStoreage('words', PubliceService.transformArrayData(array,false,true));
          this.inputValue = '';
          this.textareaValue = '';
        });
        return;
      }
    } // 判断所提交的单词是否有重复,如果有重复则提醒用户是否替换,有重复的话,直接给更新,然后终止 不继续往下走了;
    array.push(valueObj);
    this.inputValue = '';
    this.textareaValue = '';
    this.$forceUpdate();// 强制刷新页面
    wx.showToast({
      title:'新增成功',
      icon:'success',
      duation:1500
    });
    PubliceService.setStoreage('words', PubliceService.transformArrayData(array,false,true)) // 给这个数组对象加一个id
    bus.$emit('addHandle');
  };
 以上是首页的功能;

个人中心页面:pages=>my

这个相对简单,获取用户信息,然后根据在localstorage里的数组长度给它一个等级,等级规则定义在config里; 在mounted的函数里直接定义这个方法就可以;

  initPage(){
    let array = PubliceService.getStoreage('words');
    console.log(array);
    this.wordTotal = array.length;
    this.degree = PubliceService.returnDegree(this.wordTotal);
  }

单词列表页面 pages=>wordlist

然后就是最后的单词列表页面,花的时间相对来说多一些,因为涉及到了删除,编辑以及简单的修改数据的功能:

这里点击编辑会跳到编辑单词页面:

这个页面和首页很像,讲道理是可以复用的,没太多时间去弄这个. 就简单复用了一些组件,函数没的复用. 以下是我编辑函数保存时候的代码:

  submit(e){
    // wx.removeStorage('words');
    let array = PubliceService.getStoreage('words') || [];
    let value = e.target.value;
    console.log(array,value);
    for(let i = 0;i<array.length;i++){
      for(let key in array[i]){
        if(key === value.word && key !== 'key'){
          array[i][value.word] = value.explain;
          console.log(array);
          wx.showToast({
            title:'更新成功',
            icon:'success',
            duation:1500
          });
          PubliceService.setStoreage('words',array);
          PubliceService.debounceLog(500,()=>{wx.navigateBack({delta:1})});

          return
        }
      }
    }
    let obj = {[value.word]:value.explain,key:array.length};
    array.push(obj);
    wx.showToast({
      title:'新增成功',
      icon:'success',
      duation:1500
    });
    PubliceService.debounceLog(500,()=>{wx.navigateBack({delta:1})});
    PubliceService.setStoreage('words',array);
    console.log(array)

  }

这里说明一下 用了双层循环的原因,因为当初在最开始写的时候需要做判断这里面是不是有重复的单词,然后当时为了图简单,直接把数据结构写成这样: [{test:'测试',key:0},{word:'单词',key:1}],只能说这样判断是否有重复是简单了很多,但是在我拿英文单词的时候就得for in循环了,列表上循环也是这样的,只能说没时间去弄了,既然写了就写了吧! 删除功能是通过es6的filter过滤的,这个时候之前在添加单词的key值就用上了.

由于是第一次用vue写东西,很多vue的基本知识都不是特别的扎实,各位老铁看了如果哪有问题,请一定及时帮我指出,最好能提一些建议,互相成长. 码云地址:https://gitee.com/kaykie/miniprogress

如果这个微信小程序对你有帮助的话,请一定给我一个星星,下一个个人微信小程序项目我会用vuex来写,希望能得到各位的支持,给点动力吧!

总结

我的本命框架是react,公司也是用的react来开发项目的(技术栈为react+redux-sage+antd+rn+react-router),刚开始从react转到vue做开发,还是有一些不习惯的,很多语法糖都不一样,我也是一边摸索一边写这个小程序,像项目中用到的bus,不同组件之前的通信,之前用react因为用的都是redux,所以相对来说还是新奇的.当然也有遇到过一些坑,我在我自己的博客上也有提及,这个坑自己在react开发中也是经常遇到过的,后来随着对vue越来越熟悉,发现也没有开始想像的那么难,当然了页面中还没有用到filter以及director;在下一个项目中我也要尝试的用一下.

另外不得不说,感谢美团对开源社区的贡献. 感谢star!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏小巫技术博客

App性能优化浅谈

19930
来自专栏猿人谷

多核环境下cache line的测试

前阵子接触到一道关于数组内部链表(多用于内存池技术)的数据结构的题, 这种数据结构能够比普通链表在cache中更容易命中, 理由很简单, 就是因为其在地址上是连...

26890
来自专栏前端杂货铺

deno深入揭秘及未来展望

node.js之父Ryan Dahl在一个月前发起了名为deno的项目,项目的初衷是打造一个基于v8引擎的安全的TypeScript运行时,同时实现HTML5...

21710
来自专栏程序员互动联盟

Android上学习ARM指令集系列第一篇

打算为入门ARM指令集写点初级文章,没什么远大理想,写到哪里算哪里,权当娱乐罢了。工作中经常碰到crash的问题,如果是debug版本,那还好, 调...

36980
来自专栏阿杜的世界

【译】Go语言编程模式

在2016年伦敦举办的QCon大会上,Peter Bourgon做了《六年Go语言设计经验》的报告,重点探讨了在使用Go进行开发时的编程模式和反模式。在这里,我...

13330
来自专栏大数据文摘

维基百科中的数据科学:手把手教你用Python读懂全球最大百科全书

几年前谁能想到,匿名贡献者们的义务工作竟创造出前所未有的巨大在线知识库?维基百科不仅是你写大学论文时最好的信息渠道,也是一个极其丰富的数据源。

17030
来自专栏芋道源码1024

告诉你 Redis 是一个牛逼货

Redis 是一个 Key-Value 存储系统。和 Memcached 类似,它支持存储的 value 类型相对更多,包括 string(字符串)、 list...

15000
来自专栏Coco的专栏

【前端性能】浅谈域名发散与域名收敛

31520
来自专栏Android 开发者

开发者也是用户 — 第一部分:构建更具可用性的 UI 与 API 的 5 个方针

20420
来自专栏Play & Scala 技术分享

PlayScala 2.5.x - 实现完全异步非阻塞的流数据导出

29940

扫码关注云+社区

领取腾讯云代金券