首页 > 其他分享 >集成API

集成API

时间:2023-03-14 12:31:57浏览次数:47  
标签:集成 function +- js API TODO todos

问题

现在,如果要把这个简单的TODO应用变成一个用户能使用的Web应用,我们需要解决几个问题:

  1. 用户的TODO数据应该从后台读取;
  2. 对TODO的增删改必须同步到服务器后端;
  3. 用户在View上必须能够修改TODO。

第1个和第2个问题都是和API相关的。只要我们实现了合适的API接口,就可以在MVVM内部更新Model的同时,通过API把数据更新反映到服务器端,这样,用户数据就保存到了服务器端,下次打开页面时就可以读取TODO列表。

我们在​​vue-todo​​的基础上创建​​vue-todo-2​​项目,结构如下:

vue-todo-2/
|
+- .vscode/
| |
| +- launch.json <-- VSCode 配置文件
|
+- app.js <-- koa app
|
+- static-files.js <-- 支持静态文件的koa middleware
|
+- controller.js <-- 支持路由的koa middleware
|
+- rest.js <-- 支持REST的koa middleware
|
+- package.json <-- 项目描述文件
|
+- node_modules/ <-- npm安装的所有依赖包
|
+- controllers/ <-- 存放Controller
| |
| +- api.js <-- REST API
|
+- static/ <-- 存放静态资源文件
|
+- css/ <-- 存放bootstrap.css等
|
+- fonts/ <-- 存放字体文件
|
+- js/ <-- 存放各种js文件
|
+- index.html <-- 使用MVVM的静态页面

搭建架构

在​​api.js​​文件中,我们用数组在服务器端模拟一个数据库,然后实现以下4个API:

  • GET /api/todos:返回所有TODO列表;
  • POST /api/todos:创建一个新的TODO,并返回创建后的对象;
  • PUT /api/todos/:id:更新一个TODO,并返回更新后的对象;
  • DELETE /api/todos/:id:删除一个TODO。

和上一节的TODO数据结构相比,我们需要增加一个​​id​​属性,来唯一标识一个TODO。

准备好API后,在Vue中,我们如何把Model的更新同步到服务器端?

有两个方法,一是直接用jQuery的AJAX调用REST API,不过这种方式比较麻烦。

第二个方法是使用​​vue-resource​​这个针对Vue的扩展,它可以给VM对象加上一个​​$resource​​属性,通过​​$resource​​来方便地操作API。

使用vue-resource只需要在导入vue.js后,加一行​​<script>​​导入​​vue-resource.min.js​​文件即可。可以直接使用CDN的地址:

<script src="https://cdn.jsdelivr.net/vue.resource/1.0.3/vue-resource.min.js"></script>

我们给VM增加一个​​init()​​方法,读取TODO列表:

var vm = new Vue({
el: '#vm',
data: {
title: 'TODO List',
todos: []
},
created: function () {
this.init();
},
methods: {
init: function () {
var that = this;
that.$resource('/api/todos').get().then(function (resp) {
// 调用API成功时调用json()异步返回结果:
resp.json().then(function (result) {
// 更新VM的todos:
that.todos = result.todos;
});
}, function (resp) {
// 调用API失败:
alert('error');
});
}
}
});

注意到创建VM时,​​created​​指定了当VM初始化成功后的回调函数,这样,​​init()​​方法会被自动调用。

类似的,对于添加、修改、删除的操作,我们也需要往VM中添加对应的函数。以添加为例:

var vm = new Vue({
...
methods: {
...
create: function (todo) {
var that = this;
that.$resource('/api/todos').save(todo).then(function (resp) {
resp.json().then(function (result) {
that.todos.push(result);
});
}, showError);
},
update: function (todo, prop, e) {
...
},
remove: function (todo) {
...
}
}
});

添加操作需要一个额外的表单,我们可以创建另一个VM对象​​vmAdd​​来对表单作双向绑定,然后,在提交表单的事件中调用​​vm​​对象的​​create​​方法:

var vmAdd = new Vue({
el: '#vmAdd',
data: {
name: '',
description: ''
},
methods: {
submit: function () {
vm.create(this.$data);
}
}
});

绑定事件

​vmAdd​​和FORM表单绑定:

