国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁(yè) > news >正文

wordpress建立網(wǎng)站寧波網(wǎng)站seo診斷工具

wordpress建立網(wǎng)站,寧波網(wǎng)站seo診斷工具,漳州公司做網(wǎng)站,外貿(mào)網(wǎng)站怎么做推廣案例效果 點(diǎn)擊“首頁(yè)”和“我的”可以切換頁(yè)面首頁(yè)可以下拉刷新,請(qǐng)求更多數(shù)據(jù)首頁(yè)下滑可以加載更多 1.創(chuàng)建并梳理項(xiàng)目結(jié)構(gòu) 創(chuàng)建項(xiàng)目,記得要安裝路由 和 eslint 梳理結(jié)構(gòu),清空 views和components文件夾 2. 安裝和配置Vant組件庫(kù) Vant&#…

案例效果

在這里插入圖片描述

  1. 點(diǎn)擊“首頁(yè)”和“我的”可以切換頁(yè)面
  2. 首頁(yè)可以下拉刷新,請(qǐng)求更多數(shù)據(jù)
  3. 首頁(yè)下滑可以加載更多

1.創(chuàng)建并梳理項(xiàng)目結(jié)構(gòu)

  1. 創(chuàng)建項(xiàng)目,記得要安裝路由 和 eslint
    在這里插入圖片描述
  2. 梳理結(jié)構(gòu),清空 views和components文件夾

在這里插入圖片描述

2. 安裝和配置Vant組件庫(kù)

Vant:輕量、可靠的移動(dòng)端組件庫(kù)

Vant官網(wǎng)

1. 安裝
# Vue2 項(xiàng)目,安裝 Vant 2:
npm i vant -S
2. 導(dǎo)入組件

Vant 支持一次性導(dǎo)入所有組件,引入所有組件會(huì)增加代碼包體積,因此不推薦這種做法。

但是在開發(fā)階段,我們不用考慮體積的問(wèn)題,怎么快怎么來(lái)。在發(fā)布的時(shí)候,可以對(duì)項(xiàng)目體積進(jìn)行優(yōu)化,可以直接把vant從項(xiàng)目中抽出去。

舉例如下:

輸入網(wǎng)址:http://toutiao.liulongbin.top/report.html 可以看到黑馬頭條項(xiàng)目(該項(xiàng)目已經(jīng)發(fā)布)打包之后生成的結(jié)果,如下:

在這里插入圖片描述由上圖可以看到沒(méi)有把vant打包進(jìn)來(lái)

在main.js中配置vant組件庫(kù)
import Vue from 'vue'; 
import Vant from 'vant'; 
import 'vant/lib/index.css'; Vue.use(Vant); // use函數(shù)是來(lái)安裝插件的

之后參考官方文檔,根據(jù)需求進(jìn)行使用,看到頁(yè)面效果出現(xiàn)就成功了。

3. 使用 Tabbar 組件并開啟路由模式

<template><div><!-- 路由占位符 --><router-view></router-view><!-- Tabbar 區(qū)域 --><van-tabbar route><van-tabbar-item  icon="home-o" to="/home">首頁(yè)</van-tabbar-item><van-tabbar-item  icon="user-o" to="/user">我的</van-tabbar-item></van-tabbar></div>
</template>

4. 通過(guò)路由展示對(duì)應(yīng)的 Tabbar 頁(yè)面

在router/index.js 中配置路由規(guī)則:

在這里插入圖片描述

5. 初始化 - 使用Navbar組件以及覆蓋默認(rèn)樣式

