微信小程序开发-入门到熟练(wepy-初级篇)
<p><strong><span style="color: rgba(0, 0, 255, 1)">Title</span></strong>:最近做完了项目,review代码的同时,就想写一篇详细的小程序开发经历,记录自己的项目从0到1的过程</p><p><span style="color: rgba(0, 0, 255, 1)"><strong>Desc</strong></span> : 小程序从0到1,从小白到完成项目,你需要这样做:</p>
<p>step1: 基础知识准备</p>
<p> 知识储备: html5, CSS3, js(ES6), 组件化思维</p>
<p> wepy: https://tencent.github.io/wepy/document.html#/<br></p>
<p> Vue: https://cn.vuejs.org/</p>
<p> js-阮一峰: http://javascript.ruanyifeng.com/</p>
<p> js-git-廖雪峰: https://www.liaoxuefeng.com/</p>
<p> ES6-阮一峰 : http://es6.ruanyifeng.com/</p>
<p> 小程序文档: https://developers.weixin.qq.com/doc/</p>
<p> Vscode快捷键: https://www.cnblogs.com/fanghl/p/11269644.html</p>
<p> 前端框架太多了,多到每个公司使用的技术栈都可能和你掌握的不一样,但是别怕,万变不离其宗,走到天涯海角也是 html5, CSS3,js ,组件化这四部分构成,之所以框架很多,是因为每个公司的业务需求不一致。Vue、react、angular三大框架,其中又衍生了根据这三种框架来的小框架,这里主要讲Vue,微信小程序开发可以使用官方提供的原生wxml、wxss、wxs,嗯,和html,css, js对比一下,换了个名称而已(自带狗头滑稽),也可以使用Vue思想的框架wepy,wepy完全继承了Vue的写法,只要熟悉Vue,wepy上手很快的。</p>
<p>step2:梳理项目</p>
<p> 前端项目,移动端为主,主要涉及三个方面:UI、前端逻辑、数据三部分,UI产品经理会给你设计流程稿,美工会给你需要的样式素材 、后端会给你返回数据。我们只需要搭出页面,运用数据,以前jquery时代,要操作DOM树来改变页面的显示,DOM如下图:</p>
<p><img src="https://img2018.cnblogs.com/blog/1394956/201907/1394956-20190730104152985-740062074.png" alt=""></p>
<p>说白了,DOM树就是HTML标签的关系!!写HTML的时候,标签之间总要嵌套吧,最外层是<html>,一个页面的其他标签都在<html>中包裹着,对吧?有包裹着的关系,也有并列关系,基于这两种关系,换成专业术语,就是父子、兄弟关系,用树结构描述出来就是DOM的树结构,简称DOM树,在DOM树里面,我们可以通过标签(HTML元素)的class类名或者 ID 找到这个标签,</p>
<p> </p>
<div class="cnblogs_code">
<pre>/**<br>*获取标签<br>*/<br>let div1 = document.getElementById('idName') <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">原生</span>
let div2 = $('<span style="color: rgba(0, 0, 0, 1)">idName') //jquery
function $(id) { //jq的$选择器简易源码原理
return document.getElementById(</span>'id'<span style="color: rgba(0, 0, 0, 1)">)
} <br>//获取到目标之后,可以对目标做操作,包括但不限于改变目标的文字内容、背景颜色、插入子元素、插入子模板,隐藏、显示、添加点击事件或其他事件等等, </span></pre>
</div>
<p>之所以用树结构来描述,就是因为这样一目了然,关系很明确。而且还可以通过一个标签,找到他的子元素,父元素、兄弟元素、祖宗元素,进而对它们进行操作,例如:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">let</span> getFirstChild = document.getElementById("test").children;
</span>let p = document.getElementById("test"<span style="color: rgba(0, 0, 0, 1)">).parentNode;
</span>let brother5 = document.getElementById("test").nextSibling;</pre>
</div>
<p>以上是原生和jq的操作DOM树模式,这种方式现在已经不常用,但需要了解一下,现在常用的框架,几乎都是组件式开发,数据驱动、已经不操作DOM树了!!!!!</p>
<p>进入数据驱动模式::</p>
<p>开发一个项目,产品会上说明开发需求,在把pr(设计需求文件)发给前后端和美工,三方开发开发,也就是说前端在没和后端对接口之前,都需要使用模拟数据,那么,一个普通项目可能会包含什么?事件、内容填充、页面跳转。就这三部分!!!</p>
<p>事件: wepy和Vue中,绑定事件用 v-on 简写 @tap = ‘eventName’ 原生和jq中用 onclick=eventName()" 大同小异</p>
<p>内容填充: 即用后端返回来的数据,把他们放到页面中去,</p>
<p><img src="https://img2018.cnblogs.com/blog/1394956/201907/1394956-20190730112116955-1933037501.png" alt=""></p>
<p>js代码如下: </p>
<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)"> getCardInfo( user_id ) {
const that </span>= <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">
circleApi.getCardInfo({
data: {
user_id,
card_is_mine: </span>-1 <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">默认-1 ====》圈内</span>
<span style="color: rgba(0, 0, 0, 1)"> },
getToken: </span><span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">
}).then( res </span>=><span style="color: rgba(0, 0, 0, 1)"> {
log(</span>'获取我的名片信息'<span style="color: rgba(0, 0, 0, 1)">, res)
let data </span>=<span style="color: rgba(0, 0, 0, 1)"> res.data
that.cardInfo </span>=<span style="color: rgba(0, 0, 0, 1)"> data </span><span style="color: rgba(0, 0, 0, 1)">
that.$apply()
})
}</span></pre>
</div>
<p>html标签代码:(这个view是在<template>当中的)</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)">class</span><span style="color: rgba(0, 0, 255, 1)">="myCardContent"</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)">="redHeader"</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(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="contentBox"</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)">class</span><span style="color: rgba(0, 0, 255, 1)">="headImgCard"</span><span style="color: rgba(255, 0, 0, 1)"> src</span><span style="color: rgba(0, 0, 255, 1)">="{{cardInfo.avatar}}"</span><span style="color: rgba(255, 0, 0, 1)"> mode</span><span style="color: rgba(0, 0, 255, 1)">="aspectFill"</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)">view </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="professionInfo"</span><span style="color: rgba(0, 0, 255, 1)">></span>{{cardInfo.career}}<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(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="userId"</span><span style="color: rgba(0, 0, 255, 1)">></span>ID: {{cardInfo.user_id}}<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, 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)">view </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="cardInfoBox"</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)">="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)">sapn </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="attribute"</span><span style="color: rgba(0, 0, 255, 1)">></span> {{cardInfo.gender}}<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">sapn</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(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="item itemRight"</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)">sapn </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="attribute"</span><span style="color: rgba(0, 0, 255, 1)">></span> {{cardInfo.age}}年<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">sapn</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(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="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)">sapn </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="attribute"</span><span style="color: rgba(0, 0, 255, 1)">></span> {{cardInfo.place_of_residence}}<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">sapn</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(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="item itemRight"</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)">sapn </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="attribute"</span><span style="color: rgba(0, 0, 255, 1)">></span> {{cardInfo.education}}<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">sapn</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(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="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)">sapn </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="attribute"</span><span style="color: rgba(0, 0, 255, 1)">></span> {{cardInfo.height}}cm<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">sapn</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(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="item itemRight"</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)">sapn </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="attribute"</span><span style="color: rgba(0, 0, 255, 1)">></span> {{cardInfo.annual_salary}}<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">sapn</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(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="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)">sapn </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="attribute"</span><span style="color: rgba(0, 0, 255, 1)">></span> {{cardInfo.house}}<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">sapn</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(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="item itemRight"</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)">sapn </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="attribute"</span><span style="color: rgba(0, 0, 255, 1)">></span> {{cardInfo.car}}<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">sapn</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>
<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)">view </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="tipChildIntroduce"</span><span style="color: rgba(0, 0, 255, 1)">></span><span style="color: rgba(0, 0, 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)">="orangeLine"</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>
<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)">="childIntrodCont"</span><span style="color: rgba(0, 0, 255, 1)">></span>{{cardInfo.child_introduction}}<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, 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)">view </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="tipChildIntroduce"</span><span style="color: rgba(0, 0, 255, 1)">></span><span style="color: rgba(0, 0, 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)">="orangeLine"</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>
<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)">="childIntrodCont"</span><span style="color: rgba(0, 0, 255, 1)">></span>{{cardInfo.spouse_description}}<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, 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)">view </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="tipChildIntroduce"</span><span style="color: rgba(0, 0, 255, 1)">></span><span style="color: rgba(0, 0, 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)">="orangeLine"</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>
<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)">="lifeImgBox {{isMinePage ? 'marginBottom' : ''}}"</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)">repeat </span><span style="color: rgba(255, 0, 0, 1)">for</span><span style="color: rgba(0, 0, 255, 1)">="{{cardInfo.photos}}"</span><span style="color: rgba(255, 0, 0, 1)"> item</span><span style="color: rgba(0, 0, 255, 1)">="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)">="{{item}}"</span><span style="color: rgba(255, 0, 0, 1)"> class</span><span style="color: rgba(0, 0, 255, 1)">="lifeImg"</span><span style="color: rgba(255, 0, 0, 1)"> @tap</span><span style="color: rgba(0, 0, 255, 1)">="liveImg"</span><span style="color: rgba(255, 0, 0, 1)"> data-index</span><span style="color: rgba(0, 0, 255, 1)">="{{index}}"</span><span style="color: rgba(255, 0, 0, 1)"> mode</span><span style="color: rgba(0, 0, 255, 1)">="aspectFill"</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)">repeat</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>
<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>数据操作的精髓 ↑ </p>
<p>而如果在jq中,你拿到数据之后,还要把数据一条条插进DOM中,看下代码:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 获取名片信息=== jq版</span>
<span style="color: rgba(0, 0, 0, 1)"> getCardInfo( user_id ) {
const that </span>= <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">
circleApi.getCardInfo({
data: {
user_id,
card_is_mine: </span>-1 <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">默认-1 ====》圈内</span>
<span style="color: rgba(0, 0, 0, 1)"> },
getToken: </span><span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">
}).then( res </span>=><span style="color: rgba(0, 0, 0, 1)"> {
log(</span>'获取我的名片信息'<span style="color: rgba(0, 0, 0, 1)">, res)
let data </span>=<span style="color: rgba(0, 0, 0, 1)"> res.data
let sexDom = $('sexClassName').innerText = res.gender;<br></span></pre>
<pre><span> let ageDom = $('sexClassName').innerText = res.age;<br> ***<br> 有多少条数据需要插入,就得操作DOM多少次!!!!!吓人不<br></span></pre>
<pre><span style="color: rgba(0, 0, 0, 1)"> })
}</span></pre>
</div>
<p>数据填充二: 数据模板插入。就是后端给你返回了10条商品数据,你得把这10个商品全部展示出来对吧,看例子:</p>
<p><img src="https://img2018.cnblogs.com/blog/1394956/201907/1394956-20190730113542663-128597256.png" alt=""></p>
<p>如上图,后端返回了我们圈子的列表,圈子分为四种,career_circles、local_circles、my_circles、group_circles四种,每一个是数组,这里以my_circles为例,数组里面有6条商品信息,需要展现出来,看上图左可以发现,每个圈子的模板都是一样的,一张图片加两行文字说明。模板在此时就发挥了作用,</p>
<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)"> getCircleList(city_id, card_is_mine) {
const that </span>= <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">;
circleApi.getCircleList({
data: {
city: </span>2, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">city_id</span>
<span style="color: rgba(0, 0, 0, 1)"> },
getToken: </span><span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">
}).then( res </span>=><span style="color: rgba(0, 0, 0, 1)"> {
log(</span>'获取圈子列表01'<span style="color: rgba(0, 0, 0, 1)">, res)
let data </span>=<span style="color: rgba(0, 0, 0, 1)"> res.data;
that.careerCirclr </span>=<span style="color: rgba(0, 0, 0, 1)"> data.career_circles;
</span><span style="color: rgba(0, 0, 255, 1)">if</span>( that.careerCirclr.length === 0<span style="color: rgba(0, 0, 0, 1)"> ) {
</span><span style="color: rgba(0, 0, 255, 1)">this</span>.prefTipCtrl = <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">
}
that.localCirclr </span>=<span style="color: rgba(0, 0, 0, 1)"> data.local_circles;
</span><span style="color: rgba(0, 0, 255, 1)">if</span>( that.localCirclr.length === 0<span style="color: rgba(0, 0, 0, 1)"> ) {
that.localTipCtrl </span>= <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">
}
that.myCircle </span>=<span style="color: rgba(0, 0, 0, 1)"> (data.group_circles).concat(data.my_circles) ;
</span><span style="color: rgba(0, 0, 255, 1)">if</span>( that.myCircle.length != 0<span style="color: rgba(0, 0, 0, 1)">) {
that.showMyCircle </span>= <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">;
}
that.$apply();
})
}</span></pre>
</div>
<div class="cnblogs_code">
<pre><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:if</span><span style="color: rgba(0, 0, 255, 1)">="{{showMyCircle}}"</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)">="subiect"</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(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="circleBigBox"</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)">repeat </span><span style="color: rgba(255, 0, 0, 1)">for</span><span style="color: rgba(0, 0, 255, 1)">="{{myCircle}}"</span><span style="color: rgba(255, 0, 0, 1)"> key</span><span style="color: rgba(0, 0, 255, 1)">="index"</span><span style="color: rgba(255, 0, 0, 1)"> item</span><span style="color: rgba(0, 0, 255, 1)">="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)">CircleItemNew </span><span style="color: rgba(255, 0, 0, 1)">@circleDescClick.user </span><span style="color: rgba(0, 0, 255, 1)">= "circleDescClick"</span><span style="color: rgba(255, 0, 0, 1)">
:circleImg.sync </span><span style="color: rgba(0, 0, 255, 1)">= "item.image"</span><span style="color: rgba(255, 0, 0, 1)">
:circleName.sync </span><span style="color: rgba(0, 0, 255, 1)">= "item.circle_name"</span><span style="color: rgba(255, 0, 0, 1)">
:circleDesc.sync </span><span style="color: rgba(0, 0, 255, 1)">= "item.short_desc"</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)">CircleItemNew</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)">repeat</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)">block</span><span style="color: rgba(0, 0, 255, 1)">></span></pre>
</div>
<p>以上代码中直接遍历数据 myCircle ,Vue中有 v-for ,微信原生有 wx:for= wepy中采用 <repeat for>,虽然写法有差异,但思想都是遍历数据就可以了,不需要操作DOM</p>
<p>组件CircleItemNew:(因为其他的三种圈子也是这个模板,所以抽出来作为模板写)</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">template</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)">="circleItemBox"</span><span style="color: rgba(255, 0, 0, 1)"> data-circleId</span><span style="color: rgba(0, 0, 255, 1)">="{{circleId}}"</span><span style="color: rgba(255, 0, 0, 1)"> data-circlestate </span><span style="color: rgba(0, 0, 255, 1)">="{{circleState}}"</span><span style="color: rgba(255, 0, 0, 1)"> data-circlegroupId</span><span style="color: rgba(0, 0, 255, 1)">="{{circleGroupId}}"</span><span style="color: rgba(255, 0, 0, 1)"> @tap</span><span style="color: rgba(0, 0, 255, 1)">="goCircleIntroduce"</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)">class</span><span style="color: rgba(0, 0, 255, 1)">="circleImgNew"</span><span style="color: rgba(255, 0, 0, 1)"> mode</span><span style="color: rgba(0, 0, 255, 1)">="aspectFill"</span><span style="color: rgba(255, 0, 0, 1)"> src</span><span style="color: rgba(0, 0, 255, 1)">="{{circleImg}}"</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)">view </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="circleName"</span><span style="color: rgba(0, 0, 255, 1)">></span>{{circleName}}<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(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="circleDesc"</span><span style="color: rgba(0, 0, 255, 1)">></span>{{circleDesc}}<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>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">template</span><span style="color: rgba(0, 0, 255, 1)">></span></pre>
</div>
<p>以上模块若用jq中操作DOM实现,代码如下:</p>
<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)"> getCircleList(city_id, card_is_mine) {
const that </span>= <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">;
circleApi.getCircleList({
data: {
city: </span>2, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">city_id</span>
<span style="color: rgba(0, 0, 0, 1)"> },
getToken: </span><span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">
}).then( res </span>=><span style="color: rgba(0, 0, 0, 1)"> {
log(</span>'获取圈子列表01'<span style="color: rgba(0, 0, 0, 1)">, res)
let data </span>=<span style="color: rgba(0, 0, 0, 1)"> res.data;
that.careerCirclr </span>=<span style="color: rgba(0, 0, 0, 1)"> data.career_circles;
</span><span style="color: rgba(0, 0, 255, 1)">if</span>( that.careerCirclr.length === 0<span style="color: rgba(0, 0, 0, 1)"> ) {
</span><span style="color: rgba(0, 0, 255, 1)">this</span>.prefTipCtrl = <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">
}
that.localCirclr </span>=<span style="color: rgba(0, 0, 0, 1)"> data.local_circles;
</span><span style="color: rgba(0, 0, 255, 1)">if</span>( that.localCirclr.length === 0<span style="color: rgba(0, 0, 0, 1)"> ) {
that.localTipCtrl </span>= <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">
}
that.myCircle </span>=<span style="color: rgba(0, 0, 0, 1)"> (data.group_circles).concat(data.my_circles) ;</span></pre>
<pre><span> $(parentNode).empty() //首先你得把放这个6个圈子的父元素清空,要不下次进来就12个圈子了,在下次进来18个,</span></pre>
<pre><span style="color: rgba(0, 0, 0, 1)"> $.each(that.myCircle, function(item, index) { //遍历数组<br> let circleDiv = '<img src='+ item.image +'></img> //每次遍历都生成一个HTML模板,再把该模板插入父元素中<br> <div>'+ item.circle_name +'</div><br> <div>'+ item.short_desc +'</div><br> '<br> $(parentNode).append(circleDiv)<br> })<br></span><span style="color: rgba(0, 0, 0, 1)">
that.$apply();
})
}</span></pre>
</div>
<p> step3:页面跳转</p>
<p> 3.1Vue中页面跳转: </p>
<p> 3.1.1可以使用标签跳转: <router-link to='two.html'><button>点我到第二个页面</button></router-link></p>
<p><strong> </strong>3.1.2,点击事件跳转</p>
<p> html :</p>
<p> <button @click="hreftwo" class="test-one">点我到第二个页面</button><br> js :</p>
<p> methods:{ //跳转页面</p>
<p> hreftwo(){</p>
<p> this.$router.push({ path:'/two.html' })</p>
<p> }</p>
<p> }</p>
<p> 3.2普通方法跳转(jq) </p>
<p> 1.我们可以利用http的重定向来跳转(推荐)</p>
<p> window.location.replace("http://www.jb51.net");</p>
<p> 2.使用href来跳转</p>
<p> window.location.href = "http://www.jb51.net";</p>
<p> 3.3微信小程序跳转: </p>
<p> 链接: https://developers.weixin.qq.com/miniprogram/dev/api/route/wx.navigateTo.html</p>
<pre> wx.navigateTo({
url: 'page/home/home?user_id=111'
})<br><strong>PS: 所有的页面跳转都是URL,都可以带参数,参数以? 跟在URL后面,多个参数的话,第一个? 开头,之后的参数 & 拼接,如代码:</strong> </pre>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">this</span>.nav('/pages/circleIntroduce?circle_id=' + circle_id + '&group_form_id=' + group_form_id ) //传统的字符串拼接<br><br>wx.navigateTo({<br> url:`/pages/card?from=inner&user_id=${user_id}&circle_id=${this.circle_id}` //ES6字符串拼接方法</pre>
<pre>})</pre>
</div>
<p>页面调到另一个页面后,在那个页面的生命周期函数 onLoad( option ) ,它的参数 option 就拿到了所有传过来的query 参数。</p><br><br>
来源:https://www.cnblogs.com/fanghl/p/11269442.html
頁:
[1]