vue使用模擬數(shù)據(jù)

在項目中嘗試了mockjs允耿,mock數(shù)據(jù)典蝌,實現(xiàn)前后端分離開發(fā)单料。
關(guān)于mockjs,官網(wǎng)描述的是
1.前后端分離
2.不需要修改既有代碼锅减,就可以攔截 Ajax 請求,返回模擬的響應(yīng)數(shù)據(jù)伐坏。
3.數(shù)據(jù)類型豐富
4.通過隨機數(shù)據(jù)怔匣,模擬各種場景。等等優(yōu)點桦沉。

總結(jié)起來就是在后端接口沒有開發(fā)完成之前每瞒,前端可以用已有的接口文檔,在真實的請求上攔截ajax纯露,并根據(jù)mockjs的mock數(shù)據(jù)的規(guī)則剿骨,模擬真實接口返回的數(shù)據(jù),并將隨機的模擬數(shù)據(jù)返回參與相應(yīng)的數(shù)據(jù)交互處理埠褪,這樣真正實現(xiàn)了前后臺的分離開發(fā)浓利。

與以往的自己模擬的假數(shù)據(jù)不同挤庇,mockjs可以帶給我們的是:在后臺接口未開發(fā)完成之前模擬數(shù)據(jù),并返回荞膘,完成前臺的交互罚随;在后臺數(shù)據(jù)完成之后,你所做的只是去掉mockjs:停止攔截真實的ajax羽资,僅此而已淘菩。

下面一步步的來實現(xiàn)vue-cli創(chuàng)建項目并添加一條新聞類的數(shù)據(jù)模擬接口:

  1. 安裝vue-cli全局腳手架
npm install --global vue-cli
  1. 創(chuàng)建vue項目
vue init webpack mockjs<br>cd mockjs<br>npm install axios --save

3.安裝mockjs

npm install mockjs --save-dev
  1. 項目目錄
    mokejs文件里面包含src build router app.vue main.js 等文件 main.js下面還有個moke.js
axios/api    用來封裝axios

Hello.vue     頁面首頁

NeswCell.vue   新聞組件

router/index.js   路由

main.js      入口js

mock.js     mockjs文件

完成后的數(shù)據(jù)已經(jīng)渲染

  1. 在入口js(main.js)里引入mockjs
// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import App from './App'
import router from './router'
 
Vue.config.productionTip = false
 
// 引入mockjs
require('./mock.js')
 
/* eslint-disable no-new */
new Vue({
    el: '#app',
    router,
    template: '<App/>',
    components: {
        App
    }
})
 
Vue.filter('getYMD', function(input) {
    return input.split(' ')[0];
})

這里添加了額一個常用的時間整理過濾器 getYMD

  1. 添加一個mock規(guī)則(mock.js)
// 引入mockjs
const Mock = require('mockjs');
// 獲取 mock.Random 對象
const Random = Mock.Random;
// mock一組數(shù)據(jù)
const produceNewsData = function() {
    let articles = [];
    for (let i = 0; i < 100; i++) {
        let newArticleObject = {
            title: Random.csentence(5, 30), //  Random.csentence( min, max )
            thumbnail_pic_s: Random.dataImage('300x250', 'mock的圖片'), // Random.dataImage( size, text ) 生成一段隨機的 Base64 圖片編碼
            author_name: Random.cname(), // Random.cname() 隨機生成一個常見的中文姓名
            date: Random.date() + ' ' + Random.time() // Random.date()指示生成的日期字符串的格式,默認(rèn)為yyyy-MM-dd;Random.time() 返回一個隨機的時間字符串
        }
        articles.push(newArticleObject)
    }
 
    return {
        articles: articles
    }
}
 
// Mock.mock( url, post/get , 返回的數(shù)據(jù))屠升;
Mock.mock('/news/index', 'post', produceNewsData);
  1. 在Hello.vue 中請求文檔接口潮改,并接收mock數(shù)據(jù)
<template>
  <div class="index">
    <div v-for="(item, key) in newsListShow">
      <news-cell
      :newsDate="item"
      :key="key"
      ></news-cell>
    </div>
  </div>
</template>
 
<script>
import api from './../axios/api.js'
import NewsCell from './NewsCell.vue'
 
export default {
  name: 'index',
  data () {
    return {
      newsListShow: [],
    }
  },
  components: {
    NewsCell
  },
  created() {
    this.setNewsApi();
  },
  methods:{
    setNewsApi: function() {
      api.JH_news('/news/index', 'type=top&key=123456')
      .then(res => {
        console.log(res);
        this.newsListShow = res.articles;
      });
    },
  }
}
</script>
 
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
.topNav{
  width: 100%;
  background: #ED4040;
  position: fixed;
  top:0rem;
  left: 0;
  z-index: 10;
}
.simpleNav{
  width: 100%;
  line-height: 1rem;
  overflow: hidden;
  overflow-x: auto;
  text-align: center;
  font-size: 0;
  font-family: '微軟雅黑';
  white-space: nowrap;
}
.simpleNav::-webkit-scrollbar{height:0px}
.simpleNavBar{
  display: inline-block;
  width: 1.2rem;
  color:#fff;
  font-size:0.3rem;
}
.navActive{
  color: #000;
  border-bottom: 0.05rem solid #000;
}
.placeholder{
  width:100%;
  height: 1rem;
}
</style>

