小程序学习---模块化编程

简介:       只要是做过编程的童鞋都知道模块化的思想,这样写出的代码更加简洁明了。模块化的代码让你的思路更加清晰,有利于当前编程,同时还有利于后期的维护。另外,很多有公共作用的代码,理所应当的提炼出来,以提高代码利用率。

      只要是做过编程的童鞋都知道模块化的思想,这样写出的代码更加简洁明了。模块化的代码让你的思路更加清晰,有利于当前编程,同时还有利于后期的维护。另外,很多有公共作用的代码,理所应当的提炼出来,以提高代码利用率。很多时候一个模块不仅适用于当前的项目,其他项目中同样可以使用的。


一、文件的作用域

JavaScript 文件中声明的变量和函数只在该文件中有效;不同的文件中可以声明相同名字的变量和函数,不会互相影响。通过全局函数 getApp() 可以获取全局的应用实例,如果需要全局的数据可以在 App() 中设置。来看下面的代码

点击(此处)折叠或打开

  1. // app.js
  2. 在app.js中定义全局变量
  3. App({
  4.   globalData: 1
  5. })
  6.   
  7. //weather.js,在这个文件中你可以使用上面定义的全局变量
  8. //首先,获取app实例,使用getApp()方法
  9. var app = getApp()
  10. //接着,你可以使用“.”方法来调用全局变量
  11. app.globalData++
  12. console.log(getApp().globalData)

 

二、使用模块化

可以将一些公共的代码抽离成为一个单独的 js 文件,作为一个模块。模块只有通过 module.exports 或者 exports 才能对外暴露接口。需要注意的是:

    1)exports  module.exports 的一个引用,因此在模块里边随意更改 exports 的指向会造成未知的错误。所以更推荐开发者采用 module.exports 来暴露模块接口,除非你已经清晰知道这两者的关系。

    2小程序目前不支持直接引入 node_modules , 开发者需要使用到 node_modules 时候建议拷贝出相关的代码到小程序的目录中。来看下面提供的实例

点击(此处)折叠或打开

  1. // common.js 在这个js文件中定义两个函数,方便在其他js文件中使用
  2. function sayHello(name) {
  3.   console.log(`Hello ${name} !`)
  4. }
  5. function sayGoodbye(name) {
  6.   console.log(`Goodbye ${name} !`)
  7. }
  8. //使用exports语法将上面定义的函数导出
  9. //注意,另外一个js文件看到的是 sayHelloFun,不是sayHello
  10. module.exports.sayHelloFun = sayHello
  11. exports.sayGoodbyeFun = sayGoodbye
  12.   
  13.   
  14. //weather.js 在这个文件中使用上面定义的函数
  15. //实现要使用require语法来引用上面的js文件
  16. //变量common中包含了上面导出的所有的东西
  17. var common = require('common.js')
  18. Page({
  19.   helloMINA: function() {
  20.      //使用”.”语法来调用导出的函数
  21.     common.sayHelloFun('MINA')
  22.   },
  23.   goodbyeMINA: function() {
  24.     common.sayGoodbyeFun('MINA')
  25.   }
  26. })

    注意:require目前不支持绝对路径,你使用相对路径


三、setData

   还记得每一个页面js文件吗,在它的Page中包含了一个data属性,我们说这个data里面放的就是页面的数据,如下:

点击(此处)折叠或打开

  1. Page({
  2.   data: {
  3.     temp: “28摄氏度”,
  4.     array: [{msg: '1'}, {msg: '2'}]
  5.   }
  6. })

    上面的代码很好,但是我们有一个问题,temp值不可能是预先定义好的,你可以看到temp这个key,但是它代表的温度值应该是动态加载的,会时刻发生变化。如何在js文件的其他地方来设置这个temp值呢?

   小程序提供setData方法来动态修改data内部的数据,它可以接收两个参数(ps:我们并不推荐直接使用“=”来赋值

    1object keyvalue 的形式表示将 this.data 中的 key 对应的值改变成 value

    2callback 是一个回调函数,在这次setData对界面渲染完毕后调用。

其中 key 可以非常灵活,以数据路径的形式给出,如 array[2].message,a.b.c.d,并且不需要在 this.data 中预先定义。

    需要注意下面几点

    1直接修改 this.data 而不调用 this.setData 是无法改变页面的状态的,还会造成数据不一致。

    2单次设置的数据不能超过1024kB,请尽量避免一次设置过多的数据。

    3)请不要把 data 中任何一项的 value 设为 undefined ,否则这一项将不被设置并可能遗留一些潜在问题。

    4setData是异步执行的

点击(此处)折叠或打开

  1. Page({
  2.   data: {
  3.     text: 'init data',
  4.   },
  5.   //这是一个自定义函数,在这里我们可以修改data的数据
  6.   changeText: function() {
  7.     //
  8.     this.setData({
  9.        //修改text的内容
  10.       text: 'changed data'
  11.       //在data中增加了一个num,它对应的value是1
  12.       num:1
  13.     })
  14.   },
  15. })



