HuJiangTeach
小程序--沪江问答
初窥
从一个hello world开始
微信开发者工具生成 目录如下:
.
|-- app.js
|-- app.json
|-- app.wxss
|-- pages
| |-- index # 主页
| | |-- index.js
| | |-- index.json
| | |-- index.wxml
| | `-- index.wxss
| `-- log # 日志页面
| | |-- log.js
| | |-- log.json
| | |-- log.wxml
| | `-- log.wxss
`-- utils # 工具
`-- util.js
大体为:
每一个page即是一个页面文件 ,每个页面有一个js/wxml/wxss/json文件 规定:描述页面的这四个文件必须具有相同的路径与文件名。
全局下同路,为公共的逻辑,样式,配置
与html不同:用view text navigator
代替 div span a
开发者文档走马观花
app.json: 注册pages window tabBar networkTimeout
组件说明
*.js: 作为逻辑层 与wxml交互 有着丰富的 网络,媒体,文件,数据缓存,位置,设备,界面...的api
官方文档
*.wxml: 数据驱动的视图层 + 微信提供了大量的组件 表单 导航 媒体 ...
一切具备 马上动工
生成目录
.
|-- app.js
|-- app.json
|-- app.wxss
|-- common.js #公用js
|-- images #存放项目图片
|-- style
| |-- weui.wxss # 引入weui样式 万一你自己不想写css样式呢
|-- pages
| |-- search # 首页
| | |-- search.js
| | |-- search.json
| | |-- search.wxml
| | `-- search.wxss
| | |--search # 搜索
| | | |-- search.js
| | | |-- search.json
| | | |-- search.wxml
| | | `-- search.wxss
| |--square # 广场
| | |-- square.js
| | |-- square.json
| | |-- square.wxml
| | `-- square.wxss
| | |--question # 提问
| | | |-- question.js
| | | |-- question.json
| | | |-- question.wxml
| | | `-- question.wxss
| |--topics # 话题
| | |-- topics.js
| | |-- topics.json
| | |-- topics.wxml
| | `-- topics.wxss
| |--user # 我的
| | |-- user.js
| | |-- user.json
| | |-- user.wxml
| | `-- user.wxss
| | |--register # 注册登录
| | | |-- register.js
| | | |-- register.json
| | | |-- register.wxml
| | | `-- register.wxss
| | |--user-index # 用户
| | | |-- user-index.js
| | | |-- user-index.json
| | | |-- user-index.wxml
| | | `-- user-index.wxss
| `-- log # 日志页面
`-- utils # 工具
`-- util.js
请先在在app.json中注册页面,设置navigation,配置tabbar
{
"pages": [
"pages/search/search",
"pages/search/search/search",
"pages/square/square",
"pages/square/question/question",
"pages/topics/topics",
"pages/user/user",
"pages/user/register/register",
"pages/user/user-index/user-index"
],
"window": {
"backgroundTextStyle": "light",
"backgroundColor": "#fff",
"navigationBarBackgroundColor": "#11CF7E",
"navigationBarTitleText": "沪江问答",
"navigationBarTextStyle": "black",
"enablePullDownRefresh": "true"
},
"tabBar": {
"color": "black",
"selectedColor": "#19FA28",
"backgroundColor": "#ffffff",
"borderStyle": "black",
"list": [{
"pagePath": "pages/search/search",
"text": "搜索",
"iconPath": "images/search.png",
"selectedIconPath": "images/search_selected.png"
},
{
"pagePath": "pages/square/square",
"text": "广场",
"iconPath": "images/square.png",
"selectedIconPath": "images/square_selected.png"
},
{
"pagePath": "pages/topics/topics",
"text": "话题",
"iconPath": "images/topics.png",
"selectedIconPath": "images/topics_selected.png"
},
{
"pagePath": "pages/user/user",
"text": "我的",
"iconPath": "images/user.png",
"selectedIconPath": "images/user_selected.png"
}
]
}
}
1.block对数据的渲染
布局分为搜索框,文本提示区域
提问模块用block进行渲染三个tabs,以及搜索的类型
//js
var status = true;
Page({
data: {
types: ['英语', '日语', '韩语', '法语'],
English: ['英语词汇', '英语口语', '英语阅读', '综合能力', '四六级', '专四专八', '商务英语', '翻译考试', '考研英语',
'留学考试', '其他考试', '影视娱乐', '原版书', '欧美文化'
],
Jan: ['初级日语', '日语教材', '日语听说读写', '日语翻译', 'N1', 'N2', 'N3N4N5', '其他日语考试', '日本留学'],
Koa: ['韩语入门', '韩语口语', '韩语翻译', '留学就业', 'TOPIK初级', 'TOPIK中高级', '其他考试', '韩剧韩综'],
France: ['法语语法', '法语考试', '留学法国', '翻译互助', '法国文化', '法国口语', '法语听力', '法语写作', '法语语音',
'法语词汇'
],
currentTab: 0,
current: 0
},
toastShow: function(event) {
console.log("提交成功");
status = false
this.setData({ status: status }) //setData方法可以建立新的data属性,从而起到跟视图实时同步的效果
setTimeout(function() {
wx.navigateBack({
url: '/pages/search/search/search'
})
}, 3000);
},
toastHide: function(event) {
status = true
this.setData({ status: status })
},
navbarTap: function(e) {
this.setData({
currentTab: e.currentTarget.dataset.idx
})
},
currentTap: function(e) {
this.setData({
current: e.currentTarget.dataset.idx
})
}
})
tips:小程序中flex
布局基本无兼容性问题 ,可大胆使用
父元素设置display:flex,对主元素设置flex:1,其他的元素设置宽度,即可实现响应式布局。so easy.
由于没有接口调用,自己只能在js的data里面自己设置数据来传输了(有点垃圾哈,努力成长中😜
//js
var app = getApp();
Page({
/**
* 页面的初始数据
*/
data: {
navbar: ['最热', '最新'],
currentTab: 0,
areaIndex: 0,
area: ['英语', '日语', '韩语', '法语'],
hotest: [{
id: 0,
'url': 'https://timgsa.baidu.com/timg?image&quality=80&size=b10000_10000&sec=1501136220&di=9e545f019ff063f2e2d40ff093e69ca4&imgtype=jpg&src=http%3A%2F%2Fg.hiphotos.baidu.com%2Fimage%2Fpic%2Fitem%2Fcaef76094b36acaf90900d7d76d98d1001e99c3b.jpg',
'name': '暗香疏影49938',
"type": '综合能力',
"text": '我住在宿舍里,学校宿舍没有网,沪江的课程可以下载到手机里离线听吗?',
"apply": '6人回答'
},
{
id: 1,
'url': 'https://timgsa.baidu.com/timg?image&quality=80&size=b10000_10000&sec=1501136231&di=df09010b54644a6d6de64813e448295a&imgtype=jpg&src=http%3A%2F%2Fh.hiphotos.baidu.com%2Fimage%2Fpic%2Fitem%2F63d0f703918fa0ec7f92ff8c2c9759ee3c6ddbde.jpg',
'name': '青涩不及当初',
"type": '英语词汇',
"text": '一般英语考什么?',
"apply": '4人回答'
},
{
id: 2,
'url': 'https://timgsa.baidu.com/timg?image&quality=80&size=b10000_10000&sec=1501135857&di=fa29ccd79a69991fed6e61aa53a2636a&imgtype=jpg&src=http%3A%2F%2Ff.hiphotos.baidu.com%2Fimage%2Fpic%2Fitem%2F562c11dfa9ec8a13165ec961fd03918fa1ecc0ef.jpg',
'name': '暗香疏影49938',
"type": '综合能力',
"text": '我住在宿舍里,学校宿舍没有网,沪江的课程可以下载到手机里离线听吗?',
"apply": '6人回答'
},
{
id: 3,
'url': "https://timgsa.baidu.com/timg?image&quality=80&size=b10000_10000&sec=1501135905&di=f05bd295743084fe249d3727169d58fb&imgtype=jpg&src=http%3A%2F%2Fe.hiphotos.baidu.com%2Fimage%2Fpic%2Fitem%2F5ab5c9ea15ce36d371ed1db130f33a87e850b142.jpg",
'name': '老老',
"type": '综合能力',
"text": '王翰怎么说?',
"apply": '4人回答'
}
],
newest: [{
id: 0,
'url': 'https://timgsa.baidu.com/timg?image&quality=80&size=b10000_10000&sec=1501136337&di=3901868532c26c893342ba8746ce3c07&imgtype=jpg&src=http%3A%2F%2Fc.hiphotos.baidu.com%2Fimage%2Fpic%2Fitem%2F94cad1c8a786c9177d1fc8b8c33d70cf3bc75716.jpg',
'name': 'urtv4ihuysk',
"type": '英语口语',
"text": '学口语是不是要词汇量足?基础好?',
"apply": '待回答'
},
{
id: 1,
'url': 'https://timgsa.baidu.com/timg?image&quality=80&size=b10000_10000&sec=1501136325&di=b58a79af6074b024887dccba02cdb91d&imgtype=jpg&src=http%3A%2F%2Fd.hiphotos.baidu.com%2Fimage%2Fpic%2Fitem%2Fe61190ef76c6a7ef1d0732a7f7faaf51f3de660a.jpg',
'name': 'uku6ezbexruk',
"type": '欧美文化',
"text": '有首歌开始是oh~so damn i.got feeling you,i got feeling ah no no no 然后是一段一个男的唱的rap这是什么 ?',
"apply": '待人回答'
},
{
id: 2,
'url': 'https://timgsa.baidu.com/timg?image&quality=80&size=b10000_10000&sec=1501135997&di=b744bfb0dc901894d893a416377e3f2f&imgtype=jpg&src=http%3A%2F%2Fh.hiphotos.baidu.com%2Fimage%2Fpic%2Fitem%2F03087bf40ad162d99d67fb9d1bdfa9ec8b13cda2.jpg',
'name': '雨亦是泪',
"type": '英语口语',
"text": '2017.07.16的每日一句有个单词发音错了。says应该是发[se-z]不是[sei-z。say原型发[sei],says/said发[se-z]。',
"apply": '6人回答'
},
{
id: 3,
'url': "https://timgsa.baidu.com/timg?image&quality=80&size=b10000_10000&sec=1501136315&di=0debe0cdc33a5f7997a6a3e9ba682e51&imgtype=jpg&src=http%3A%2F%2Fg.hiphotos.baidu.com%2Fimage%2Fpic%2Fitem%2F77094b36acaf2edd1d88d368871001e939019332.jpg",
'name': '夜晚星辰79867',
"type": '英语词汇',
"text": '王翰怎么说?',
"apply": '4人回答'
}
]
},
navbarTap: function(e) {
this.setData({
currentTab: e.currentTarget.dataset.idx
})
},
bindPickerChange: function(e) {
this.setData({
areaIndex: e.detail.value
})
},
ask: function() {
wx.navigateTo({
url: '/pages/square/question/question'
})
},
})
踩过的坑
刚接触小程序,讲真,刚开始他一脸懵逼,无从下手啊,在网上找了几个例子,看了下,自己开始照猫画虎。也顺利的完成了一个对自己来说小小的项目吧。
1.flex布局的问题
刚开始不是很了解,一直得不到想要的效果,看了flex布局,自己也对display的几个属性值做了下总结,来自前端菜鸟对 css display属性的理解,不足的地方还请老司机们指正。
2.对于数据存储的问题
这里给自己挖了个超级大的坑,在本地存储了好多图片(自己做数据嘛,好多头像只能自己搞定了),我擦,在上传到github上面的时候,死活上不去,查来查去,数据他多了,好吧,这样的话,老铁们,那就不要存在本地,悲催,还是老老实实写网址吧。
3.navigator的跳转
navigator也就相当于html中的a标签,但是我觉得啊,它们还是有差距的,只要看到跳转,是不是就想到navigator。但是呢,不要在一个页面反复使用它,不然它跳不过去啊。我觉得有必要看一波navigator,了。对于有些页面的跳转,没必要全部写navigator,可以在它们的标签里面给它们绑定事件,我觉得这样会更好。wx.navigateTo,wx.redirectTo,wx.switchTab,wx.reLaunch,wx.navigateBack等来实现页面跳转。