中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

使用vue.js制作分頁組件
來源:易賢網(wǎng) 閱讀:1581 次 日期:2016-07-12 15:00:55
溫馨提示:易賢網(wǎng)小編為您整理了“使用vue.js制作分頁組件”,方便廣大網(wǎng)友查閱!

本文給大家分享的是個人在使用vue.js制作的文章和評論的分頁組件,并使用webpack打包起來,這里推薦給大家,有需要的小伙伴可以參考下

學(xué)習(xí)了vue.js一段時間,拿它來做2個小組件,練習(xí)一下。

我這邊是用webpack進(jìn)行打包,也算熟悉一下它的運(yùn)用。

源碼放在文末的 github 地址上。

首先是index.html

<!DOCTYPE html>

<html>

<head>

 <title>Page</title>

 <style type="text/css">

  * {

   margin: 0;

   padding: 0;

   font-family: 'Open Sans', Arial, sans-serif;

  }

  .contianer {

   width: 50%;

   height: auto;

   margin: 20px auto;

  }

  article {

   margin-bottom: 50px;

  }

 </style>

</head>

<body>

 <div class='contianer'>

  <article>

   文章內(nèi)容...

  </article>

  <div id='main'>

   <app></app>  

  </div>

 </div>

 <script type="text/javascript" src='bundle.js'></script>

</body>

</html>

我將 app這個組件放在 <div id='main'></div> 內(nèi)

通過webpack打包后,入口的js文件是entry.js,用來引入app.vue組件

entry.js

let Vue = require('vue');

import App from './components/app';

let app_vue = new Vue({

 el: '#main',

 components: {

  app: App

 }

});

接下來看下這個app組件

<style type="text/css" scoped>

</style>

<template>

 <comment :cur-page-index="curPageIndex" :each-page-size="eachPageSize" :comment-url="commentUrl"

  :comment-params="commentParams" :comment-is-sync="commentIsSync">

 </comment>

 <page :cur-page-index.sync="curPageIndex" :each-page-size="eachPageSize" :page-url="pageUrl"

  :page-params="pageParams" :page-is-sync="pageIsSync">

 </page>

</template> 

<script type="text/javascript">

 import Comment from './comment';

 import Page from './page';

 export default {

  data () {

   return {

    curPageIndex: 1,

    eachPageSize: 7,

   }

  },

  components: {

   comment: Comment,

   page: Page

  },

 }

</script>

它有2個子組件,分別是comment.vue和page.vue,通過動態(tài)綁定數(shù)據(jù),進(jìn)行父子間組件通信,我是這樣認(rèn)為的,對于 當(dāng)前在第幾頁 應(yīng)當(dāng)由 page.vue傳遞給app.vue,所以這里我們使用 雙向綁定,其余的如 params, url, isSync,即向后臺請求數(shù)據(jù)的東西以及是否同步或異步操作<當(dāng)然,這里我還沒有測試過后臺數(shù)據(jù),目前是直接js生成靜態(tài)數(shù)據(jù)>。

接下來,看下comment.vue評論組件

<style type="text/css" scoped>

 .comt-mask {

  opacity: 0.5;

 }

 .comt-title {

 }

 .comt-line {

  width: 100%;

  height: 2px;

  background-color: #CCC;

  margin: 10px 0;

 }

 .comt-wrap {

 }

 .comt-user {

  float: left;

 }

 .comt-img {

  width: 34px;

  height: 34px;

  border-radius: 17px;

 }

 .comt-context {

  margin: 0 0 0 60px;

 }

 .comt-name {

  color: #2B879E;

  margin-bottom: 10px;

  font-size: 18px;

 }

</style>

<template>

 <div v-if="hasComment" :class="{'comt-mask': loading}">

  <h3 class='comt-title'>{{ totalCommentCount }} 條評論</h3>

  <div class="comt-line"></div>

  <div class="comt-wrap" v-for="comment of commentArr">

   <div class="comt-user">

    <img src='{{ comment.avatar }}' class="comt-img"/>

   </div>

   <div class="comt-context">

    <p class="comt-name">{{ comment.name }}</p>   

    <p>

     {{ comment.context }}

    </p>

   </div>

   <div class="comt-line"></div>

  </div>

 </div>

</template>

