vue+vue-router+axios+element-ui构建vue实战项目之六(渲染index.vue列表)

在上一节《vue+vue-router+axios+element-ui构建vue实战项目之五(配置axios api接口调用)》中,我们配置完成axios后,成功访问https://unpkg.com/axios@0.18.0/dist/axios.min.js接口并返回了数据。

好,这节开始,我们来写点“真”东西。

 

编写src/page/index.vue 文件

不多说,直接上代码

 1 <template>
 2   <div>
 3     <ul>
 4       <li v-for="item in getList">
 5         <span>{{item.create_at}}</span>
 6         <router-link :to="'/content/'+item.id" :target="'_blank'">
 7           {{item.title}}
 8         </router-link>
 9       </li>
10     </ul>
11   </div>
12 </template>
13 <script>
14   export default {
15     data () {
16       return {
17         getList: []
18       }
19     },
20     mounted () {
21       this.getTopics()
22     },
23     methods: {
24       getTopics (){
25         this.$http.get('/topics')
26           .then(res => {
27             console.log(res)
28             res.data.success && (this.getList = res.data.data)
29           })
30           .catch(err =>{
31             console.log(err)
32           })
33       }
34     }
35   }
36 </script>
37 <style lang="scss">
38   @import "../style/style";
39 </style>

src/style/style.scss代码

1 ul>li{list-style: decimal}

浏览器显示效果,如图

 

 这里要说一下,为什么接口只写了“/topics”,而完整的接口路径为“https://cnodejs.org/api/v1/topics”

1 this.$http.get('/topics')
2           .then(res => {
3             console.log(res)
4             res.data.success && (this.getList = res.data.data)
5           })
6           .catch(err =>{
7             console.log(err)
8           })

一般我们做开发的时候,接口的路径基本来自同一个地址,如果每次都这么写的话,重复工作太多,并且后续如果接口变了,修改起来也麻烦。

所以,我们需要在main.js里面添加一句:

1 //设置全局访问接口
2 axios.defaults.baseURL = 'https://cnodejs.org/api/v1'

 后续,调用来自同一个地方的接口时,只需要写接口的方法即可。

可能有人要问,代码中 res => {} 是什么意思,这是es6的箭头函数,上面的代码等同于

1 this.$http.get('/topics')
2           .then(function (res) {
3             console.log(res)
4             res.data.success && (this.getList = res.data.data)
5           })
6           .catch(function (err) {
7             console.log(err)
8           })

如果对es6有其他疑问,可以移步阮一峰老师的《ES6入门》教程,里面有详细介绍。

由于有了前面几篇文章的积累,这里就比较好理解了。

我们从接口拿到了 res.data 的数据,让我们自己定义的 this.getList等于这个数据,然后我们在模板中就可以用 getList 进行渲染了。

这里体现了 vue 的数据双向绑定的特性。

 

创建一个公用工具处理文件

如下面的图片所示,由于拿到的数据是一个标准的时间格式,直接渲染在页面上,这个效果不是很理想。

因此,我们可以把时间给处理一下,然后再渲染出来。

编写 src/utils/index.js 文件

 1 export default {
 2   //格式化日期
 3   formatDate (str){
 4     let result = ''
 5     const date = new Date(str).toLocaleDateString()
 6     const hour = new Date(str).getHours()
 7     const minute = new Date(str).getMinutes()
 8     const second = new Date(str).getSeconds()
 9     result = date.replace(/\//g,'-') + ' ' + hour + ':' + minute + ':' + second
10     return result
11   }
12 
13 }

写好代码之后,我们保存文件,但是此时,我们还不能使用我们的这个方法函数,我们必须在 main.js 中将我们的方法函数给绑定上。

如下代码:

1 引用utils工具文件
2 import utils from './utils'
3 //全局注册utils
4 Vue.prototype.$utils = utils

好了,这样,我们写的这个函数,就可以随便被我们调用了。

我们再来修改一下我们上面的 index.vue 中的代码,将 span 调整为:

1 <span>{{$utils.formatDate(item.create_at)}}</span>

按照上面的步骤修改代码后,我们再来看结果

好,我们已经看到,时间已经搞好了。

不知道大家有没有发现,我们在 script 区域,引用一个函数是使用 this.getTopics或者 this.getList 这样的代码引用的。但是在 template 中,我们是不加 this 的。

在 js 中,关于 this 的论文就很多,这里不深入讲解了,具体的大家去看vue的官方文档

好,列表已经渲染出来了。下一节,我们渲染content.vue文件。

 

如果文章中存在错误的地方,麻烦请大家在评论中指正,以免误人子弟,谢谢!
posted @ 2019-03-01 14:06  赵先生没烦恼  阅读(1363)  评论(0编辑  收藏  举报