<form id="vmAdd" action="#0" v-on:submit.prevent="submit">
<p><input type="text" v-model="name"></p>
<p><input type="text" v-model="description"></p>
<p><button type="submit">Add</button></p>
</form>

最后,把​​vm​​绑定到对应的DOM:

<div id="vm">
<h3>{{ title }}</h3>
<ol>
<li v-for="t in todos">
<dl>
<dt contenteditable="true" v-on:blur="update(t, 'name', $event)">{{ t.name }}</dt>
<dd contenteditable="true" v-on:blur="update(t, 'description', $event)">{{ t.description }}</dd>
<dd><a href="#0" v-on:click="remove(t)">Delete</a></dd>
</dl>
</li>
</ol>
</div>

这里我们用​​contenteditable="true"​​让DOM节点变成可编辑的,用​​v-on:blur="update(t, 'name', $event)"​​在编辑结束时调用​​update()​​方法并传入参数,特殊变量​​$event​​表示DOM事件本身。

删除TODO是通过对​​<a>​​节点绑定​​v-on:click​​事件并调用​​remove()​​方法实现的。

如果一切无误,我们就可以先启动服务器,然后在浏览器中访问​​http://localhost:3000/static/index.html​​,对TODO进行增删改等操作,操作结果会保存在服务器端。

通过Vue和vue-resource插件,我们用简单的几十行代码就实现了一个真正可用的TODO应用。

使用CSS修饰后的页面效果如下:

集成API_Vue

标签:集成,function,+-,js,API,TODO,todos
From: https://blog.51cto.com/wusen/6120333

相关文章

  • #创作者激励# [FFH]napi_generator(一)——NAPI框架生成工具介绍
    【本文正在参加2023年第一期优质创作者激励计划】napi_generator(一)——NAPI框架生成工具介绍个人简介:深圳技术大学FSR实验室大三学生,正于九联科技实习,共同学习研究Open......
  • FastAdmin的API接口生成器插件,使用validate验证时报错等问题。
    1、当使用生成接口生成全局模型时,生成的validate文件的namespace错误应为 namespaceapp\common\validate;实际为namespaceapp\api\validate;解决方法:1、找到ap......
  • 系统集成项目管理工程师(中级) -- 项目管理(十一)
    一、项目风险管理1、风险是指某一特定危险情况发生的可能性和后果的组合。风险具有以下特征:(1)风险存在的客观性和普遍性。(2)某一具体风险发生的偶然性。(3)大量风险发......
  • kubernetes集成GPU原理
    这里以NvidiaGPU设备如何在Kubernetes中管理调度为例研究,工作流程分为以下两个方面:如何在容器中使用GPUKubernetes如何调度GPU容器中使用GPU想要在容器中的应用可......
  • OpenAi API接口访问不通
     使用nodejs接api接口,已经开了那啥,但还是报连接失败    ......
  • 百度地图web服务API
    一、获取AK官网地址:https://api.map.baidu.com/lbsapi/cloud/index.htm点击地图API产品,选择web服务API该套API免费对外开放,使用前请先申请密钥(key)点击创建应用提......
  • Mybatis+SpringBoot集成+Plus+Generator
    前言1.本文主要记录mybatis的使用及核心原理、mybatis集成springboot项目的相关内容、mybatis-plus概述和核心功能的使用。2.相关官网文档链接:(1)mybatis:https://mybatis......
  • 专为学习提供的标准API
    http://api.shop.eduwork.cn/index.html B站视频地址:https://www.bilibili.com/video/BV1E8411g77X/?spm_id_from=333.337.search-card.all.click&vd_source=7db8c19d0f......
  • chatgpt 集成飞书实践指南
    开个境外服务器目前OpenAI的API已向161个国家和地区开放,在亚洲范围内,日本、韩国、缅甸、印度、尼泊尔、巴基斯坦均在开放之列。openai对国内网络(包括香港)似乎都有屏蔽,刚......
  • jenkins 与 jfrog container registry 集成示例
    1.示例功能示例仓库:https://github.com/ygqygq2/jenkins-jfrog-demojenkins与jfrogcontainerregistry集成[x]dockermaven打包,普通文件方式上传至Artifactory,......