vue基础语法--json-server工具,接口规则及测试,交互,组件
发布日期:2021-05-15 00:08:07 浏览次数:17 分类:精选文章

本文共 8296 字,大约阅读时间需要 27 分钟。

在Vue中实现发送网络请求

目标: 了解在Vue中发送网络请求

在Vue.js中发送网络请求本质还是ajax,我们可以使用插件方便操作。

  1. vue-resource: Vue.js的插件,已经不维护,不推荐使用
  2. :不是vue的插件,可以在任何地方使用,推荐

说明: 既可以在浏览器端又可以在node.js中使用的发送http请求的库,支持Promise,不支持jsonp

如果遇到jsonp请求, 可以使用插件 jsonp 实现

基础-json-server工具的使用

**目标**掌握json-server工具的使用

  • 目的: 没有后端的支撑下 ,前端难以为继,json-server可以快速构建一个后台的接口服务,供前端调用
  • mock => 模拟数据

​ json-server 是一个命令行工具 可以json文件变成接口文件

  • json-server遵循**restful**接口规则

安装

npm i -g  json-server // 也可以采用yarn 和 cnpm

新建一个json文件 db.json,并在相对目录下运行命令行命令

json文件格式

{        // brands 相等于 我们数据库中的一个表  "brands": [    {          "name": "苹果",      "date": "2018-05-30T08:07:20.089Z",      "id": 2    },    {          "name": "小米",      "date": "2018-07-04T08:59:51.200Z",      "id": 4    },    {          "name": "华为",      "date": "2019-07-14T04:04:56.599Z",      "id": 5    },    {          "name": "75期大神",      "date": "2019-07-14T04:31:03.017Z",      "id": 7    },    {          "name": "李四",      "id": 8    }  ],    user:[{                }],    money:[{    }]}
json-server --watch db.json
  • 启动完成后=> 通过访问地址访问接口

任务

  1. 安装json-server
  2. 新建db.json 写入json数据
  3. 启动json-server服务
  4. 通过访问地址访问接口

基础-RESTFUL的接口规则

目标: 掌握restful接口规则

  • RESTful是一套接口设计规范
  • 用**不同的请求类型发送同样一个请求标识** 所对应的处理是不同的
  • 通过Http请求的不同类型(POST/DELETE/PUT/GET)来判断是什么业务操作(CRUD )
  • CRUD => 增删改查
  • json-server应用了RESTful规范

2. HTTP方法规则举例

HTTP方法 数据处理 说明
POST Create 新增一个没有id的资源
GET Read 取得一个资源
PUT Update 更新一个资源。或新增一个含 id 资源(如果 id 不存在)
DELETE Delete 删除一个资源
  1. 查询数据 GET /brands 获取db.json下brands对应的所有数据 列表
  2. GET /brands/1 查询id=1数据 单条
  3. 删除数据 DELETE /brands/1 删除id=1数据
  4. 修改数据 PUT /brands/1 请求体对象 {name:‘李四’ }
  5. 上传/添加 POST /brands 请求体 {name:‘李四’}

PUT和POST用法一样 请求体 {name:“张三”,age: 18, sex:‘男’}

  1. 查询 GET /brands?title_like=关键字 -> 模糊搜索

任务 在json-server中测试体会restful接口规则

基础-postman测试接口

**目标**学会使用postman测试接口

  • 说明:Postman是一款功能强大的网页调试与发送网页HTTP请求的测试工具

**任务**安装postman工具,并启动son-server 测试json-server的crud接口

基础-axios-介绍-及基本使用

目标:掌握如何使用axios

  • 本地引入axios文件

  • 在npm 中引入axios文件

axios.get(url).then((res) => {    // 请求成功 会来到这  res响应体}).catch((err) => {    // 请求失败 会来到这 处理err对象	})
  • 发送get请求
axios.get('http://localhost:3000/brands').then(res => {    console.log(res.data);}).catch(err => {    console.dir(err)});
  • 发送delete请求
axios.delete('http://localhost:3000/brands/109').then(res => {    console.log(res.data);}).catch(err => {    console.dir(err)});
  • 发送post请求
axios.post('http://localhost:3000/brands', {    name: '小米', date: new Date()})   .then(res => {       console.log(res);})   .catch(err => {       console.dir(err)});

注意:post 成功 status===201 其他是200

基础-表格案例-axios-列表

目标-任务 将表格案例中列表数据实现用axios请求

路径: 使用axios请求列表

​ 1. 引入axios资源

​ 2. 在渲染完成时间中请求列表数据

​ 3. 赋值给data数据

代码

mounted() {        // 渲染完成事件    axios.get("http://localhost:3000/brands").then(result => {          this.list = result.data;         });       }    ```        **注意** mounted 是一个事件,后面会讲到,指的是渲染完成事件

基础-表格案例-axios-删除商品

目标-任务` 将表格案例中列表数据实现用axios删除

路径: 使用axios请求列表

​ 1. 删除方法中传入ID

​ 2. 删除方法中调用删除接口

​ 3. 删除完成后重新调用请求接口

代码

delItem(id) {          if (confirm("确定删除此条记录")) {            axios          .delete("http://localhost:3000/brands/" + id)          .then(result => {                this.getList(); // 重新调用拉取数据          });      }    }

​ 路径: 使用axios删除商品

​ 1 删除方法中传入ID

​ 2 删除方法中调用删除接口

​ 3 删除完成后重新调用接口

delItem(id) {          if (confirm("确定删除此条记录")) {            axios          .delete("http://localhost:3000/brands/" + id)          .then(result => {                this.getList(); // 重新调用拉取数据          });      }    }

基础-表格案例-axios-添加商品

目标-任务 将表格案例中列表数据实现用axios添加

路径: 使用axios请求列表

​ 1. 添加方法中调用新增接口

​ 2. 添加成功后 拉取数据

​ 3. 清空输入框

代码

addItem() {          // 添加商品      axios        .post("http://localhost:3000/brands", {              name: this.name,          date: new Date()        })        .then(result => {              if (result.status == 201) {                this.getList(); // 请求数据            this.name = ""; // 清楚文本框内容          }        });

基础-表格案例-axios-搜索功能-分析

目标 通过分析得出 计算属性不能进行搜索功能分析的结论

  • 如果**一个函数有return** 那么这个函数基本上就是一个**同步的函数** 就不能执行任何的异步的业务

计算属性=> 异步操作搜索=>返回结果 XXXXX 走不通

结论: 搜索功能不能采用 axios请求有 进行解决

计算属性中一定是**同步操作,如果有异步**操作,则该业务逻辑就会失败

新知识: 监听属性 watch

基础-实例选项-watch-文档分析

目标:掌握watch 选项的基本功能含义

场景: 当需要根据**数据变化** 进行相应业务操作,且该操作是**异步操作时,计算属性不能再使用**,可以使用监听watch特性

基础-实例选项-watch-基本使用

目标-任务-: 定义一个城市city变量,当城市city变量发生改变时 生成对应城市的一个数组 如

[{    city:'北京',count:1},{    city:"北京",count:2},,{    city:"北京",count:3}]

​ 1 实现 city的双向绑定

​ 2 watch监听city的数据项改变

​ 3 改变函数中实现

  • 计算属性和watch区别
  • 计算属性 必须要有返回值 所以说不能写异步请求 因为有人用它的返回值(插值表达式)
  • watch选项中可以写很多逻辑 不需要返回值 因为没有人用它的返回值

代码

watch: {    //newValue是最新的值 oldValue为后面的旧值city(newValue, oldValue) {     this.list = this.list.map(item => ({       city: item.name, }));}}

基础-表格案例-axios-搜索功能-实现

**目标-任务**使用watch实现前后台搜索功能

​ 1. 监听搜索内容框

​ 2. 在监听函数中实现搜索逻辑

​ 3. 将返回结果设置给 当前数据对象

​ 4. 更换数据对象

代码

watch: {        searchValue(newValue) {               if (newValue) {                 axios               .get("http://localhost:3000/brands?name_like=" + newValue)               .then(result => {                     this.list = result.data;               });           } else {                 this.getList();           }          }       }    ```

基础-组件-组件体验

**目标:**建立对于组件的认识

场景: 重复的页面结构,数据,逻辑 都可以抽提成一个组件

对于复杂的结构来说 都可以通过抽提组件的方式 来简化开发过程

  • 简单 高效 不重复

基础-组件-组件特点

**目标**认识组件特点

组件特点: 组件是一个**特殊的 Vue实例**

和实例相似之处: data/methods/computed/watch 等一应俱全

注意 值得注意的是 data和Vue实例的区别为 组件中data为一个函数 没有el选项

template 代表其页面结构 (有且只要一个根元素)

每个组件都是**独立**的 运行作用域 数据 逻辑没有任何关联

基础-组件-全局组件

**目标**掌握如何实现一个全局组件

路径: 实现一个全局组件

1 定义一个全局组件

2 写入组件选项

3 使用注册组件

// 注册组件名称 推荐 小写字母 加横向的结构      Vue.component("content-a", {           template: `
{ {count}}
`, data() { return { count: 1 }; } });// 注意 data中必须为一个返回对象的函数// template必须有且只有一个根元素

任务 实现一个全局组件 完成 加减步进器

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fmkEAzAI-1582442544413)(C:\Vue备课\第四天\笔记\assets\step.png)]

基础-组件-局部组件

目标: 掌握 如何实现一个局部组件

路径: 局部组件的实现

​ 1 定义一个局部组件

​ 2 写入组件选项

​ 3 使用组件

var  vm = new Vue({    el: "#app",data: {    },methods:{     },components:{        "content-a": {            template: `
{ {count}}
`, data() { return { count: 1 }; }}})

注意注册组件时,注册名不能为 - 分割的名称

任务 实现一个局部组件 完成 加减步进器

基础-组件-组件嵌套

**目标**掌握如何在组件中掌握嵌套

  • 我们可以在new Vue()实例中使用自定义组件,
  • 也可以在注册自定义组件时,嵌套另一个自定义组件,也就是父子组件的关系
var comA = {     template: `
我是子组件
`};var parentA = { template: `
我是父组件
`, components: { 'com-a': comA }};var vm = new Vue({ el: "#app", data: { }, methods: { }, components: { 'parent-a":parentA }});

任务

  1. 实现一个Vue实例
  2. 自定义一个组件parentB,内容为我是父组件parentB
  3. 自定义一个组件childA ,内容是我是子组件childA
  4. 将在父组件中使用childA, 并在页面上实现显示两个parentB

路径: 实现组件嵌套

​ 1 定义多个组件

​ 2 组件对组件进行引用

​ 3 使用根组件

​ 注意: 组件嵌套和全局 及局部组件没关系

关于具体实现参考课程提供的代码

基础-组件-组件通信的几种情况

目标:了解组件通信的几种情况(

  • 父组件 =》 子组件 需要将数据传给子组件
  • 子组件 =》 父组件 如果父组件需要 子组件也可以传数据给父组件
  • 兄弟组件1 =》兄弟组件2

基础-组件-父组件给子组件传值Props

目标:掌握父组件用Props给子组件传值

  • props作用: 接收父组件传递的数据
  • props就是父组件给子组件标签上定义的属性
1. props是组件的选项  定义接收属性2. props的值可以是字符串数组 props:["list"]3. props数组里面的元素称之为prop(属性) 属性=?值4. prop的值来源于外部的(组件的外部)5. prop(我们这里是lists)是组件的属性->自定义标签的属性6. prop的赋值位置(在使用组件时,通过标签属性去赋值)7. prop的用法和data中的数据用法一样
  • 注意: 父组件传递给子组件的数据是**只读的,即只可以用,不可以改**
  • 用props完成父组件给子组件传值 传值的属性都是定义在 子组件的标签上,可以采用v-bind的形式传递动态值
  • 定义props属性 在标签上定义属性 v-bind传递动态值
  • 在子组件中声明接收的属性
  • 在子组件中使用 组件 记住 属性只可以用 不可改

任务

  1. 定义子组件
  2. 在父组件中将 [“北京”, “上海”,“天津”] 传递给子组件
  3. 在子组件中获取该数据 并采用v-for循环显示在页面上
components: {     a: {       template: "",       components: {         b: {           props: ["name1"],           template: "
", components: { c: { props: ["name2"], template: "
", components: { d: { props: ["name3"] } } } } } } } }

路径:

1. 定义父子组件      2. 定义props接受父组件属性     3. 父组件中通过属性给子组件传值     4. 注册使用子组件
const comA = {    template: `
{ {item}}
`,props: ["list"] // props可以是数组 也可以是对象};

关于具体实现参考课程提供的代码

基础-组件-子组件给父组件传值(自定义事件)

目标:掌握如何通过子组件给父组件传值

​ 父组件如何监听子组件事件?

  • 上个小节中,父组件通过props将值传给了子组件,那么子组件如何将数据传给父组件?
  • 可通过在子组件中触发**$emit**事件,然后在父组件中监视此事件 进行追踪
  • 任务
  1. 上一小节基础上 实现 点击子组件的城市时,将当前点击的城市传递给父组件,
  2. 父组件 将 当前点击城市 通过props再次传递给子组件
  3. 子组件 根据当前选中和循环项目比对 得出 哪个城市 得到 select class
  4. 对 select class进行样式赋值,使其 字体大小为40px 字体颜色为红色

注意:抛出事件名必须为全小写

路径: 点击子组件时 调用父组件的方法 改变当前的select

​ 1 定义子组件

​ 2 定义props接收 父组件 数据 函数

​ 3 父组件给子组件传值 数据 和函数

​ 4 子组件点击事件绑定 父组件传递prop函数

注意 !!! 如果props有驼峰命名的情况 赋值时 需要拆成- 分割的形式 否则无法传递

例如

// 错误

//正确

*关于具体实现参考课程提供的代码

上一篇:vue基础语法--路由,css过渡与动画,vue-cli工具2.0/3.0建项,钩子函数
下一篇:vue基础语法-术语,实例选项,系统指令,过滤器

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2025年04月21日 02时49分49秒