<template><div class="home-container"><!-- 頭部區(qū)域 --><van-nav-bar title="黑馬頭條" fixed /></div>
</template>
<script>
export default {name: 'Home'
}
</script>
<style lang="less" scoped>.home-container {padding-top:46px;padding-bottom: 50px;.van-nav-bar {background-color: #007bff;}/deep/.van-nav-bar__title {color:#fff;}}
</style>
至此,接下來(lái)就是完善主頁(yè)的文章列表

6. 了解獲取列表數(shù)據(jù)的API接口

請(qǐng)求方式
  • GET
請(qǐng)求根路徑
  • https://www.escook.cn
請(qǐng)求URL 地址
  • /articles
查詢參數(shù)–通過(guò)&進(jìn)行拼接
參數(shù)名數(shù)據(jù)類型說(shuō)明
_pageNumber頁(yè)碼值。從 1 開始
_limitNumber每頁(yè)展示的數(shù)據(jù)條數(shù)。
響應(yīng)的數(shù)據(jù)結(jié)構(gòu)
[{"art_id": "8163","title": "iOS原生混合RN開發(fā)最佳實(shí)踐","aut_id": "1111","comm_count": "254","pubdate": "2019-03-11 09:00:00","aut_name": "黑馬先鋒","is_top": 0,"cover": {"type": 3,"images": ["http://www.liulongbin.top:8000/resources/images/32.jpg","http://www.liulongbin.top:8000/resources/images/80.jpg","http://www.liulongbin.top:8000/resources/images/32.jpg"]}},{"art_id": "8089","title": "Typescript玩轉(zhuǎn)設(shè)計(jì)模式 之 創(chuàng)建型模式","aut_id": "1111","comm_count": "24","pubdate": "2019-03-11 09:00:00","aut_name": "黑馬先鋒","is_top": 0,"cover": {"type": 1,"images": ["http://www.liulongbin.top:8000/resources/images/11.jpg"]}},{"art_id": "8145","title": "JAVA消息確認(rèn)機(jī)制之ACK模式","aut_id": "1111","comm_count": "99","pubdate": "2019-03-11 09:00:00","aut_name": "黑馬先鋒","is_top": 0,"cover": {"type": 0}}
]
返回參數(shù)說(shuō)明
參數(shù)名類型說(shuō)明
art_idstring文章 id
titlestring文章標(biāo)題
aut_idstring作者的 id
comm_countstring評(píng)論數(shù)
pubdatestring發(fā)布日期
aut_namestring作者名字
|- coverobject文章封面
|---- typenumber封面的數(shù)量,可選值:0、1、3
|---- imagesarray文章封面圖片的 URL 數(shù)組

7. 封裝utils目錄下的request模塊

安裝axios
npm i axios -S
封裝axios的原理

在這里插入圖片描述

創(chuàng)建src/utils/request.js
import axios from 'axios'const request = axios.create({// 指定請(qǐng)求的根路徑baseURL: 'https://www.escook.cn'
})export default request

8.在Home組件中封裝initArticleList方法

一進(jìn)入Home組件就要發(fā)請(qǐng)求,來(lái)拿第一頁(yè)數(shù)據(jù),一般來(lái)說(shuō)是在created里面來(lái)調(diào)函數(shù),發(fā)起請(qǐng)求。

但是,我們先不要寫created,先封裝一個(gè)methods來(lái)調(diào)接口拿數(shù)據(jù):


// 導(dǎo)入 request.js
import request from '@/utils/request.js'
export default {name: 'Home',data () {return {// 頁(yè)碼值page: 1,// 每頁(yè)顯示多少條數(shù)據(jù)limit: 10}},methods: {// 封裝獲取文章列表數(shù)據(jù)的方法async initArticleList () {// 發(fā)起 GET請(qǐng)求,獲取文章的列表數(shù)據(jù)const { data: res } = await request.get('/articles', {// 請(qǐng)求參數(shù)params: {_page: this.page,_limit: this.limit}})console.log(res)}},created () {this.initArticleList()}
}

獲取到了數(shù)據(jù):
在這里插入圖片描述

9. 封裝 articleAPI 模塊

現(xiàn)有這樣一個(gè)需求:我希望一進(jìn)入User組件時(shí),也會(huì)發(fā)起axios請(qǐng)求來(lái)獲取圖書列表,但我希望一次只請(qǐng)求5條數(shù)據(jù),即把limit改成5即可

  • 一般方法的話,就是在User.vue中寫和之前Home.vue大體一樣的代碼。
  • 那如果還有一個(gè)頁(yè)面也要調(diào)這個(gè)接口呢?
  • 可以會(huì)發(fā)現(xiàn)代碼冗余,因此要把代碼復(fù)用起來(lái)
思路

在這里插入圖片描述

開始封裝
  1. 創(chuàng)建src/api 文件夾,里面存著所有的api接口,有一個(gè)文件是articleAPI.js文章相關(guān)的API都封裝到這個(gè)模塊中
// 文章相關(guān)的 API 接口,都封裝到這個(gè)模塊中
import request from '@/utils/request.js'
// 向外按需導(dǎo)出一個(gè) API 函數(shù)
export const getArticleListAPI = function (_page, _limit) {return request.get('/articles', {// 請(qǐng)求參數(shù)params: {_page,_limit}})
}
  1. 在Home組件中調(diào)用這個(gè)api接口,User組件同理
// 按需導(dǎo)入 API 接口
import { getArticleListAPI } from '@/api/articleAPI.js'export default {name: 'Home',data () {return {// 頁(yè)碼值page: 1,// 每頁(yè)顯示多少條數(shù)據(jù)limit: 10}},methods: {async initArticleList () {const { data: res } = await getArticleListAPI(this.page, this.limit)console.log(res)}},created () {this.initArticleList()}
}
總結(jié):

今后,如果需要調(diào)接口來(lái)獲取用戶相關(guān)的信息,則在src/api文件夾下新建一個(gè)模塊專門來(lái)定義用戶的api如userAPI.js

在這里插入圖片描述

10. 封裝 ArticleInfo 組件

ArticleInfo組件是可復(fù)用的組件,放在components文件夾中

請(qǐng)求回來(lái)的數(shù)據(jù)轉(zhuǎn)存到了data()里面,供我們渲染頁(yè)面時(shí)去使用在這里插入圖片描述
渲染頁(yè)面
<!-- 導(dǎo)入,注冊(cè),并使用 ArticleInfo 組件 --><ArticleInfo v-for="item in artlist" :key="item.id"></ArticleInfo>
為ArticleInfo 組件封裝 props 屬性
  1. 使用 ArticleInfo 組件
<!-- 導(dǎo)入,注冊(cè),并使用 ArticleInfo 組件 --><!-- 在使用自組件的時(shí)候,如果某個(gè)屬性名是“小駝峰”形式,則綁定屬性的時(shí)候建議改寫成"連字符"格式 --><!-- 如 cmtCount 建議寫成 cmt-count --><ArticleInfo v-for="item in artlist" :key="item.id" :title="item.title" :author="item.aut_name":cmt-count="item.comm_count" :time="item.pubdate"></ArticleInfo>
  1. ArticleInfo.vue 中:
export default {name: 'ArticleInfo',// 自定義屬性props: {// 標(biāo)題title: {type: String,default: null},// 作者名字author: {type: String,default: null},// 評(píng)論數(shù)cmtCount: {// 通過(guò)數(shù)組形式, 為當(dāng)前屬性定義多個(gè)可能的類型type: [Number, String],default: 0},time: {type: String,default: null}}
}
為ArticleInfo 組件封裝 cover 屬性
        <!-- 單張圖片 --><img :src="cover.images[0]" alt="" class="thumb" v-if="cover.type === 1"></div><!-- 三張圖片 --><div class="thumb-box" v-if="cover.type === 3" ><img :src="item" alt="" class="thumb"v-for="(item,i) in cover.images" :key="i"></div>
 // 封面的信息對(duì)象cover: {type: Object,// 通過(guò)default函數(shù)返回cover屬性的默認(rèn)值default: function () {return { type: 0 }}}

11. 實(shí)現(xiàn)上拉加載更多

需要用到 Vant 提供的組件 — List

List 組件通過(guò) loading 和 finished 兩個(gè)變量控制加載狀態(tài),當(dāng)組件滾動(dòng)到底部時(shí),會(huì)觸發(fā) load 事件并將 loading 設(shè)置成 true。此時(shí)可以發(fā)起異步操作并更新數(shù)據(jù),數(shù)據(jù)更新完畢后,將 loading 設(shè)置成 false 即可。若數(shù)據(jù)已全部加載完畢,則直接將 finished 設(shè)置成 true 即可。

export default {name: 'Home',components: {ArticleInfo},data () {return {// 頁(yè)碼值page: 1,// 每頁(yè)顯示多少條數(shù)據(jù)limit: 10,// 文章列表數(shù)組artlist: [],// 是否正在下一頁(yè)數(shù)據(jù),如果loading為true,則不會(huì)反復(fù)觸發(fā)onload事件// 每當(dāng)下一頁(yè)數(shù)據(jù)請(qǐng)求回來(lái)之后,千萬(wàn)要記得 ,把loading 從 true 改為 falseloading: true,// 所有數(shù)據(jù)是否加載完畢,如果沒(méi)有更多數(shù)據(jù)了,要把finished改成truefinished: false}},methods: {async initArticleList () {// 返回值 res 就是一個(gè)數(shù)組const { data: res } = await getArticleListAPI(this.page, this.limit)// 如果是上拉加載更多,那么應(yīng)該是:// this.artlist=[舊數(shù)據(jù)在前,新數(shù)據(jù)在后]this.artlist = [...this.artlist, ...res]// 當(dāng)?shù)谝豁?yè)數(shù)據(jù)請(qǐng)求回來(lái)之后把 loading 改為 falsethis.loading = falseif (res.length === 0) {// 證明沒(méi)有下一頁(yè)數(shù)據(jù)了,直接把 finished 改為true,表示數(shù)據(jù)加載完了!this.finished = true}},// 只要onload 被調(diào)用,就應(yīng)該請(qǐng)求下一頁(yè)數(shù)據(jù)onLoad () {// 1.讓頁(yè)碼值 +1this.page++// 2. 重新請(qǐng)求接口獲取數(shù)據(jù)this.initArticleList()}},created () {this.initArticleList()}
}

12. 實(shí)現(xiàn)下拉刷新功能

下拉刷新時(shí)會(huì)觸發(fā) refresh 事件,在事件的回調(diào)函數(shù)中可以進(jìn)行同步或異步操作,操作完成后將 v-model 設(shè)置為 false,表示加載完成。

export default {name: 'Home',components: {ArticleInfo},data () {return {// 頁(yè)碼值page: 1,// 每頁(yè)顯示多少條數(shù)據(jù)limit: 10,// 文章列表數(shù)組artlist: [],// 是否正在下一頁(yè)數(shù)據(jù),如果loading為true,則不會(huì)反復(fù)觸發(fā)load事件// 每當(dāng)下一頁(yè)數(shù)據(jù)請(qǐng)求回來(lái)之后,千萬(wàn)要記得 ,把loading 從 true 改為 falseloading: true,// 所有數(shù)據(jù)是否加載完畢,如果沒(méi)有更多數(shù)據(jù)了,要把finished改成truefinished: false,// 是否正在下拉刷新isLoading: false}},created () {this.initArticleList()},methods: {async initArticleList (isRefresh) {// 返回值 res 就是一個(gè)數(shù)組const { data: res } = await getArticleListAPI(this.page, this.limit)if (isRefresh) {// 下拉刷新: 新數(shù)據(jù)在前,新數(shù)據(jù)在后this.artlist = [...res, ...this.artlist]this.isLoading = false// 當(dāng)} else {// 上拉加載更多:舊數(shù)據(jù)在前,新數(shù)據(jù)在后this.artlist = [...this.artlist, ...res]// 當(dāng)?shù)谝豁?yè)數(shù)據(jù)請(qǐng)求回來(lái)之后把 loading 改為 falsethis.loading = false}if (res.length === 0) {// 證明沒(méi)有下一頁(yè)數(shù)據(jù)了,直接把 finished 改為true,表示數(shù)據(jù)加載完了!this.finished = true}},// 只要onload 被調(diào)用,就應(yīng)該請(qǐng)求下一頁(yè)數(shù)據(jù)onLoad () {// 1.讓頁(yè)碼值 +1this.page++// 2. 重新請(qǐng)求接口獲取數(shù)據(jù)this.initArticleList()},// 下拉刷新的處理函數(shù)onRefresh () {// 1. 要頁(yè)碼值 +1this.page++// 2. 重新請(qǐng)求接口,獲取數(shù)據(jù)this.initArticleList(true)}}
}

13. 定制主題

Vant定制主題的核心原理

該項(xiàng)目的標(biāo)題“黑馬頭條" 默認(rèn)是白色背景,我們是通過(guò) /deep/ 深度選擇器再結(jié)合審查元素找到了類名進(jìn)行覆蓋

這個(gè)方法有一個(gè)缺點(diǎn):如果另一個(gè)頁(yè)面,如用戶頁(yè)面,也有這個(gè)標(biāo)題,那么需要重復(fù)這種方法,不然樣式仍然是默認(rèn)的。

因此我們使用 定制主題 這個(gè)方法

  1. 引入樣式源文件,在main.js 中進(jìn)行如下修改:

在這里插入圖片描述

  1. 如果 vue-cli 搭建的項(xiàng)目,可以在 vue.config.js 中進(jìn)行配置:
// 這個(gè)文件是 vue-cli 創(chuàng)建出來(lái)的 項(xiàng)目的 配置文件
// 在 vue.config.js 這個(gè)配置文件中,可以對(duì)整個(gè)項(xiàng)目的打包、構(gòu)建進(jìn)行全局性的配置
// webpack 在進(jìn)行打包的時(shí)候,底層用到的是 node.js
// 因此,在 vue.config.js 配置文件中,可以導(dǎo)入并使用 node.js 中的核心模塊
const path = require('path')
const themePath = path.join(__dirname, './src/theme.less')
module.exports = {css: {loaderOptions: {less: {// 若 less-loader 版本小于 6.0,請(qǐng)移除 lessOptions 這一級(jí),直接配置選項(xiàng)。modifyVars: {// 可以通過(guò) less 文件覆蓋(文件路徑為絕對(duì)路徑)// 從 盤符 開始的路徑叫做絕對(duì)路徑hack: `true; @import "${themePath}";`}}}}
}

在這里插入圖片描述
4.上面的配置文件中的less變量在Vant 官網(wǎng)看:

在這里插入圖片描述

14. 打包

下面介紹打包完成后能雙擊 dist/index.html 來(lái)打開項(xiàng)目,需要配置 vue.config.js:
在這里插入圖片描述

然后在終端運(yùn)行:

npm run build
http://m.aloenet.com.cn/news/35847.html

相關(guān)文章:

  • 小程序定制開發(fā)網(wǎng)站百度網(wǎng)址是什么
  • 網(wǎng)站壓縮山西網(wǎng)絡(luò)營(yíng)銷seo
  • 做提升自己的網(wǎng)站汕頭自動(dòng)seo
  • 織夢(mèng)網(wǎng)站模板怎么做搜索引擎seo外包
  • 網(wǎng)站會(huì)員模板網(wǎng)站關(guān)鍵詞推廣價(jià)格
  • vultr 做網(wǎng)站搜索引擎優(yōu)化的完整過(guò)程
  • vs2012手機(jī)網(wǎng)站開發(fā)教程常用的五種網(wǎng)絡(luò)營(yíng)銷工具
  • 工藝禮品東莞網(wǎng)站建設(shè)seoul national university
  • asp網(wǎng)站制作實(shí)例教程目前網(wǎng)絡(luò)推廣平臺(tái)
  • 天寧寺網(wǎng)站建設(shè)seo學(xué)校培訓(xùn)
  • 站長(zhǎng)工具綜合查詢ip怎樣在百度上發(fā)布作品
  • 怎么做提取微信62的網(wǎng)站網(wǎng)頁(yè)制作流程
  • 網(wǎng)站的內(nèi)連接如何做沈陽(yáng)優(yōu)化網(wǎng)站公司
  • 怎么通過(guò)域名做網(wǎng)站年度關(guān)鍵詞有哪些
  • 在那個(gè)網(wǎng)站做義工好河南網(wǎng)站建設(shè)定制
  • 江蘇專業(yè)的網(wǎng)站建設(shè)一點(diǎn)優(yōu)化
  • 定制網(wǎng)站開發(fā)報(bào)價(jià)單百度優(yōu)化怎么做
  • 龍華網(wǎng)站建設(shè)推廣平臺(tái)百度新聞發(fā)布
  • dw網(wǎng)站怎么做跳轉(zhuǎn)網(wǎng)站seo設(shè)計(jì)
  • 微信上建微網(wǎng)站要錢嗎深圳seo優(yōu)化服務(wù)
  • 會(huì)展設(shè)計(jì)專業(yè)學(xué)什么百度seo整站優(yōu)化
  • 重慶網(wǎng)領(lǐng)網(wǎng)站建設(shè)公司百度快照客服人工電話
  • 內(nèi)容導(dǎo)購(gòu)網(wǎng)站模板網(wǎng)頁(yè)設(shè)計(jì)個(gè)人主頁(yè)模板
  • 網(wǎng)站建設(shè)策劃實(shí)訓(xùn)總結(jié)谷歌優(yōu)化推廣
  • 專業(yè)網(wǎng)站建設(shè)哪里好葫島百度seo
  • 企業(yè)網(wǎng)站 留言板站長(zhǎng)之家seo查找
  • 織夢(mèng)網(wǎng)站如何做seo班級(jí)優(yōu)化大師免費(fèi)下載
  • 廣州網(wǎng)站建設(shè)廣州網(wǎng)絡(luò)推廣公司如何建立一個(gè)網(wǎng)站
  • ftp網(wǎng)站劫持微博推廣怎么做
  • 網(wǎng)站建設(shè)違約怎么優(yōu)化網(wǎng)站排名才能起來(lái)