<script type="text/javascript">

 import {getCommentData, getTotalCommentCount} from './getData';

 export default {

  props: {

   curPageIndex: {

    type: Number,

    default: 1,

   },

   eachPageSize: {

    type: Number,

    default: 7,

   },

   commentUrl: {

    type: String,

    default: '',

   },

   commentParams: {

    type: Object,

    default: null,

   },

   commentIsSync: {

    type: Boolean,

    default: true,

   },

  },

  data () {

   return {

    totalCommentCount: 0,

    hasComment: false,

    loading: true,   

   }

  },

  computed: {

   commentArr () {

    this.loading = true;

    let res = getCommentData(this.commentUrl, this.commentParams, this.commentIsSync, this.curPageIndex, this.eachPageSize);

    this.loading = false;

    return res;

   },

  },

  created () {

   let cnt = getTotalCommentCount(this.commentUrl, this.commentParams);

   this.totalCommentCount = cnt;

   this.hasComment = cnt > 0;

  }

 }

</script>

這里的 getData.js 將在下面提到,是我們獲取數(shù)據(jù)的位置。

loading: 本意是在跳轉(zhuǎn)頁碼加載評論時,對于當(dāng)前評論加載0.5的透明度的遮罩,然后ajax通過它的回調(diào)函數(shù)來取消遮罩,現(xiàn)在這樣就不能實(shí)現(xiàn)了,只能強(qiáng)行寫下,然而是沒有用的..

hasComment: comment組件第一次加載的時候,我們就去請求獲得總共的數(shù)據(jù)長度,如果沒有數(shù)據(jù),則不顯示comment組件布局內(nèi)容

·curPageIndex·: 通過父組件app傳遞下來,使用的是props

這些數(shù)據(jù),我們都設(shè)置一個默認(rèn)值與類型比較好。

page.vue

<style type="text/css" scoped>

 .page {

  text-align: center;

  margin: 30px;

 }

 .page-btn {

  color: gray;

  background-color: white;

  border: white;

  width: 30px;

  height: 30px;

  margin: 5px;

  font-size: 18px;

  outline: none;

 }

 .page-btn-link {

  cursor: Crosshair;

 }

 .page-btn-active {

  border: 1px solid gray;

  border-radius: 15px;

 }

</style>

<template>

 <div class="page">

  <button v-for="pageIndex of pageArr" track-by='$index' :class="{'page-btn': true, 'page-btn-active': 

   this.curPageIndex === pageIndex, 'page-btn-link': checkNum(pageIndex)}"

   @click="clickPage(pageIndex)" >

    {{ pageIndex }}

  </button>  

 </div>

</template>

<script type="text/javascript">

 import {getTotalPageCount} from './getData';

 export default {

  props: {

   totalPageCount: {

    type: Number,

    default: 0,

   },

   curPageIndex: {

    type: Number,

    default: 1,

   },

   eachPageSize: {

    type: Number,

    default: 7,

   },

   pageAjcn: {

    type: Number,

    default: 4,

   },

   pageUrl: {

    type: String,

    default: '',

   },

   pageParams: {

    type: Object,

    default: null,

   },

   pageIsSync: {

    type: Boolean,

    default: true,

   }      

  },

  data () {

   return {

   }

  },

  computed: {

   pageArr () {

    let st = 1,

     end = this.totalPageCount,

     cur = this.curPageIndex,

     ajcn = this.pageAjcn,

     arr = [],

     left = Math.floor(ajcn / 2),

     right = ajcn - left;

    if (end == 0 || cur == 0) {

     return arr;

    } else {

     console.log(st, end, cur, left, right);

     arr.push(st);

     console.log(st+1, cur-left);

     if (st + 1 < cur - left) {

      arr.push('...');

     }

     for (let i = Math.max(cur - left, st + 1); i <= cur - 1; ++i) {

      arr.push(i);

     }

     if (cur != st) {

      arr.push(cur);

     }

     for (let i = cur + 1; i <= cur + right && i <= end - 1 ; ++i) {

      arr.push(i);

     }

     if (cur + right < end - 1) {

      arr.push('...');

     }

     if (end != cur) {

      arr.push(end);

     }

     return arr;

    } 

   }

  },

  methods: {

   clickPage (curIndex) {

    if (Number.isInteger(curIndex)) {

     this.curPageIndex = curIndex;

    }

   },

   checkNum (curIndex) {

    return Number.isInteger(curIndex);

   }   

  },

  created () {

   this.totalPageCount = getTotalPageCount(this.pageUrl,  this.pageParams, this.pageIsSync, 

    this.eachPageSiz);

  }

 }

</script>

主要是個對于 組件事件的運(yùn)用,=最常見的click事件,以及class與style的綁定,根據(jù) curPageIndex與this.pageIndex來比較,判斷是否擁有這個class,通過computed計算屬性,來獲得 頁碼數(shù)組 因為會根據(jù)當(dāng)前頁 有所變化,created的時候 計算出總頁碼。

最后一個是 目前生成獲取靜態(tài)數(shù)據(jù)的js文件.

// let data = {

//  avatar: '', 頭像

//  name: '', 用戶名

//  context: '', 評論內(nèi)容

// }

let dataArr = [];

function randomStr (len) {

 return Math.random().toString(36).substr(len);

}

function initData () {

 for (var i = 0; i<45 ; ++i) {

  let _avator = "./resources/" + i%7 + ".jpg";

  let _name = randomStr(20);

  let _context = randomStr(2);

  dataArr.push({

   avatar: _avator,

   name: _name,

   context: _context

  });

 }

}

if (!dataArr.length) {

 initData();

}

export function getCommentData (url = '', params = null, isSync = true, curPageIndex = 1, eachPageSize = 7) {

 /* ajax */

 let st = (curPageIndex - 1) * eachPageSize;

 let end = st + eachPageSize;

 return dataArr.slice(st, end);

}

export function getTotalCommentCount(url = '', params = null, isSync = true) {

 /* ajax */

 return dataArr.length;

}

export function getTotalPageCount(url = '', params = null, isSync = true, eachPageSize = 7) {

 /* ajax */

 return Math.floor((dataArr.length + eachPageSize -1 ) / eachPageSize);

}

就這樣了吧。

更多信息請查看網(wǎng)絡(luò)編程
易賢網(wǎng)手機(jī)網(wǎng)站地址:使用vue.js制作分頁組件
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!

