Vue header組件開發(fā)詳解
一、 header 組件開發(fā) 之?dāng)?shù)據(jù)的傳遞
1. App.vue 引入組件
import header from './components/header/header'
2. App.vue 中注冊組件
export default {
components:{
v-header:header
}
}
3. 使用組件
<v-header :sell="sellerObj"></v-header>
解釋::sell="sellerObj",這里就像一個函數(shù)傳參一樣把sell當(dāng)成形參,sellerObj就是實(shí)參,那么父組件實(shí)參是怎么傳給子組件的,通過什么傳
4. 父組件向子組件傳遞數(shù)據(jù)
在父組件中需要將sellerObj作為數(shù)據(jù)導(dǎo)出,子組件通過props從父組件中獲得數(shù)據(jù),且要指定數(shù)據(jù)類型
export default {
props:{ // 子組件獲取 父組件 數(shù)據(jù)
sell:{
type:Object // 傳遞的類型
}
}
}
小結(jié):
- 子組件在props中創(chuàng)建一個屬性,用以接收父組件傳過來的值
- 父組件中注冊子組件
- 在子組件標(biāo)簽中添加子組件props中創(chuàng)建的屬性
- 把需要傳給子組件的值賦給該屬性
5. 調(diào)用數(shù)據(jù)
<div class="logo">
<img :src="sell.avatar" alt="" width='64' height='64'/>
</div>
<span class="name">{{sell.name}}</span>
<div class="description">
{{sell.description + '/' + sell.deliveryTime + '分鐘送達(dá)'}}
</div>
細(xì)節(jié)問題:
support 綁定數(shù)據(jù)時 加 v-if ='sell.supports'
理由 : 在我們通過axios獲取數(shù)據(jù)前在父組件中創(chuàng)建了一個空的對象sellerObj 先傳給子組件,開始 沒有數(shù)據(jù)傳送過去就會報錯 underfined,加上 v-if ,接受不到數(shù)據(jù)就不會解析,也就不會報錯。
二、 header 組件彈出層(詳情)
1.彈出遮罩層
(1) 設(shè)置一個狀態(tài),判斷該狀態(tài)控制顯示隱藏
data (){
return {
detailShow:false
}
}
<div v-if="detailShow" class="detail"></div>
(2) 綁定點(diǎn)擊事件,通過methods 方法改變 狀態(tài),控制顯隱效果
<div class="bulletin-wrapper" @click="showDetails()" ></div> <div class="detail-close" v-if="sell.supports"> <i class="icon-close" @click="hideDetail()"></i> </div>
methods:{
showDetails () {
this.detailShow=true
},
hideDetail () {
this.detailShow=false
}
}
2. 星級評分
(1) 綁定class 控制星級大小的類型
// 利用 computed 屬性 <div class="star" :class="starSizeType"></div>
computed: {
starSizeType() { // 返回 星級的大小類型 48/36/24
return 'star-' + this.size;
}
}
(2) 遍歷星星的數(shù)量
<span v-for="itemClass in itemClasses" :class="itemClass" class="star-item" track-by="$index"></span>
(3) 定義常量 控制 每個星的狀態(tài)
// 類名用變量存起來 const LENGTH = 5 // 星星長度 const CLS_ON = 'on' // 全星 const CLS_HALF = 'half' // 半星 const CLS_OFF = 'off'// 空星
(4) 通過計算 判斷每個span 的類型
itemClasses () { // 返回一個數(shù)組為每個span 的類名 (遍歷)
let spanClassList=[];
// 利用 實(shí)參評分來判斷 有幾顆全星,半星,空星
let scores=( Math.floor(this.score * 2) ) / 2
let intNum= Math.floor(scores); // 全星個數(shù)
let HashalfNum= scores % 1 !== 0 // 半星
for(var i=0;i<intNum;i++){ // 遍歷全星的span
spanClassList.push(CLS_ON)
}
if(HashalfNum){ // 如果有半星 加類名
spanClassList.push(CLS_HALF)
}
while(spanClassList.length<LENGTH){// 判斷 是否有空星 及個數(shù)
spanClassList.push(CLS_OFF)
}
return spanClassList;
}
}
(5) 通過 動態(tài)綁定class 來 給span 加類名
<div class="star" :class="starSizeType"> <span v-for="itemClass in itemClasses" :class="itemClass" class="star-item" track-by="$index"></span> </div>
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Vue偵測相關(guān)api的實(shí)現(xiàn)方法
這篇文章主要介紹了Vue偵測相關(guān)api,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05
vue3使用wangeditor封裝和自定義上傳文件官方教程
這篇文章主要為大家介紹了vue3使用wangeditor封裝和自定義上傳文件的官方教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪<BR>2023-06-06
查看vue-cli腳手架的版本號和vue真實(shí)版本號及詳細(xì)操作命令
本文給大家分享如何查看vue-cli腳手架的版本號和vue真實(shí)版本號及詳細(xì)操作過程,本文給大家講解的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧2022-11-11
vue2 el-checkbox-group復(fù)選框無法選中問題及解決
這篇文章主要介紹了vue2 el-checkbox-group復(fù)選框無法選中問題及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-05-05
vue數(shù)據(jù)傳遞--我有特殊的實(shí)現(xiàn)技巧
這篇文章主要介紹了vue數(shù)據(jù)傳遞一些特殊梳理技巧,需要的朋友可以參考下2018-03-03
Vue路由跳轉(zhuǎn)傳參或者打開新頁面跳轉(zhuǎn)問題
這篇文章主要介紹了Vue路由跳轉(zhuǎn)傳參或者打開新頁面跳轉(zhuǎn)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-03-03
使用vue打包時vendor文件過大或者是app.js文件很大的問題
這篇文章主要介紹了使用vue打包時vendor文件過大或者是app.js文件很大問題的解決方法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2018-06-06
Vue3全局掛載使用Axios學(xué)習(xí)實(shí)戰(zhàn)
這篇文章主要為大家介紹了Vue3全局掛載使用Axios學(xué)習(xí)實(shí)戰(zhàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06
Vue中使用video.js實(shí)現(xiàn)截圖和視頻錄制與下載
這篇文章主要為大家詳細(xì)介紹了Vue中如何使用video.js實(shí)現(xiàn)截圖和視頻錄制與下載,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-03-03

