经过前面几篇教程,咱们已经顺利搭建起来了,而且已经组建好路由了。本章节,咱们须要作一个列表页面,而后利用获取 http://cnodejs.org/api 的公开API,渲染出来。css
咱们打开src/page/index.vue文件,在这里写入下面的代码:vue
<template> <div> <h1 class="logo">cnodejs Api Test</h1> <ul class="list"> <li v-for="item in lists" v-text="item.title"></li> </ul> </div> </template> <script> export default { data() { return { lists:[{ id:1, title:"test title 1" },{ id:2, title:"test title 2" }] } } } </script>
经过浏览器,咱们能够看到如图所示的渲染结果:node
新建文件, src/style/scss/_index.scssjquery
而后在 src/style/style.scss中输入npm
@import "scss/index";
而后,咱们就能够在浏览器中,看到带样式的列表了,如图所示:api
注:个人习惯是,一个文件,一个样式,文件位于src/page/文件夹下面,样式位于src/style/scss下面。文件和样式同名。若是文件位于子目录,如src/page/user/pay.vue,那么,对应的scss文件就是src/style/scss/user/_pay.scss这样。浏览器
每个团队的规范都是不同的,都是各有所长的,重要的是,条理性。app
在第二节中,咱们在src/config目录下面创建了一个api.js的空文件。在第三节中没有使用。本节,咱们要开始使用了。框架
首先,咱们编辑 src/main.js ,引用 src/config/api.js。以下:函数
import api from './config/api' Vue.prototype.$api = api
插入这两行代码,就引用好了api.js,而且,把它绑定到了全局,而后咱们就能够在各类地方使用这个文件了。虽然这个文件是空的。
那么src/main.js的完整代码:
import Vue from 'vue' import App from './App' import router from './config/routes.js' Vue.config.productionTip = false import api from './config/api.js' Vue.prototype.$api = api new Vue({ el: '#app', router, template: '<App/>', components: { App } })
要请求接口,就必须有相对应的组件。若是你使用过jQuery,应该熟悉其中的AJAX方法。固然,在vue中,咱们就不考虑使用jquery了。咱们使用superagent这个组件。
安装很是简单,咱们首先跳转到项目根目录,而后输入 npm install superagent -D
进行安装。
有了工具了,咱们就须要来编写api.js文件,使它能够完成咱们想要的工做。
// 配置API接口地址 var root = 'https://cnodejs.org/api/v1'; // 引用superagent var request = require('superagent'); // 自定义判断元素类型JS function toType(obj) { return ({}).toString.call(obj).match(/\s([a-zA-Z]+)/)[1].toLowerCase() } // 参数过滤函数 function filter_null(o) { for (var key in o) { if (o[key] == null) { delete o[key] } if (toType(o[key]) == 'string') { o[key] = o[key].trim() if (o[key].length == 0) { delete o[key] } } } return o } /* 接口处理函数 这个函数每一个项目都是不同的,我如今调整的是适用于 https://cnodejs.org/api/v1 的接口,若是是其余接口 须要根据接口的参数进行调整。参考说明文档地址: https://cnodejs.org/topic/5378720ed6e2d16149fa16bd */ function _api_base(method, url, params, success, failure) { var r = request(method, url).type('text/plain') if (params) { params = filter_null(params); if (method === 'POST' || method === 'PUT') { if (toType(params) == 'object') { params = JSON.stringify(params); } r = r.send(params) } else if (method == 'GET' || method === 'DELETE') { r = r.query(params) } } r.end(function(err, res) { if (err) { alert('api error, HTTP CODE: ' + res.status); return; }; if (res.body.success == true) { if (success) { success(res.body); } } else { if (failure) { failure(res.body); } else { alert('error: ' + JSON.stringify(res.body)); } } }); }; // 返回在vue模板中的调用接口 export default { get: function(url, params, success, failure) { return _api_base('GET', root + '/' + url, params, success, failure) }, post: function(url, params, success, failure) { return _api_base('POST', root + '/' + url, params, success, failure) }, put: function(url, params, success, failure) { return _api_base('PUT', root + '/' + url, params, success, failure) }, delete: function(url, params, success, failure) { return _api_base('DELETE', root + '/' + url, params, success, failure) }, }
这个文件就有点狂拽酷炫吊炸天了。目前,咱们测试cnodejs.org的接口,我调整得可使用。实际上在其余的接口项目中,这个是须要调整的,要调整到你的项目合适的代码。主要是根据接口返回的内容进行各类判断和处理,其中主要的框架代码是不用动的。
编辑src/page/index.vue文件,代码以下:
<template> <div> <h1 class="logo">cnodejs Api Test</h1> <ul class="list"> <li v-for="item in lists" v-text="item.title"></li> </ul> </div> </template> <script> export default { data() { return { lists:[] } }, created () { // 组件建立完后获取数据,这里和1.0不同,改为了这个样子 this.get_data() }, methods: { get_data: function(params) { var v = this if (!params) params = {} // 咱们这里用全局绑定的 $api 方法来获取数据,方便吧~ v.$api.get('topics', params, function(r) { v.lists = r.data }) }, }, } </script>
保存后,咱们在浏览器中,就能够看到渲染出来的列表了。以下图所示: