首页开发
Web H5 中的标签例如:div 等在小程序中并不适用。小程序中有自己规定的标签组件,详情请参照文档。
首页WXML
- 把上章节 index.html 中body内的结构拷贝到 index.wxml 中。例如:
<body>
*
*
*
</body>
去掉body结束标签上发的 script 脚本引用。
把 body 标签替换成 view 标签并添加 class 值为 page-body 以便修改样式。
<!-- 之前 -->
<body></body>
<!-- 修改为 -->
<view class="view-container"></view>
- header、footer、nav、div、form、 h1 和 p 标签替换为 view 标签。例如:
<!-- 之前 -->
<header class="page-header"></header>
<!-- 修改为 -->
<view class="page-header"></view>
- 把 span 标签替换为 text 标签。错误提示的 span 可以删掉。
<!-- 之前 -->
<span class="user-nickName">张三</span>
<!-- 修改为 -->
<text class="user-nickName">张三</text>
- 把 a 标签替换为 navigator 标签,并修改 href 属性为 url 属性及调整其对应的地址。例如:
<!-- 之前 -->
<a href="./index.html">首页</a>
<a href="./history.html">历史</a>
<!-- 修改为 -->
<navigator url="/pages/index/index">首页</navigator>
<navigator url="/pages/history/history">历史</navigator>
- 修改 img 标签为 image 标签,并把头像文件存放在更目录下 images 文件夹之内。
<!-- 之前 -->
<img class="user-avatar" src="./avatar.png">
<!-- 修改为 -->
<image class="user-avatar" src="/images/avatar.png"></image>
- 修改 select 选择控件,替换为 pick 小程序组件。
<!-- 之前 -->
<select class="form-item-select" name="company">
<option disabled selected value="0">请选择</option>
<option value="ems">EMS</option>
<option value="shunfeng">顺丰</option>
<option value="yuantong">圆通</option>
<option value="zhongtong">中通</option>
<option value="shentong">申通</option>
<option value="huitongkuaidi">汇通</option>
<option value="yunda">韵达</option>
<option value="debangwuliu">德邦</option>
</select>
<!-- 修改为 -->
<picker class="form-item-select">
请选择
</picker>
- wxml 改造完代码小结
<view class="view-container">
<view class="page-header">
<view class="user-info">
<image class="user-avatar" src="/images/avatar.png"></image>
<text class="user-nickName">张三</text>
</view>
<view class="page-nav">
<navigator url="/pages/index/index">首页</navigator>
<navigator url="/pages/history/history">历史</navigator>
</view>
</view>
<view class="page-body">
<view class="form-section">
<view class="container">
<view class="h1">小猪快递查询</view>
<view class="form-list">
<view class="form-item">
<picker class="form-item-select">
请选择
</picker>
</view>
<view class="form-item">
<input class="form-item-input" type="number" name="order" />
</view>
<view class="form-item">
<button id="submit">提交</button>
</view>
</view>
</view>
</view>
</view>
<view class="page-footer">
<view>Copyright 2018 扎克斯未来体验技术部出品</view>
</view>
</view>
首页样式
- 全局样式
app.wxss
我们把需要全局使用的样式放置于 app.wxss 中,拷贝上章节 app.css 中全局使用的代码。
修改 html 和 body 选择器部分, html 替换为 page ,body 替换为 .view-container,如下所示:
page{
height: 100%;
}
.view-container{
min-height: 100%;
display: flex;
flex-direction: column;
font: 14px/1.5 "Helvetica Neue", Helvetica, Arial, "Microsoft Yahei", sans-serif;
color: #333;
}
.page-body{
flex: 1;
}
.page-header{
padding: 5px 10px;
box-shadow: 2px 2px 2px #ccc;
}
.user-info{
display: inline-block;
}
.user-info .user-avatar{
width: 40px;
height: 40px;
vertical-align: middle;
border-radius: 50%;
}
.user-info .user-nickName{
vertical-align: middle;
}
.page-nav{
float: right;
font-size: 16px;
line-height: 40px;
}
.container{
max-width: 750px;
margin: 0 auto;
padding: 30px;
}
.page-footer{
font-size: 12px;
line-height: 40px;
text-align: center;
color: #999;
letter-spacing: .5px;
}
- 首页样式
/pages/index/index.wxss
把 app.css 中首页相关的样式拷贝到 index.wxss 中。
修改一下 detail-section 的 paddingTop 属性,让其不要距离顶部太远。
/* 首页表单模块 */
.form-section{
padding-top: 120px;
}
/* 主标题 */
.form-section .h1{
text-align: center;
font-size: 32px;
}
/* 首页表单 */
.form-section .form-list{
padding: 30px;
}
/* 首页表单-项 */
.form-section .form-item{
position: relative;
margin-bottom: 20px;
}
/* 首页-表单-选择输入*/
.form-section .form-item-select,.form-section .form-item-input{
display: block;
box-sizing: border-box;
width: 100%;
height: 40px;
line-height: 40px;
font-size: 18px;
padding-left: 15px;
border: 1px solid #e4e4e4;
}
/* 首页-表单-提交按钮 */
.form-section .form-item button{
display: inline-block;
width: 100%;
height: 40px;
line-height: 40px;
font-size: 18px;
border: 1px solid #e4e4e4;
}
首页交互
- 下拉选择组件 picker
之前在 web H5 的时候我们使用 select 控件,但是在小程序上这个控件并没有,替而代之的事 picker。从底部弹起的滚动选择器,更多信息请参照文档
index.wxml 中添加事件监听,及数据接收。
<picker class="form-item-select" bindchange="bindPickerChange" value="{{selectIndex}}" range="{{deliveryArr}}" range-key="name">
{{deliveryData[selectIndex]}}
</picker>
其中 :
- bindchange 代表选择时候的回调函数
- value 为当前选择的值
- range 为数组数据
- range-key 为当 range 是一个 二维Object Array 时,通过 range-key 来指定 Object 中 key 的值作为选择器显示内容
我们需要在 js 中data 添加相应 deliveryArr 的数据以给与 range 显示。
Page({
data:{
deliveryArr:[
{
id:0,
name:'请选择'
},
{
id:'jd',
name:'京东'
},
{
id:'ems',
name:'EMS'
},
{
id:'shunfeng',
name:'顺丰'
},
{
id:'yuantong',
name:'圆通'
},
{
id:'yunda',
name:'韵达'
},
],
selectIndex:0,
},
bindPickerChange:function(e){
console.log('picker发送选择改变,携带值为', e.detail.value)
this.setData({
selectIndex: e.detail.value
})
}
})
- input 输入表单交互。需要绑定监听改变事件,然后事件获取到的值设置到 input 组件的显示中。
<input class="form-item-input" type="number" name="order" bindinput="bindOrderInput" value="{{inputValue}}" />
Page({
data:{
...,
inputValue:''
},
...,
bindOrderInput:function(e){
this.setData({
inputValue: e.detail.value
})
}
})
- 提交按钮事件绑定。点击按钮获取快递公司和快递单号的值,如果没有弹错误提示,如果有的话拼接新的URL跳转。
<button type="primary" bindtap="submit">提交</button>
Page({
...,
submit:function(e){
let deliveryArr = this.data.deliveryArr;
let selectIndex = this.data.selectIndex;
let inputValue = this.data.inputValue;
if(!inputValue || selectIndex == 0){
wx.showToast({
title: '请选择快递公司及输入订单号!',
duration: 2000,
icon:'none'
})
return
}
let order_id = inputValue;
let company = deliveryArr[selectIndex].id;
let url = `/pages/detail/detail?company=${company}&order_id=${order_id}`;
wx.navigateTo({ url });
}
})
- JS 代码小结
Page({
data:{
deliveryArr:[
{
id:0,
name:'请选择快递公司'
},
{
id:'jd',
name:'京东'
},
{
id:'ems',
name:'EMS'
},
{
id:'shunfeng',
name:'顺丰'
},
{
id:'yuantong',
name:'圆通'
},
{
id:'yunda',
name:'韵达'
},
],
selectIndex:0,
inputValue:''
},
bindPickerChange:function(e){
console.log('picker发送选择改变,携带值为', e.detail.value)
this.setData({
selectIndex: e.detail.value
})
},
bindOrderInput:function(e){
console.log('input 输入改变,携带值为', e.detail.value)
this.setData({
inputValue: e.detail.value
})
},
submit:function(e){
let deliveryArr = this.data.deliveryArr;
let selectIndex = this.data.selectIndex;
let inputValue = this.data.inputValue;
if(!inputValue || selectIndex == 0){
wx.showToast({
title: '请选择快递公司及输入订单号!',
duration: 2000,
icon:'none'
})
return
}
let order_id = inputValue;
let company = deliveryArr[selectIndex].id;
let url = `/pages/detail/detail?company=${company}&order_id=${order_id}`;
wx.navigateTo({ url });
}
})