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文件。

 

如果文章中存在錯誤的地方,麻煩請大家在評論中指正,以免誤人子弟,謝謝!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM