微信小程序开发完整流程
<h3>1. 注册小程序账号</h3><p>1. 打开微信公众平台,找到注册入口</p>
<p>2.选择账号类型: 小程序</p>
<p> <img src="https://img2018.cnblogs.com/i-beta/893654/202002/893654-20200223230206022-1894314358.png"></p>
<p>3. 填写注册信息-激活</p>
<p>4. 获取AppID,查看位置(小程序后台->开发)</p>
<h3> 2. 下载微信小程序开发工具<br></h3>
<p>下载地址</p>
<p>如果想要使用VSCode编写小程序的代码,需要安装“小程序助手”插件</p>
<h3>3. 开发流程</h3>
<h4>1. 目录结构</h4>
<h4><img src="https://img2018.cnblogs.com/i-beta/893654/202002/893654-20200224010214028-251143601.png"></h4>
<p> </p>
<p>.wxml - weixin Markup Language;在.wxml中编写页面结构</p>
<p><view></view>用于包含代码块</p>
<p><text></text>包含的文字可以长按选中</p>
<h4>2. 判断是否授权</h4>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">App({
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 判断是否授权</span>
<span style="color: rgba(0, 0, 0, 1)"> wx.getSetting({
success: res </span>=><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (res.authSetting['scope.userInfo'<span style="color: rgba(0, 0, 0, 1)">]) {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 已经授权,可以直接调用 getUserInfo 获取头像昵称,不会弹框</span>
<span style="color: rgba(0, 0, 0, 1)"> wx.getUserInfo({
success: res </span>=><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 可以将 res 发送给后台解码出 unionId</span>
<span style="color: rgba(0, 0, 255, 1)">this</span>.globalData.userInfo =<span style="color: rgba(0, 0, 0, 1)"> res.userInfo
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 所以此处加入 callback 以防止这种情况</span>
<span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.userInfoReadyCallback) {
</span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.userInfoReadyCallback(res)
}
}
})
}
}
})
},
globalData: {
userInfo: </span><span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">
}
})</span></pre>
</div>
<h4>3. 获取用户授权</h4>
<p>1. 通过授权按钮申请用户授权</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)"><!--</span><span style="color: rgba(0, 128, 0, 1)">index.wxml</span><span style="color: rgba(0, 128, 0, 1)">--></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">view </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="container"</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">view </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="userinfo"</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 128, 0, 1)"><!--</span><span style="color: rgba(0, 128, 0, 1)">如果已有用户信息则不可见或者用户默认授权</span><span style="color: rgba(0, 128, 0, 1)">--></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">button </span><span style="color: rgba(255, 0, 0, 1)">wx:if</span><span style="color: rgba(0, 0, 255, 1)">="{{!hasUserInfo && canIUse}}"</span><span style="color: rgba(255, 0, 0, 1)"> open-type</span><span style="color: rgba(0, 0, 255, 1)">="getUserInfo"</span><span style="color: rgba(255, 0, 0, 1)"> bindgetuserinfo</span><span style="color: rgba(0, 0, 255, 1)">="getUserInfo"</span><span style="color: rgba(0, 0, 255, 1)">></span>授权<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">button</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 128, 0, 1)"><!--</span><span style="color: rgba(0, 128, 0, 1)">获取用户信息后展示用户头像和昵称</span><span style="color: rgba(0, 128, 0, 1)">--></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">block </span><span style="color: rgba(255, 0, 0, 1)">wx:else</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">image </span><span style="color: rgba(255, 0, 0, 1)">bindtap</span><span style="color: rgba(0, 0, 255, 1)">="bindViewTap"</span><span style="color: rgba(255, 0, 0, 1)"> class</span><span style="color: rgba(0, 0, 255, 1)">="userinfo-avatar"</span><span style="color: rgba(255, 0, 0, 1)"> src</span><span style="color: rgba(0, 0, 255, 1)">="{{userInfo.avatarUrl}}"</span><span style="color: rgba(255, 0, 0, 1)"> mode</span><span style="color: rgba(0, 0, 255, 1)">="cover"</span><span style="color: rgba(0, 0, 255, 1)">></</span><span style="color: rgba(128, 0, 0, 1)">image</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">text </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="userinfo-nickname"</span><span style="color: rgba(0, 0, 255, 1)">></span>{{userInfo.nickName}}<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">text</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">block</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">view</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">view</span><span style="color: rgba(0, 0, 255, 1)">></span></pre>
</div>
<p>2. 设置数据初始值</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">Page({
data: {
motto: </span>'Hello World'<span style="color: rgba(0, 0, 0, 1)">,
userInfo: {},
hasUserInfo: </span><span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">,
canIUse: wx.canIUse(</span>'button.open-type.getUserInfo'<span style="color: rgba(0, 0, 0, 1)">)
}
})</span></pre>
</div>
<p>3. 获取授权后给数据赋值</p>
<div class="cnblogs_code">
<pre>getUserInfo: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(e) {
console.log(e)
app.globalData.userInfo </span>=<span style="color: rgba(0, 0, 0, 1)"> e.detail.userInfo
</span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.setData({
userInfo: e.detail.userInfo,
hasUserInfo: </span><span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">
})
}</span></pre>
</div>
<p>4. 获取用户信息;兼容没有open-type="getUserInfo"的版本</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">Page({
onLoad: </span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> () {
</span><span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> (app.globalData.userInfo) {
</span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.setData({
userInfo: app.globalData.userInfo,
hasUserInfo: </span><span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">
})
} </span><span style="color: rgba(0, 0, 255, 1)">else</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.data.canIUse){
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 所以此处加入 callback 以防止这种情况</span>
app.userInfoReadyCallback = res =><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.setData({
userInfo: res.userInfo,
hasUserInfo: </span><span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">
})
}
} </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 在没有 open-type=getUserInfo 版本的兼容处理</span>
<span style="color: rgba(0, 0, 0, 1)"> wx.getUserInfo({
success: res </span>=><span style="color: rgba(0, 0, 0, 1)"> {
app.globalData.userInfo </span>=<span style="color: rgba(0, 0, 0, 1)"> res.userInfo
</span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.setData({
userInfo: res.userInfo,
hasUserInfo: </span><span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">
})
}
})
}
},
})</span></pre>
</div>
<h3>4. 小程序语法</h3>
<h4>1. 条件渲染和block组件</h4>
<p>block标签相当于ReactJS中的空标签(<></>),不会改变原有的代码结构。</p>
<p>block标签常和if/for联合使用。</p>
<p>示例:</p>
<div class="cnblogs_code">
<pre> <span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">button </span><span style="color: rgba(255, 0, 0, 1)">wx:if</span><span style="color: rgba(0, 0, 255, 1)">="{{1!==1}}"</span><span style="color: rgba(0, 0, 255, 1)">></span>1<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">button</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 128, 0, 1)"><!--</span><span style="color: rgba(0, 128, 0, 1)">else if</span><span style="color: rgba(0, 128, 0, 1)">--></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">block </span><span style="color: rgba(255, 0, 0, 1)">wx:elif</span><span style="color: rgba(0, 0, 255, 1)">="{{1!==1}}"</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">text</span><span style="color: rgba(0, 0, 255, 1)">></span>2<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">text</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">block</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">text </span><span style="color: rgba(255, 0, 0, 1)">wx:else</span><span style="color: rgba(0, 0, 255, 1)">></span>3<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">text</span><span style="color: rgba(0, 0, 255, 1)">></span></pre>
</div>
<h4>2. 事件绑定</h4>
<p><img src="https://img2018.cnblogs.com/i-beta/893654/202002/893654-20200224161624541-2105170206.png"></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">onTapOut(event) {
console.log(</span>'--out--',event.target.id, '---dataset--'<span style="color: rgba(0, 0, 0, 1)">,event.target.dataset);
console.log(</span>'--out--',event.currentTarget.id, '---dataset--'<span style="color: rgba(0, 0, 0, 1)">,event.currentTarget.dataset);
},
onTapIn(event) {
console.log(</span>'--in--'<span style="color: rgba(0, 0, 0, 1)">, event.target.id)
console.log(</span>'--in--'<span style="color: rgba(0, 0, 0, 1)">, event.currentTarget.id)
},</span></pre>
</div>
<p>1. bind+事件名:不阻止事件冒泡</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">view </span><span style="color: rgba(255, 0, 0, 1)">data-out</span><span style="color: rgba(0, 0, 255, 1)">="1"</span><span style="color: rgba(255, 0, 0, 1)"> id</span><span style="color: rgba(0, 0, 255, 1)">="out"</span><span style="color: rgba(255, 0, 0, 1)"> class</span><span style="color: rgba(0, 0, 255, 1)">="test"</span><span style="color: rgba(255, 0, 0, 1)"> bindtap</span><span style="color: rgba(0, 0, 255, 1)">="onTapOut"</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">view </span><span style="color: rgba(255, 0, 0, 1)">data-in</span><span style="color: rgba(0, 0, 255, 1)">="2"</span><span style="color: rgba(255, 0, 0, 1)"> id</span><span style="color: rgba(0, 0, 255, 1)">="in"</span><span style="color: rgba(255, 0, 0, 1)"> bindtap</span><span style="color: rgba(0, 0, 255, 1)">="onTapIn"</span><span style="color: rgba(0, 0, 255, 1)">></span>Inner View<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">view</span><span style="color: rgba(0, 0, 255, 1)">></span><span style="color: rgba(0, 0, 0, 1)">Outer View
</span><span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">view</span><span style="color: rgba(0, 0, 255, 1)">></span></pre>
</div>
<p>1) 单击Inner View</p>
<div class="cnblogs_code">
<pre>--<span style="color: rgba(0, 0, 255, 1)">in</span>--<span style="color: rgba(0, 0, 255, 1)">in</span>
--<span style="color: rgba(0, 0, 255, 1)">in</span>--<span style="color: rgba(0, 0, 255, 1)">in</span>
--out-- <span style="color: rgba(0, 0, 255, 1)">in --dataset-- {in: "2"}</span>
--out-- out --dataset-- {out: "1"}</pre>
</div>
<p>2) 单击Outer View</p>
<div class="cnblogs_code">
<pre>--out--<span style="color: rgba(0, 0, 0, 1)">out
</span>--out--out</pre>
</div>
<p>2. catch+事件名:阻止事件冒泡</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">view </span><span style="color: rgba(255, 0, 0, 1)">id</span><span style="color: rgba(0, 0, 255, 1)">="out"</span><span style="color: rgba(255, 0, 0, 1)"> class</span><span style="color: rgba(0, 0, 255, 1)">="test"</span><span style="color: rgba(255, 0, 0, 1)"> bindtap</span><span style="color: rgba(0, 0, 255, 1)">="onTapOut"</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">view </span><span style="color: rgba(255, 0, 0, 1)">id</span><span style="color: rgba(0, 0, 255, 1)">="in"</span><span style="color: rgba(255, 0, 0, 1)"> catchtap</span><span style="color: rgba(0, 0, 255, 1)">="onTapIn"</span><span style="color: rgba(0, 0, 255, 1)">></span>Inner View<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">view</span><span style="color: rgba(0, 0, 255, 1)">></span><span style="color: rgba(0, 0, 0, 1)">Outer View
</span><span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">view</span><span style="color: rgba(0, 0, 255, 1)">></span></pre>
</div>
<p>1)单击Inner View</p>
<div class="cnblogs_code">
<pre>--<span style="color: rgba(0, 0, 255, 1)">in</span>--<span style="color: rgba(0, 0, 255, 1)">in</span>
--<span style="color: rgba(0, 0, 255, 1)">in</span>--<span style="color: rgba(0, 0, 255, 1)">in</span></pre>
</div>
<p>2)单击Outer View</p>
<div class="cnblogs_code">
<pre>--out--<span style="color: rgba(0, 0, 0, 1)">out
</span>--out--out</pre>
</div>
<h4>3. 设置tabBar</h4>
<p>在app.json中设置tabBar</p>
<div class="cnblogs_code">
<pre>"tabBar"<span style="color: rgba(0, 0, 0, 1)">: {
</span>"color": "#aaa", <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> tabBar默认字体颜色</span>
"selectedColor": "#333", <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 字体选中颜色</span>
"backgroundColor": "#fff", <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 背景颜色</span>
"borderStyle": "black", <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 切换边框颜色;white/black</span>
"position": "top", <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> tabBar所处的位置;top/bottom</span>
"list": [{<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 2-5个</span>
"pagePath": "pages/index/index"<span style="color: rgba(0, 0, 0, 1)">,
</span>"text": "首页"<span style="color: rgba(0, 0, 0, 1)">
}, {
</span>"pagePath": "pages/logs/logs"<span style="color: rgba(0, 0, 0, 1)">,
</span>"text":"日志"<span style="color: rgba(0, 0, 0, 1)">
}]
},</span></pre>
</div>
<h4>4. 设置导航样式</h4>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> app.json中设置</span>
"window"<span style="color: rgba(0, 0, 0, 1)">: {
</span>"backgroundTextStyle": "light"<span style="color: rgba(0, 0, 0, 1)">,
</span>"navigationBarBackgroundColor": "#fff"<span style="color: rgba(0, 0, 0, 1)">,
</span>"navigationBarTitleText": "WeChat"<span style="color: rgba(0, 0, 0, 1)">,
</span>"navigationBarTextStyle": "black"<span style="color: rgba(0, 0, 0, 1)">
},
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> window下的属性,可以在具体页面中覆盖</span><span style="color: rgba(0, 128, 0, 1)">
//</span><span style="color: rgba(0, 128, 0, 1)"> 如:index.json中</span>
<span style="color: rgba(0, 0, 0, 1)">{
</span>"navigationBarTitleText": "首页"<span style="color: rgba(0, 0, 0, 1)">
}</span></pre>
</div>
<h4>5. 轮播图</h4>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">swiper </span><span style="color: rgba(255, 0, 0, 1)">id</span><span style="color: rgba(0, 0, 255, 1)">="swiper"</span><span style="color: rgba(0, 0, 255, 1)">></span><span style="color: rgba(0, 128, 0, 1)"><!--</span><span style="color: rgba(0, 128, 0, 1)">样式只能通过swiper设置</span><span style="color: rgba(0, 128, 0, 1)">--></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">swiper-item</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">image </span><span style="color: rgba(255, 0, 0, 1)">src</span><span style="color: rgba(0, 0, 255, 1)">="/images/1.jpg"</span><span style="color: rgba(0, 0, 255, 1)">></</span><span style="color: rgba(128, 0, 0, 1)">image</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">swiper-item</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">swiper-item</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">image </span><span style="color: rgba(255, 0, 0, 1)">src</span><span style="color: rgba(0, 0, 255, 1)">="/images/2.jpg"</span><span style="color: rgba(0, 0, 255, 1)">></</span><span style="color: rgba(128, 0, 0, 1)">image</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">swiper-item</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">swiper</span><span style="color: rgba(0, 0, 255, 1)">></span></pre>
</div>
<h4>6. 渲染列表</h4>
<div class="cnblogs_code">
<pre> <span style="color: rgba(0, 128, 0, 1)"><!--</span><span style="color: rgba(0, 128, 0, 1)">循环渲染列表时,必须添加key用于提高性能;
如果列表项是不同的数字或者字符串,可以使用*this
for-item指定item的变量
</span><span style="color: rgba(0, 128, 0, 1)">--></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">block </span><span style="color: rgba(255, 0, 0, 1)">wx:key</span><span style="color: rgba(0, 0, 255, 1)">="*this"</span><span style="color: rgba(255, 0, 0, 1)"> wx:for</span><span style="color: rgba(0, 0, 255, 1)">="{{logs}}"</span><span style="color: rgba(255, 0, 0, 1)"> wx:for-item</span><span style="color: rgba(0, 0, 255, 1)">="log"</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">text </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="log-item"</span><span style="color: rgba(0, 0, 255, 1)">></span>{{index + 1}}. {{log}}<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">text</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">block</span><span style="color: rgba(0, 0, 255, 1)">></span></pre>
</div>
<h4>7. 页面跳转</h4>
<div class="cnblogs_code">
<pre> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 跳转后左上角带有返回按钮</span>
<span style="color: rgba(0, 0, 0, 1)"> wx.navigateTo({
url: </span>'../logs/logs'<span style="color: rgba(0, 0, 0, 1)">
})
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 跳转后左上角是首页按钮</span>
<span style="color: rgba(0, 0, 0, 1)"> wx.redirectTo({
url: </span>'../logs/logs'<span style="color: rgba(0, 0, 0, 1)">,
})
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 跳转到tabBar的页面</span>
<span style="color: rgba(0, 0, 0, 1)"> wx.switchTab({
url: </span>'../logs/logs'<span style="color: rgba(0, 0, 0, 1)">,
})</span></pre>
</div>
<h4>8. 页面生命周期</h4>
<div class="cnblogs_code">
<pre>onLoad(options) { <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 页面首次加载触发(只一次);可以接收页面跳转时携带的查询参数</span>
<span style="color: rgba(0, 0, 0, 1)">}
onReady() { </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 页面首次加载时触发(只一次)</span>
<span style="color: rgba(0, 0, 0, 1)">}
onShow() {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">每次显示该页面触发</span>
<span style="color: rgba(0, 0, 0, 1)">}
onHide() {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 每次隐藏的时候触发</span>
<span style="color: rgba(0, 0, 0, 1)">}
onPullDownRefresh() {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 监听用户下拉事件</span>
<span style="color: rgba(0, 0, 0, 1)">}
onReachBottom() {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 监听上拉触底事件</span>
<span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 设置该函数后,该页面存在分享功能</span>
<span style="color: rgba(0, 0, 0, 1)">onShareAppMessage() {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 设置分享的具体信息</span>
<span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> {
title: </span>"分享信息"<span style="color: rgba(0, 0, 0, 1)">,
imageUrl: </span>''<span style="color: rgba(0, 0, 0, 1)">,
path: </span>''<span style="color: rgba(0, 0, 0, 1)">
}
}</span></pre>
</div>
<h3>4. 高级用法</h3>
<h4>1. wx.request的promise封装</h4>
<div class="cnblogs_code">
<pre>import BASE_URL from './config.js'<span style="color: rgba(0, 0, 0, 1)">;
export </span><span style="color: rgba(0, 0, 255, 1)">default</span> <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> request(url, data, header, method) {
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">new</span> Promise((resolve, reject) =><span style="color: rgba(0, 0, 0, 1)"> {
wx.request({
url: BASE_URL </span>+<span style="color: rgba(0, 0, 0, 1)"> url,
data,
header,
method,
dataType: </span>'json'<span style="color: rgba(0, 0, 0, 1)">,
responseType: </span>'text'<span style="color: rgba(0, 0, 0, 1)">,
success: </span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(res) {
console.log(res);
</span><span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> (res) {
resolve(res.data)
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 还需进行详细的状态码区分</span>
<span style="color: rgba(0, 0, 0, 1)"> }
},
fail: </span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(res) {
reject(res);
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 请求接口失败,一般是网络异常等;404/500都是success回调返回的状态码</span>
<span style="color: rgba(0, 0, 0, 1)"> },
complete: </span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(res) {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 无论成功失败都会触发</span>
<span style="color: rgba(0, 0, 0, 1)"> },
})
});
}</span></pre>
</div>
<h4>2. webView组件</h4>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">web-view </span><span style="color: rgba(255, 0, 0, 1)">src</span><span style="color: rgba(0, 0, 255, 1)">="{{h5Src}}"</span><span style="color: rgba(0, 0, 255, 1)">></</span><span style="color: rgba(128, 0, 0, 1)">web-view</span><span style="color: rgba(0, 0, 255, 1)">></span></pre>
</div>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">Page({
data: {
h5Src: </span>""<span style="color: rgba(0, 0, 0, 1)">
},
onLoad(options) {
const { url } </span>=<span style="color: rgba(0, 0, 0, 1)"> options;
</span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.setData({
h5Src: decodeURIComponent(url)
})
}
})</span></pre>
</div>
<p>跳转函数</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">toView() {
let url </span>= "https://v.youku.com/v_show"<span style="color: rgba(0, 0, 0, 1)">;
wx.navigateTo({
url: </span>'/pages/webView/webView?url=' +<span style="color: rgba(0, 0, 0, 1)"> encodeURIComponent(url),
})
},</span></pre>
</div>
<h4>3. 选择通信地址</h4>
<div class="cnblogs_code">
<pre> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 选择通信地址</span>
<span style="color: rgba(0, 0, 0, 1)"> wx.chooseAddress({
success(res) {
console.log(res)
}
})</span></pre>
</div>
<h4>4. 选择/获取定位</h4>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">onChooseLocation() {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 弹出地图选择当前所在的位置</span>
<span style="color: rgba(0, 0, 0, 1)"> wx.chooseLocation({
success: </span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(res) {
},
})
},
onGetLocation() {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 获取位置坐标信息</span>
<span style="color: rgba(0, 0, 0, 1)"> wx.getLocation({
success: </span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(res) {
console.log(res)
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 在地图中定位当前位置</span>
<span style="color: rgba(0, 0, 0, 1)"> wx.openLocation({
latitude: res.latitude,
longitude: res.longitude,
})
},
})
},</span></pre>
</div>
<p> </p><br><br>
来源:https://www.cnblogs.com/lyraLee/p/12355352.html
頁:
[1]