学习视频:https://www.bilibili.com/video/BV1Gv411g7j6?p=81
以精选文章为主
app.json里面写上路径
定义模板
在index.wxml中复制以下内容到articleTemplate.wxml中,把静态的内容修改成动态的
<!--精选文章列表结构模板--> <!-- 将静态文本换成动态的 --> <template name="articleTemplate"> <view class="articleView"> <view> <image src="{{imgUrls}}"></image> </view> <view class="articleContent"> <view class="artivcleTitle">{{title}}</view> <view class="articleDesc">{{desc}}</view> </view> </view> </template>
然后去index.wxss中复制实现它的样式到articleTemplate.wxss中
/* 精选文章列表结构模板样式 */ .articleView{ display: flex; padding: 30rpx 0; border-bottom: 1rpx solid #F1EEF5; } .articleView image{ width: 120rpx; height: 120rpx; margin-right: 20rpx; } .articleTitle{ font-size: 28rpx; font-weight: bold; line-height: 50rpx; } .articleDesc{ font-size: 26rpx; color: #B7B7B7; line-height: 35rpx; }
使用模板
1、在index.wxml中使用import引入articleTemplate模板。Import可以在该文件中使用目标文件定义的template。
2、在index.wxss中使用@import引入模板所需样式
3、在index.wxml中使用is属性,声明需要的使用模板,然后在index.js中将模板所需要的data传入
index.wxml
<!-- 精选文章 --> <!-- 引入模板 --> <import src="/pages/template/articleTemplate/articleTemplate.wxml"></import> <view id="hotArticleView"> <view id="hotArticleTitleView">精选文章</view> <!-- 文章总标题 --> <!-- 使用模板 --> <block wx:for="{{articelArray}}" wx:for-item="article" wx:key="*this"> <template is="articleTemplate" data="{{...article}}"></template> </block> <!-- 查看更多 --> <!-- 添加tab事件 tab事件:手指触摸后马上离开,类似鼠标单击事件 --> <view id="moreView" bindtap="gofeaturedArticles"> <text>查看更多</text> <view class="arrow"></view> </view> </view>
index.js中
data: { // 这里面的数据要和template模板里面的要对上 articelArray:[ { id:1000000, imgUrls:"/Images/article01.png", title:"你活出自我的样子,真美", desc:"千百年来,古人总把人的品格与自然之物相联系起来,以花草树木之品性喻人的精神情操。" }, { id:10000001, imgUrls:"/Images/article02.png", title:"这个救赎,因校园霸凌而起", desc:"续《你的名字》之后,日本又出现了一个现象级的动漫电影---《声之形》" }, { id:10000002, imgUrls:"/Images/article03.png", title:"抑郁症与抑郁情绪", desc:"抑郁症是一种常见的精神疾病,主要表现为情绪低落,兴趣减低,悲观,思维迟缓" }] },
效果不变:
然后以下代码可以删除了,模板实现了代码复用。
在index.wxml删除这些代码
去index.wxss中删除这些样式:
首先搭建Node.js环境
下载:http://nodejs.cn/download/
安装
下载完成后,双击安装包,一直点击next不用修改任何东西,但最好修改安装的默认路径。
安装完成后会直接给你配置环境变量,可以去电脑—>属性—>高级系统设置(全屏)–>查看
也可以window+R输入cmd打开命令管理器输入node -v
查看node版本和 npm -v
查看npm版本
npm:Node Package Manager,是一个基于Node.js的包管理器,也是整个Node.js社区最流行、支持的第三方模块最多的包管理器
初衷:JavaScript开发人员更容易分享和重用代码。
升级npm版本:npm install npm -g
使用淘宝镜像命令:npm install -g cnpm –registry=https://registry.npm.taobao.org
json-server
一个在前端本地运行,可以存储json数据的server
简单来说,就是模拟服务端接口数据,一般用在前后端分离后,前端人员可以不依赖API开发,而在本地搭建一个JSON服务,自己产生测试数据
而json-server就是一个存储json数据的server
安装:
使用npm全局安装:npm install -g json-server
按住Ctrl+C可以中断退出
通过查看版本号,测试是否安装成功:json-server -v
创建json数据(db.json)
既然是造数据,就需要创建一个json数据
在任意目录下创建一个名为自取的文件夹
进入该文件夹,打开命令行,
执行命令:json-server --watch db.json
可以看到目录下多了一个db.json文件
打开里面可以看到默认生成的一些信息。
/db就是整个的db.json数据包,而/posts ,/comment ,/profile分别是db.json里面的子对象
Json-server把db.json根节点的每一个key当作了一个router(路由:路径)。可以根据这个规则来编写测试数据
访问地址也是http://localhost:3000
修改端口号
可以自己指定端口:json-server –watch db.json –port 3001
修改完端口号觉得启动服务命令长,可以在db.json统计文件下新建一个package.json文件,配置以下信息
然后以后直接启动:npm run mock
即可。
复制以下代码到db.json,把之前的删除掉
{ "fruits": [ { "id": 1, "name": "Apple",//写中文出现乱码 "price": 1.28 }, { "id": 2, "name": "banana", "price": 3.88 }, { "id": 3, "name": "watermelon", "price": 1.98 } ], "users": [ { "name": { "username":"admin", "nickname":"changan" }, "pwd": "123456" } ] }
改完重启一下,发现写中文会出现乱码情况
所以改成英文再重新启动一下
获取id=3的水果:http://localhost:3000/fruits/3
这种方法拿到的是一个对象。推荐这种方法
另外一种方法拿到的是一个数组:http://localhost:3000/fruits?id=3
多条件查询:http://localhost:3000/fruits?name=banana&price=3.88
在db.json中添加一个成员,然后重启
"users": [ { "name": { "username": "admin", "nickname": "changan" }, "pwd": "123456" }, { "name": { "username":"fengling", "nickname":"guangdong" }, "pwd": "123456" } ]
查询昵称为guangdong的用户:http://localhost:3000/users?name.nickname=guangdong
分页Paginate:http://localhost:3000/fruits?_page=1&_limit=3
db.json中
{ "fruits": [ { "id": 1, "name": "Apple", "price": 1.28 }, { "id": 2, "name": "banana", "price": 3.88 }, { "id": 3, "name": "watermelon", "price": 1.98 }, { "id": 4, "name": "Apple1", "price": 8.28 }, { "id": 5, "name": "banana1", "price": 4.88 }, { "id": 6, "name": "watermelon1", "price": 3 } ], "users": [ { "name": { "username": "admin", "nickname": "changan" }, "pwd": "123456" }, { "name": { "username": "fengling", "nickname": "guangdong" }, "pwd": "123456" } ] }
然后重启json-server,有时候得重启有时候又不用
排序Sort:(asc:默认是这个 | desc),_order指定正逆排序
http://localhost:3000/fruits?_sort=id&_order=desc
只拿排序后的前多少条数据:
http://localhost:3000/fruits?_sort=id&_order=desc&limit=3
区局部数据Slice
Slice方式和Array.slice()方法类似。采用_start来指定开始位置;用_limit来制定从开始位置起往后取几个数据。
http://localhost:3000/fruits?_start=2&_end=5
取符合某个范围operators
(1)采用_gte _lte来设置一个取值范围(range)
id >= 2并且id <= 4的:http://localhost:3000/fruits?id_gte=2&id_lte=4
(2)采用_ne来设置不包含某个值(_ne:不等于)
不包含id=3的:http://localhost:3000/fruits?id_ne=3
;
还可以多写使用: http://localhost:3000/fruits?id_ne=3&id_ne=4&id_ne=6
(3)采用_like来设置匹配某个字符串(或正则表达式)
模糊查询:http://localhost:3000/fruits?name_like=b
全文搜索Full-text search
采用q来设置搜索内容
这个跟模糊查询类似。
q表示全文检索,不指明是name或者其他字段,只要包含检索内容就帮你全部查询并且显示出来:
http://localhost:3000/fruits?q=3
首先新建一个文件夹,然后通过编辑工具打开,我的编辑工具是Visual Studio Code
然后在里面新建文件夹和html,引用jQuery文件
fruit.html:
<!DOCTYPE html> <html> <head> <title>使用jquery ajax方法操作数据</title> <!-- 记得改成自己的路径 --> <script type="text/javascript" src="js/jquery.min.js"></script> <style> table, td, th { border: 1px solid black; border-collapse: collapse; } table { width: 500px; text-align: center; } tr { height: 35px; } </style> </head> <body> <button id="getBtn">获取所有水果数据</button> <div id="showData"></div> <script type="text/javascript"> $("#getBtn").click(function () { $.ajax({ type: 'get', url: 'http://localhost:3000/fruits',//记得修改成自己的端口号 success: function (data) { // data 对象数组 var h = "" h += "<table border='1'>" h += "<thead><th>ID</th><th>name</th><th>price</th></thead>" h += "<tbody>" for (var i = 0; i < data.length; i++) { var o = data[i] h += "<tr>" h += "<td>" + o.id + "</td><td>" + o.name + "</td><td>" + o.price + "</td>" h += "</tr>" } h += "<tbody>" h += "</table>" $("#showData").empty().append(h) }, error: function () { alert("get : error") } }) }) </script> </body> </html>
点击运行
然后点击按钮,出来数据
一、添加数据
post请求,在页面的输入框中输入新的水果名称和价格,通过post添加到db.json中。
在fruit.html中添加这一段代码
里面的data数据中的name跟price要跟db.json中的一致。id不用写,在json-server里面的id是自动生成的
直接到浏览器查看,添加数据
然后查看db.json,多了刚刚新增的那条数据
二、更新数据
put提交,常用来更新已有资源,若资源不存在,就创建。例:在db.json中有id=3的水果,但是在输入框中将价格改变了,就会新增这一条数据但是这条数据没有name字段。
在fruit.html中
在浏览器中
原来的db.json内容
因为put方法会更新整个资源对象,前端没有给出的字段,会自动清空。。所以要么我们在ajax的data中给出完整的对象,要么采用patch方法。
patch方法是一个新方法,可以说是put方法的补充,主要用来做局部更新
将上面的type改成patch
然后name字段还在,知识价格变化了,但是这个变成了字符串类型了。
三、删除数据
根据id删除数据
在fruit.html中
想要删除前部数据,还得加上下面这段代码。因为没办法去使用http://localhost:3000/fruits/ 这种请求URL。必须去指定删除对象的id,只能通过循环删除,这就需要实现通过get方法来获取当前最大id来作为循环边界。例如:id=1,id=2,id=3。就需要获取id=3这个最大的id才可以
然后去浏览器操作一下
这个主要用来配置图片、音频、视频资源
通过命令行配置路由、数据文件、监控等会让命令变得很长,而且容易输入错误;
json-server允许我们把所有的配置放到一份配合文件中,这个配置文件一般命名为json_server_config.json
json_server_config.json
{ "port":3000, "watch":true, "static":"./public",//当前目录的package文件夹(静态资源目录) "read-only":false,//是否只读 "no-cors":true,//是否支持跨域 "no-gzip":false }
package.json
{ "scrpits":{ "mock":"json-server --c json_server_config.json db.json" } }
我们可以把我们的图片资源都放在public目录中,但是public目录不仅可以放图片,也可以放音频和视频,所有放资源的时候,在public下面创建images用来放置图片,创建audio/video分别放置音频和视频;
既然我们已经在json_server_config.json里面指明了静态文件的目录,那么我们访问的时候,就可以忽略public;
将images文件中的图片复制到新建的public文件夹里面
然后放到public中
例如想访问里面的二维码图片
重启json-server,访问:http://localhost:3000/Images/@2x_2weima.png
做数据交互之前必须先把WXML的语法学会。(数据绑定、列表渲染、条件渲染、模板)