2026上岸·考公考編培訓(xùn)報班

  • 報班類型
  • 姓名
  • 手機(jī)號
  • 驗證碼
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機(jī)站點(diǎn) | 投訴建議
工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網(wǎng)安備53010202001879號 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號
云南網(wǎng)警備案專用圖標(biāo)
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報警專用圖標(biāo)
中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
在线观看一区| 国产视频一区二区在线观看| 欧美小视频在线观看| 91久久线看在观草草青青| 欧美电影在线观看完整版| 亚洲激情在线观看视频免费| 国产精品高潮粉嫩av| 久久xxxx| 亚洲激情第一页| 欧美日韩国产在线观看| 亚洲免费人成在线视频观看| 狠狠入ady亚洲精品经典电影| 你懂的国产精品| 亚洲欧美欧美一区二区三区| 国语自产精品视频在线看一大j8| 六月婷婷一区| 亚洲一区二区日本| 伊人久久综合| 国产精品美女午夜av| 欧美a一区二区| 性欧美1819sex性高清| 亚洲人成免费| 国产午夜精品全部视频在线播放| 欧美国产日本在线| 欧美有码视频| 亚洲香蕉成视频在线观看| 一区二区三区中文在线观看| 欧美体内谢she精2性欧美| 久久综合久久综合久久综合| 亚洲一区二区三区涩| 亚洲国产日韩在线一区模特| 国产亚洲人成网站在线观看| 欧美手机在线| 欧美极品一区| 老司机精品导航| 久久精品一区二区三区四区| 亚洲天堂成人在线观看| 99pao成人国产永久免费视频| 一区精品在线| 国内精品久久久久影院薰衣草| 国产精品久久久久秋霞鲁丝| 欧美日韩你懂的| 免费观看久久久4p| 久久综合给合久久狠狠色| 欧美一区二区日韩| 亚洲欧美三级伦理| 亚洲制服av| 亚洲嫩草精品久久| 亚洲特级毛片| 亚洲午夜羞羞片| 亚洲尤物影院| 亚洲欧美日韩另类| 欧美亚洲一区二区在线| 亚洲欧美精品一区| 亚洲欧洲99久久| 欧美一区二区精品| 久久国产色av| 久久午夜国产精品| 美女视频一区免费观看| 蜜桃精品久久久久久久免费影院| 久久精品亚洲乱码伦伦中文| 久久久精品网| 欧美va天堂| 欧美精品激情| 国产精品久久久久久久久免费樱桃 | 国产日产高清欧美一区二区三区| 久久精品亚洲国产奇米99| 久久精品1区| 久久蜜桃精品| 欧美激情精品久久久久久| 欧美日韩一区二区欧美激情 | 欧美日韩一区二区精品| 欧美日韩国产成人在线91| 欧美日韩日本国产亚洲在线| 国产精品啊v在线| 国产欧美日韩亚洲精品| 一区二区在线不卡| 9色porny自拍视频一区二区| 午夜精品亚洲一区二区三区嫩草| 久久久久久婷| 欧美偷拍另类| 狠狠色狠狠色综合日日五| 91久久视频| 午夜视频一区在线观看| 久久久久久久综合色一本| 欧美暴力喷水在线| 欧美一级黄色录像| 美女脱光内衣内裤视频久久影院 | 在线视频免费在线观看一区二区| 亚洲欧美国产高清| 麻豆免费精品视频| 国产精品jizz在线观看美国| 国产日韩成人精品| 亚洲狼人精品一区二区三区| 午夜精品影院在线观看| 久久久国产精品亚洲一区| 欧美人与禽猛交乱配视频| 国产午夜精品久久久久久久| 亚洲精品少妇30p| 久久国内精品自在自线400部| 欧美日本高清视频| 一区二区在线免费观看| 亚洲天堂av图片| 欧美成人国产| 国产专区综合网| 亚洲综合三区| 国产精品国产一区二区| 亚洲另类在线视频| 蜜臀av性久久久久蜜臀aⅴ| 国产精品一级| 亚洲香蕉网站| 欧美日韩久久久久久| 亚洲激情视频在线| 久久久人成影片一区二区三区观看| 欧美亚日韩国产aⅴ精品中极品| 狠狠色狠狠色综合系列| 亚洲欧美日韩久久精品 | 久久蜜桃资源一区二区老牛| 国产精品久久| 亚洲免费高清视频| 欧美精品观看| 亚洲经典一区| 欧美freesex8一10精品| 在线观看亚洲一区| 久久香蕉精品| 在线看视频不卡| 老鸭窝毛片一区二区三区| 在线观看三级视频欧美| 久久久美女艺术照精彩视频福利播放| 国产精品一区二区在线观看不卡| 亚洲午夜视频在线| 国产精品久久久久久久久久久久久 | 免费成人黄色av| 精品1区2区| 久久婷婷一区| 亚洲国产你懂的| 欧美激情一区在线观看| 亚洲人成网站影音先锋播放| 欧美极品在线观看| 亚洲精品中文字| 欧美日韩中文| 亚洲欧美日韩一区二区| 国产欧美日韩综合一区在线观看| 欧美有码在线视频| 激情久久中文字幕| 久久综合亚洲社区| 99精品国产一区二区青青牛奶| 欧美少妇一区| 欧美一区二区精美| 樱花yy私人影院亚洲| 欧美成在线视频| 夜夜嗨av一区二区三区中文字幕| 欧美日韩美女一区二区| 亚洲欧美日韩精品久久| 一区二区三区在线免费观看| 欧美日韩国产综合网| 午夜精品视频一区| 亚洲国产精品成人综合| 欧美色网一区二区| 久久久久99| 一区二区三区视频观看| 国产视频一区在线观看| 欧美黄色网络| 亚洲国产成人精品女人久久久| 欧美日本在线| 久久精品首页| 99国产精品99久久久久久粉嫩| 国产精品视频专区| 欧美刺激性大交免费视频 | 午夜精品国产更新| 91久久精品国产91久久| 国产精品乱码妇女bbbb| 欧美96在线丨欧| 午夜影院日韩| 一区二区三区久久久| 雨宫琴音一区二区在线| 国产老肥熟一区二区三区| 欧美伦理a级免费电影| 久久久av网站| 亚洲欧美日韩精品综合在线观看| 亚洲国产另类 国产精品国产免费| 国产精品一卡| 国产精品扒开腿做爽爽爽视频| 免费亚洲一区二区| 久久国产一区二区三区| 亚洲一区欧美一区| 亚洲精品日韩久久| 在线免费不卡视频| 国产亚洲精品bt天堂精选| 欧美日韩精品免费观看| 欧美 日韩 国产 一区| 久久黄金**| 欧美一区二区三区视频在线| 一本久道久久综合狠狠爱| 亚洲精品国产精品国产自| 精品成人在线| 国精产品99永久一区一区| 国产伦精品一区二区三区在线观看 | 国产综合网站| 国产精品一区二区男女羞羞无遮挡 |