1. 程式人生 > >Vue2+VueRouter2+Webpack+Axios 構建專案3再把內容頁面渲染出來

Vue2+VueRouter2+Webpack+Axios 構建專案3再把內容頁面渲染出來

編寫 src/utils/index.js 檔案

直接給程式碼如下:

export default {
  goodTime (str) {
    let now = new Date().getTime()
    let oldTime = new Date(str).getTime()
    let difference = now - oldTime
    let result = ''
    let minute = 1000 * 60
    let hour = minute * 60
    let day = hour * 24
    let month = day * 30
    let
year = month * 12 let _year = difference / year let _month = difference / month let _week = difference / (7 * day) let _day = difference / day let _hour = difference / hour let _min = difference / minute if (_year >= 1) { result = '發表於 ' + ~~(_year) + ' 年前' } else
if (_month >= 1) { result = '發表於 ' + ~~(_month) + ' 個月前' } else if (_week >= 1) { result = '發表於 ' + ~~(_week) + ' 周前' } else if (_day >= 1) { result = '發表於 ' + ~~(_day) + ' 天前' } else if (_hour >= 1) { result = '發表於 ' + ~~(_hour) + ' 個小時前' } else if
(_min >= 1) { result = '發表於 ' + ~~(_min) + ' 分鐘前' } else { result = '剛剛' } return result } }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

好,程式碼噁心了點,我拿我以前寫的程式碼改的,沒有深入優化,大家就隨便看看,大概就是這麼個東西。

寫好程式碼之後,我們儲存檔案。但是此時,我們還不能使用我們的這個方法函式。我們必須在 main.js 中將我們的方法函式給繫結上。如下程式碼:

// 引用工具檔案
import utils from './utils/index.js'
// 將工具方法繫結到全域性
Vue.prototype.$utils = utils
  • 1
  • 2
  • 3
  • 4

還記得我們先前是如何將我們的介面請求函式給繫結上的嗎?這裡其實是採用了同樣的方法。如果不記得了,可以點選連結過去看看。

好了,這樣,我們寫的這個函式,就可以隨便被我們呼叫了。我們再來修改一下我們上面的 index.vue 中的程式碼,將 time 調整為:

<time v-text="$utils.goodTime(i.create_at)"></time>
  • 1

然後,我們再來看一下實際的效果:

vue demo by fungleo


編寫內容頁面

照舊,先看東西,再說話:

<template>
  <div>
    <myHeader></myHeader>
    <h2 v-text="dat.title"></h2>
    <p>作者:{{dat.author.loginname}}  發表於:{{$utils.goodTime(dat.create_at)}}</p>
    <hr>
    <article v-html="dat.content"></article>
    <h3>網友回覆:</h3>
    <ul>
      <li v-for="i in dat.replies">
        <p>評論者:{{i.author.loginname}}  評論於:{{$utils.goodTime(i.create_at)}}</p>
        <article v-html="i.content"></article>
      </li>
    </ul>
    <myFooter></myFooter>
  </div>
</template>
<script>
import myHeader from '../components/header.vue'
import myFooter from '../components/footer.vue'
export default {
  components: { myHeader, myFooter },
  data () {
    return {
      id: this.$route.params.id,
      dat: {}
    }
  },
  created () {
    this.getData()
  },
  methods: {
    getData () {
      this.$api.get('topic/' + this.id, null, r => {
        this.dat = r.data
      })
    }
  }
}
</script>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40

好,我們這邊把程式碼寫進 src/page/content.vue 檔案。然後儲存,我在我們先前的列表頁面隨便點開一篇文章,然後我們看下結果:

主體渲染結果

回覆渲染結果

好,按照我們的需求已經渲染出來了。

重複一下,樣式,我就不管了,自己去寫。

說明一下里面的重點

template 部分

其他的內容,我們在列表頁面已經見過了。這裡第一次出現 <article v-html="dat.content"></article> 這個東西。

同樣是渲染內容, v-html 和 v-text 有什麼區別呢?其實區別非常簡單,v-text 會把所有的內容當成字串給直接輸出出來。而 v-html 會把字串給轉換為 html 標記語言給渲染出來。這部門更多內容,請參考:https://cn.vuejs.org/v2/api/#v-html

注意了! 我們在列表中,我們使用的是 Header 注意的元件命名方式,為什麼我這邊用了 myHeader 注意的元件命名方式呢?

其實,我想說明的是,我們不要使用 html 本身就支援的標籤名稱來自定義我們的元件,這容易導致混亂,最好,是像內容頁裡面這樣,使用自定義的標籤名。

好吧,我承認,就是我先前寫忘掉了,不要鄙視我~~但我感覺這裡強調一下也好,省得你以後也忘記了。

