一生痴爱美景 發表於 2020-2-25 10:48:00

微信小程序开发完整流程

<h3>1. 注册小程序账号</h3>
<p>1. 打开微信公众平台,找到注册入口</p>
<p>2.选择账号类型: 小程序</p>
<p>&nbsp;<img src="https://img2018.cnblogs.com/i-beta/893654/202002/893654-20200223230206022-1894314358.png"></p>
<p>3. 填写注册信息-激活</p>
<p>4. 获取AppID,查看位置(小程序后台-&gt;开发)</p>
<h3>&nbsp;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>&nbsp;</p>
<p>.wxml - weixin Markup Language;在.wxml中编写页面结构</p>
<p>&lt;view&gt;&lt;/view&gt;用于包含代码块</p>
<p>&lt;text&gt;&lt;/text&gt;包含的文字可以长按选中</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>=&gt;<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>=&gt;<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)">&lt;!--</span><span style="color: rgba(0, 128, 0, 1)">index.wxml</span><span style="color: rgba(0, 128, 0, 1)">--&gt;</span>
<span style="color: rgba(0, 0, 255, 1)">&lt;</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)">&gt;</span>
<span style="color: rgba(0, 0, 255, 1)">&lt;</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)">&gt;</span>
    <span style="color: rgba(0, 128, 0, 1)">&lt;!--</span><span style="color: rgba(0, 128, 0, 1)">如果已有用户信息则不可见或者用户默认授权</span><span style="color: rgba(0, 128, 0, 1)">--&gt;</span>
    <span style="color: rgba(0, 0, 255, 1)">&lt;</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 &amp;&amp; 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)">&gt;</span>授权<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">button</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
    <span style="color: rgba(0, 128, 0, 1)">&lt;!--</span><span style="color: rgba(0, 128, 0, 1)">获取用户信息后展示用户头像和昵称</span><span style="color: rgba(0, 128, 0, 1)">--&gt;</span>
    <span style="color: rgba(0, 0, 255, 1)">&lt;</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)">&gt;</span>
      <span style="color: rgba(0, 0, 255, 1)">&lt;</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)">&gt;&lt;/</span><span style="color: rgba(128, 0, 0, 1)">image</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
      <span style="color: rgba(0, 0, 255, 1)">&lt;</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)">&gt;</span>{{userInfo.nickName}}<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">text</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
    <span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">block</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">view</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">view</span><span style="color: rgba(0, 0, 255, 1)">&gt;</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 =&gt;<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>=&gt;<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中的空标签(&lt;&gt;&lt;/&gt;),不会改变原有的代码结构。</p>
<p>block标签常和if/for联合使用。</p>
<p>示例:</p>
<div class="cnblogs_code">
<pre>    <span style="color: rgba(0, 0, 255, 1)">&lt;</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)">&gt;</span>1<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">button</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
    <span style="color: rgba(0, 128, 0, 1)">&lt;!--</span><span style="color: rgba(0, 128, 0, 1)">else if</span><span style="color: rgba(0, 128, 0, 1)">--&gt;</span>
    <span style="color: rgba(0, 0, 255, 1)">&lt;</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)">&gt;</span>
      <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">text</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>2<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">text</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
    <span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">block</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
    <span style="color: rgba(0, 0, 255, 1)">&lt;</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)">&gt;</span>3<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">text</span><span style="color: rgba(0, 0, 255, 1)">&gt;</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)">&lt;</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)">&gt;</span>
    <span style="color: rgba(0, 0, 255, 1)">&lt;</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)">&gt;</span>Inner View<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">view</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 0, 1)">Outer View
</span><span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">view</span><span style="color: rgba(0, 0, 255, 1)">&gt;</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)">&lt;</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)">&gt;</span>
    <span style="color: rgba(0, 0, 255, 1)">&lt;</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)">&gt;</span>Inner View<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">view</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 0, 1)">Outer View
</span><span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">view</span><span style="color: rgba(0, 0, 255, 1)">&gt;</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)">&lt;</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)">&gt;</span><span style="color: rgba(0, 128, 0, 1)">&lt;!--</span><span style="color: rgba(0, 128, 0, 1)">样式只能通过swiper设置</span><span style="color: rgba(0, 128, 0, 1)">--&gt;</span>
    <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">swiper-item</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
      <span style="color: rgba(0, 0, 255, 1)">&lt;</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)">&gt;&lt;/</span><span style="color: rgba(128, 0, 0, 1)">image</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
    <span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">swiper-item</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
    <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">swiper-item</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
      <span style="color: rgba(0, 0, 255, 1)">&lt;</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)">&gt;&lt;/</span><span style="color: rgba(128, 0, 0, 1)">image</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
    <span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">swiper-item</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">swiper</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span></pre>
</div>
<h4>6. 渲染列表</h4>
<div class="cnblogs_code">
<pre> <span style="color: rgba(0, 128, 0, 1)">&lt;!--</span><span style="color: rgba(0, 128, 0, 1)">循环渲染列表时,必须添加key用于提高性能;
       如果列表项是不同的数字或者字符串,可以使用*this
       for-item指定item的变量
</span><span style="color: rgba(0, 128, 0, 1)">--&gt;</span>
<span style="color: rgba(0, 0, 255, 1)">&lt;</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)">&gt;</span>
    <span style="color: rgba(0, 0, 255, 1)">&lt;</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)">&gt;</span>{{index + 1}}. {{log}}<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">text</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">block</span><span style="color: rgba(0, 0, 255, 1)">&gt;</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) =&gt;<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)">&lt;</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)">&gt;&lt;/</span><span style="color: rgba(128, 0, 0, 1)">web-view</span><span style="color: rgba(0, 0, 255, 1)">&gt;</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>&nbsp;</p><br><br>
来源:https://www.cnblogs.com/lyraLee/p/12355352.html
頁: [1]
查看完整版本: 微信小程序开发完整流程