5.2 小程序的模块
上一小节中我们提取的数据文件data.js可以视作是小程序的一个模块,但现在还没有办法从其他文件访问这个模块。
我们还需要使用module.exports向外部暴露一个接口。在data.js文件的最下部添加以下代码:
定义好模块后,接下来就可以在其他js文件中引用这个模块。我们需要在post.js中引入data.js这个模块。
代码第一行的require(path)将模块引入到post.js中,并将模块对象赋值给dataObj。随后在onLoad函数里取出postList数据,并进行数据绑定。
使用require引用js模块时,要特别注意以下几点:
• 被引用的文件一定要带有扩展名js,这一点是不同于页面路径的。
• path路径不可以使用绝对路径,否则会报错。应该使用相对路径。
• 在JavaScript文件中声明的变量和函数只在该文件中有效,不同的文件中可以声明相同名字的变量和函数,不会互相影响。
所以,如果使用require('/data/data.js'),小程序会找不到data.js这个文件。
注意为什么是dataObj.postList?因为在输出模块时,我们是将postList作为一个object的属性赋值给module.exports的,参考代码清单5-2。所以在require时,得到的也是一个object并非是postList,需要使用dataObj.postList才能获取到真实的文章数据。
这样的做的好处是,object不仅可以包含postList,你还可以在data.js文件中定义除postList外的其他数据,并作为object的属性一起输出。
我们在上一小节中更改了postList的数据结构,所以要调整post.wxml里{{}}的语法才可以正常显示数据。
保存运行代码,项目正常地显示出了3篇文章数据。
事实上,require只是模块化的一种方式。还可以使用ES6的Module来编写模块。开发工具默认使用babel将开发者的ES6代码转化成ES5代码。