script 部分

程式碼基本上是一致的,重點是 id: this.$route.params.id, 這一句。

我們是這麼配置的:

export default new Router({
  routes: [
    {
      path: '/',
      component: Index
    }, {
      path: '/content/:id',
      component: Content
    }
  ]
})
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

重點:path: '/content/:id', 中,我們使用了 :id 這個東西。這是動態路由匹配。參考文件: 《動態路由匹配

我們需要從我們的 url 中,來獲取我們的 id 然後根據這個 id 來進行資料的查詢。

好,想起來了。那麼我們已經在 url 包含了這個 id 了。

http://localhost:8080/#/content/58eee565a92d341e48cfe7fc
  • 1

如上:58eee565a92d341e48cfe7fc 這個就是 ID ,奇怪是奇怪了點,但確實就是 id

我們如何取出來呢?

不用想很多複雜的事情,vuerouter 早就給我們準備瞭解決方法了。

我們可以在專案中列印如下程式碼:

console.log(this.$route)
  • 1

擦,部落格寫到這裡 cnodejs.org 網站掛了。。。那就暫時不放我的列印結果圖了,大家可以看下官方文件 路由資訊物件的屬性

回頭,你也可以自己列印了看下,有助於你自己分析理解問題。

好了,除了上面的問題,我們再看下我們的介面資料呼叫,程式碼如下:

this.$api.get('topic/' + this.id, null, r => {
  this.dat = r.data
})
  • 1
  • 2
  • 3

等於沒什麼要說的,就是把資料拿過來了而已,需要注意的是,我們的請求的介面地址是根據 id 進行變化的。所以,我這邊採用了字串拼接的方法,'topic/' + this.id 來得到我們真正想要請求的介面資料。

相關推薦

Vue2+VueRouter2+Webpack+Axios 構建專案3內容頁面渲染出來