ps: api.JH_news是封裝的axios函數(shù)

axios/api.js如下

import axios from 'axios'
import vue from 'vue'
 
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'
 
// 請求攔截器
axios.interceptors.request.use(function(config) {
    return config;
  }, function(error) {
    return Promise.reject(error);
  })
  // 響應(yīng)攔截器
axios.interceptors.response.use(function(response) {
  return response;
}, function(error) {
  return Promise.reject(error);
})
 
// 封裝axios的post請求
export function fetch(url, params) {
  return new Promise((resolve, reject) => {
    axios.post(url, params)
      .then(response => {
        resolve(response.data);
      })
      .catch((error) => {
        reject(error);
      })
  })
}
 
export default {
  JH_news(url, params) {
    return fetch(url, params);
  }
}

8.在NewsCell.vue展示數(shù)據(jù)

<template>
  <section class="financial-list">
    <section class="collect" @click="jumpPage">
      <aside>
        <h2>{{newsDate.title}}</h2>
        <section class="Cleft clearfix">
          <img class="fl" src="./../assets/icon/eyes.png" style="width:0.24rem;height:0.2rem;">
          <span class="fl">{{newsDate.author_name}}</span>
        </section>
        <section class="Cright">
          <img src="./../assets/icon/clock.png" style="width:0.2rem;height:0.2rem;">
          <span>{{newsDate.date | getYMD}}</span>
        </section>
        <div style="clear: both"></div>
      </aside>
      <aside>
        <img :src="newsDate.thumbnail_pic_s" style="border-radius: 0.2rem;">
      </aside>
      <div style="clear: both"></div>
    </section>
  </section>
</template>
 
<script>
export default {
  name: 'NewsCell',
  props: {
    newsDate: Object
  },
  data () {
    return {
    }
  },
  computed: {
  },
  methods: {
    jumpPage: function () {
      window.location.href = this.newsDate.url
    }
  }
}
</script>

ps: 此文為摘抄 僅作為筆記方便以后閱讀

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市腹暖,隨后出現(xiàn)的幾起案子汇在,更是在濱河造成了極大的恐慌,老刑警劉巖脏答,帶你破解...
    沈念sama閱讀 212,657評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件糕殉,死亡現(xiàn)場離奇詭異,居然都是意外死亡殖告,警方通過查閱死者的電腦和手機阿蝶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,662評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來黄绩,“玉大人羡洁,你說我怎么就攤上這事∷ぃ” “怎么了筑煮?”我有些...
    開封第一講書人閱讀 158,143評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長粤蝎。 經(jīng)常有香客問我真仲,道長,這世上最難降的妖魔是什么初澎? 我笑而不...
    開封第一講書人閱讀 56,732評論 1 284
  • 正文 為了忘掉前任袒餐,我火速辦了婚禮,結(jié)果婚禮上谤狡,老公的妹妹穿的比我還像新娘。我一直安慰自己卧檐,他們只是感情好墓懂,可當(dāng)我...
    茶點故事閱讀 65,837評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著霉囚,像睡著了一般捕仔。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,036評論 1 291
  • 那天榜跌,我揣著相機與錄音闪唆,去河邊找鬼。 笑死钓葫,一個胖子當(dāng)著我的面吹牛悄蕾,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播础浮,決...
    沈念sama閱讀 39,126評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼帆调,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了豆同?” 一聲冷哼從身側(cè)響起番刊,我...
    開封第一講書人閱讀 37,868評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎影锈,沒想到半個月后芹务,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,315評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡鸭廷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,641評論 2 327
  • 正文 我和宋清朗相戀三年枣抱,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片靴姿。...
    茶點故事閱讀 38,773評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡沃但,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出佛吓,到底是詐尸還是另有隱情宵晚,我是刑警寧澤,帶...
    沈念sama閱讀 34,470評論 4 333
  • 正文 年R本政府宣布维雇,位于F島的核電站淤刃,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏吱型。R本人自食惡果不足惜逸贾,卻給世界環(huán)境...
    茶點故事閱讀 40,126評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望津滞。 院中可真熱鬧铝侵,春花似錦、人聲如沸触徐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,859評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽撞鹉。三九已至疟丙,卻和暖如春颖侄,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背享郊。 一陣腳步聲響...
    開封第一講書人閱讀 32,095評論 1 267
  • 我被黑心中介騙來泰國打工览祖, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人炊琉。 一個月前我還...
    沈念sama閱讀 46,584評論 2 362
  • 正文 我出身青樓展蒂,卻偏偏與公主長得像,于是被迫代替她去往敵國和親温自。 傳聞我的和親對象是個殘疾皇子玄货,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,676評論 2 351

推薦閱讀更多精彩內(nèi)容