四、修改项目

1、之前的代码问题

   我们回顾一下之前的代码,可以看到weather.js文件中有大量的数据,这样让代码非常的不友好。首先,这样写让js文件很乱;其次,在一开始这是key并没有value,是后来动态获取的。
     


   2、提炼data

   我们将data中的数据单独提炼出来,放在另外一个js文件中(weather-data.js)。这里说一下我的习惯:

1)新建文件夹data,所有的数据文件都定义在这里

2)在data文件夹下面创建当前的weather-data.js文件

      

3)修改weather-data.js文件

点击(此处)折叠或打开

  1. //定义一个变量,这个变量包含了我们需要的所有的数据
  2. var allData = {
  3.     title: ["七天预报", "15天预报"],
  4.     weatherData: [{
  5.         date: "1-29",
  6.         image: "/images/sun.png",
  7.         state: "晴",
  8.         temperature: "-11 ~ -1 ℃"
  9.     },
  10.     。。。。
  11.     {
  12.         date: "2-4",
  13.         image: "/images/cloud.png",
  14.         state: "阴",
  15.         temperature: "-19 ~ -5 ℃"
  16.     }]
  17. };
  18.  //将变量导出,名字为allData
  19. //还是那句话,用户看到的是“=”左边的名字
  20. module.exports.allData = allData


现在数据已经成功的提炼出来了,那么记下来就要使用这些数据了

   3、setData


点击(此处)折叠或打开

  1. //使用require语句引入js文件
  2. //wData包含了weather-data.js中定义的所有的变量
  3. var wData = require("../../data/weather-data.js");
  4.   
  5. Page({
  6.   
  7.     /**
  8.      * 页面的初始数据
  9.      */
  10.     data: {
  11.           
  12.     },
  13.   
  14.     /**
  15.      * 生命周期函数--监听页面加载
  16.      */
  17.     onLoad: function (options) {
  18.         //给data中新增一个key→myData,它的value是wData.allData
  19.         //注意,由于wData中不一定是一个变量,因此用“.”方法来调用其中的某一个
  20.         this.setData({ myData: wData.allData});
  21.     },
  22.   
  23. })


相关文章
|
1月前
|
小程序 IDE 开发工具
Python编程--个人信息修改小程序
Python编程--个人信息修改小程序
|
2月前
|
人工智能 小程序 API
文字转语音神器+Python编程搞定语音报时小程序
文字转语音神器+Python编程搞定语音报时小程序
|
2月前
|
人工智能 小程序 API
ChatTTS+Python编程搞定语音报时小程序
ChatTTS+Python编程搞定语音报时小程序
|
2月前
|
小程序 JavaScript API
微信小程序开发学习之页面导航(声明式导航和编程式导航)
这篇文章介绍了微信小程序中页面导航的两种方式:声明式导航和编程式导航,包括如何导航到tabBar页面、非tabBar页面、后退导航,以及如何在导航过程中传递参数和获取传递的参数。
微信小程序开发学习之页面导航(声明式导航和编程式导航)
|
2月前
|
小程序 JavaScript
微信小程序学习之数据绑定,事件绑定,事件传参与数据同步的学习记录
本文介绍了微信小程序中的数据绑定、事件绑定、事件传参与数据同步的基本概念和使用方法,包括如何在data对象中定义数据、使用mustache语法在wxml中渲染数据、绑定和处理事件、事件对象属性、事件传参以及实现输入框与data数据的同步。
微信小程序学习之数据绑定,事件绑定,事件传参与数据同步的学习记录
|
3月前
|
小程序 前端开发 Java
SpringBoot+uniapp+uview打造H5+小程序+APP入门学习的聊天小项目
JavaDog Chat v1.0.0 是一款基于 SpringBoot、MybatisPlus 和 uniapp 的简易聊天软件,兼容 H5、小程序和 APP,提供丰富的注释和简洁代码,适合初学者。主要功能包括登录注册、消息发送、好友管理及群组交流。
109 0
SpringBoot+uniapp+uview打造H5+小程序+APP入门学习的聊天小项目
|
1月前
|
人工智能 小程序 Python
Python编程小案例——编一个事件提醒弹窗小程序
Python编程小案例——编一个事件提醒弹窗小程序
|
2月前
|
人工智能 小程序 API
ChatTTS+Python编程实现语音报时小程序
ChatTTS+Python编程实现语音报时小程序
|
3月前
|
小程序
关于我花了一个星期学习微信小程序开发、并且成功开发出一个商城项目系统的心得体会
这篇文章是作者关于学习微信小程序开发并在一周内成功开发出一个商城项目系统的心得体会,分享了学习基础知识、实战项目开发的过程,以及小程序开发的易上手性和开发周期的简短。
关于我花了一个星期学习微信小程序开发、并且成功开发出一个商城项目系统的心得体会
|
4月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的大学生党务学习平台小程序附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的大学生党务学习平台小程序附带文章源码部署视频讲解等
30 0
下一篇
无影云桌面