編寫 src/utils/index.js 檔案直接給程式碼如下:export default { goodTime (str) { let now = new Date().getTime() let oldTime = new Date(str).ge

Vue2+VueRouter2+Webpack+Axios 構建專案實戰2017重製版(七)初識 vue 檔案

                     Vue2+VueRouter2+Webpack+Axios 構建專案實戰2017重製版(七)初識 *.vue 檔案前情回顧在上一篇文章《Vue2+VueRouter2+Webpack+Axios 構建專案實戰2017重製版(六)將介面用 webpack 代理到本地》中

Vue2+VueRouter2+Webpack+Axios 構建專案實戰2017重製版(四)調整 App vue 和 r

                     Vue2+VueRouter2+Webpack+Axios 構建專案實戰2017重製版(四)調整 App.vue 和 router 路由前情回顧如果你按照我的結構框架去調整了之後,那麼,現在你的專案應該是出錯,並且跑不起來了。所以,我們需要進行一些調整,讓專案重新跑起

Vue2+VueRouter2+Webpack+Axios 構建專案實戰2017重製版(七)初識 *.vue 檔案

前情回顧 以下為我寫的博文: 在上一篇文章《Vue2+VueRouter2+Webpack+Axios 構建專案實戰2017重製版(六)將介面用 webpack 代理到本地》中,我們順利的將介面代理到了本地。需要說明的是, cnodejs.org 的這套介面是沒有跨域問題

Vue2+VueRouter2+Webpack+Axios構建專案實戰2017重製版(一)基礎知識概述

vue 是什麼,以及我們為什麼選擇 vue 在我們公司的實際拓展中,由於選擇框架時,angular 正在新舊交替,江山未穩,因此我們當時嘗試在兩個專案中引用不同的技術路線 react 和 vue 。 實踐證明,這兩個都是非常優秀的框架。但是同時也證明,在前端初學者的面前,vue 的學習成本明顯比 re

Vue2+VueRouter2+Webpack+Axios 構建專案實戰2017重製版(八)渲染一個列表出來

前情回顧 好,這章開始,真的得寫點東西了。 製作 header.vue 和 footer.vue 元件檔案。 不是本篇文章的重點,但是還是有比較講一下。在第三篇博文中,我們規劃了我們的專案檔案結構,當時保留了一個 components 的空資料夾。這裡,就是準備放

Vue2+VueRouter2+Webpack+Axios 構建專案實戰2017重製版(一)基礎知識概述

前言 2016年,我寫了一系列的 VUE 入門教程,當時寫這一系列博文的時候,我也只是一個菜鳥,甚至在寫的過程中關閉了程式碼審查,否則通不過校驗。 本來寫這一系列的博文只是為了給自己看的,但沒想到的是,這系列博文的點選量超過了2萬以上,搜尋引擎的排名也是非常理想,這讓

vue2+vueRouter2+webpack+jsonp(一)構建專案

說明:由於本人已經習慣了git的使用,所以本專案的所有命令都是在git中執行的,若大家有其他跑命令的方式也是可以採取的。 git的使用方法 1.安裝node 安裝好之後,我們在終端輸入以下兩個命令 nod

Vue2+VueRouter2+webpack 構建項目實戰(三):配置路由,運行頁面

margin not found sans product mage -a nod targe fig 制作.vue模板文件 通過前面的兩篇博文的學習,我們已經建立好了一個項目。問題是,我們還沒有開始制作頁面。下面,我們要來做頁面了。 我們還是利用 http://cno

Vue2+VueRouter2+webpack 構建項目實戰(五):配置子路由

dex log fault 地址 數據 from 插入 接口 content 前言 通過前面幾章的實戰,我們已經順利的構建項目,並且從API接口獲取到數據並且渲染出來了。制作更多的頁面,更復雜的應用,就是各位自己根據自己的項目去調整的事情了。 本章講一下如何配置子路由,

vue2+vueRouter2+webpack+jsonp(三)調整App.vue並配置路由

如果你按我上面的檔案目錄修改的話,此刻你的專案應該是跑不起來的,那我們來改點東西。 1.修改App.vue <template> <div id="app"> <router-view></router-view>

vue入門教程+實戰+Vue2+VueRouter2+webpack

vue入門之路篇系列教程: vue最簡單的入門教程+實戰+Vue2+VueRouter2+webpack(一) vue最簡單的入門教程+實戰+Vue2+VueRouter2+webpack(二) vue最簡單的入門教程+實戰+Vue2+VueRouter2+webpac

vue2.0 + webpack+axios+elementUi+vue-router+vuex 搭建後臺管理系統環境部署(二)

前言 最近公司專案需要做一個小型的填報的錄入系統,根據業務的具體分析,採用了基於vue2.0 + webpack+axios+elementUi+vue-router+vuex全家桶的技術棧構建錄入系統,同時也作為學習vue全家桶技術棧的一個學習記錄。 專案初始化 第一

Webpack+Vue構建專案步驟

第一步:單純的搭建出來我們的專案,並且通過webpack打包一個bundle.js然後執行起來 步驟: 1、建立專案必要的檔案和資料夾(見截圖) 2、配置webpack.develop.config.js,指定入口,輸出檔案 3、在main.js中寫程式碼,A

vue成長之路+實戰+Vue2+VueRouter2+webpack(一)vue-router路由入門

前言 通過前面我寫的VUE入門部落格,相信已經大概瞭解VUE是何物,但是對於細節性的問題我們還是有些忽略,有很多網友希望我能繼續寫相關部落格,但是由於工作繁忙原因一直無空去寫,終於得空於是協知識歸來。 2017年一定是VUE火熱的一年,引得無數人飛蛾

第七週專案3 負數正數趕出佇列

/* Copyright (c)2015,煙臺大學計算機與控制工程學院 All rights reserved. 檔名稱:第7周專案3 - 負數把正數趕出佇列.cpp 作 者:孫欽達 完成日期:2015年10

vue2.0+vue-router2.0+axios+webpack開發webapp專案(一)

前言:本人第一次將vue運用到實際專案中,將實際開發流程簡單描述下(第一次寫部落格,有問題希望及時提出,討厭噴子。) 一.安裝node環境   首先我們需要安裝node環境,這個想必不用多說,可以直接到中文官網http://nodejs.cn/下載安裝包。其

Spring原始碼構建專案,匯入eclipse後,缺失spring-cglib-repack-3.2.4.jar和spring-objenesis-repack-2.4.jar的解決辦法

Spring原始碼在匯入ide之後,發現有spring-cglib-repack-3.2.8.jar和spring-objenesis-repack-2.6.jar不存在,在spring-framework目錄下執行gradle objenesisRepackJar和gradle cglibRe

Vue2webpack、express4新建vue專案

1.環境: Vue專案通常是由webpack工具來構建,而webpack命令的執行是依賴node.js的環境的,所以首先要安裝node.js。 2.新建專案: (1)通過應用生成器工具 express-generator 快速建立一個應用的骨架。 安裝express-

webpack從零開始構建專案之rem問題(三)

使用webpack解決px轉rem的自適應問題 現在的專案配置已經可以正常執行 接下來我們要考慮下一個問題,由於VUE主要適用於移動端,所以我們需要一個自適應方案 由於這是一個大眾需求的剛需方案,所以我們大可不必自己手動去寫JS程式碼,重複造輪子 那麼我