This article mainly introduces the detailed explanation of Vue header component development. Now I will share it with you and give you a reference.
1. Data transfer in header component development
1. App.vue introduces components
import header from './components/header/header'
2. Registers components in App.vue
export default { components:{ v-header:header } }
3. Use components
<v-header :sell="sellerObj"></v-header>
Explanation: :sell="sellerObj", here it is treated as a formal parameter just like a function passing parameters, sellerObj is the actual parameter, then the parent component actual parameter How is it passed to the child component, and through what method
4. Parent component passes data to the child component
In the parent component, sellerObj needs to be exported as data, and the child component receives it from the parent component through props Obtain data from and specify the data type
export default { props:{ // 子组件获取 父组件 数据 sell:{ type:Object // 传递的类型 } } }
Summary:
The child component creates a property in props to receive the value passed by the parent component
Register the subcomponent in the parent component
Add the properties created in the subcomponent props to the subcomponent tag
Assign the value that needs to be passed to the subcomponent to the attribute
5. Call data
<p class="logo"> <img :src="sell.avatar" alt="" width='64' height='64'/> </p> <span class="name">{{sell.name}}</span> <p class="description"> {{sell.description + '/' + sell.deliveryTime + '分钟送达'}} </p>
Details:
support binding Add v-if ='sell.supports'
Reason for data: Before we get the data through axios, we create an empty object sellerObj in the parent component and pass it to the child component first. If no data is sent at first, An underfined error will be reported, and v-if is added. If the data cannot be received, it will not be parsed, and no error will be reported.
2. Header component pop-up layer (details)
1. Pop-up mask layer
(1) Set one Status, determine the status to control the display and hiding
data (){ return { detailShow:false } }
<p v-if="detailShow" class="detail"></p>
(2) Bind the click event, change the status through the methods method, and control the visible and hidden effect
<p class="bulletin-wrapper" @click="showDetails()" ></p> <p class="detail-close" v-if="sell.supports"> <i class="icon-close" @click="hideDetail()"></i> </p>
methods:{ showDetails () { this.detailShow=true }, hideDetail () { this.detailShow=false } }
2. Star rating
(1) Bind class to control the type of star size
// 利用 computed 属性 <p class="star" :class="starSizeType"></p>
computed: { starSizeType() { // 返回 星级的大小类型 48/36/24 return 'star-' + this.size; } }
(2) Traverse the number of stars
Copy code The code is as follows:
(3) Define constants to control the status of each star
// 类名用变量存起来 const LENGTH = 5 // 星星长度 const CLS_ON = 'on' // 全星 const CLS_HALF = 'half' // 半星 const CLS_OFF = 'off'// 空星
(4) Determine the type of each span through calculation
itemClasses () { // 返回一个数组为每个span 的类名 (遍历) let spanClassList=[]; // 利用 实参评分来判断 有几颗全星,半星,空星 let scores=( Math.floor(this.score * 2) ) / 2 let intNum= Math.floor(scores); // 全星个数 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){// 判断 是否有空星 及个数 spanClassList.push(CLS_OFF) } return spanClassList; } }
(5) By dynamically binding class Add a class name to span
<p class="star" :class="starSizeType"> <span v-for="itemClass in itemClasses" :class="itemClass" class="star-item" track-by="$index"></span> </p>
The above is what I compiled for everyone. I hope it will be helpful to everyone in the future.
Related articles:
Using vue to implement secondary route setting method
Use mint-ui to achieve the three-level linkage effect of provinces and municipalities
The above is the detailed content of How to develop through the header component in Vue (detailed tutorial). For more information, please follow other related articles on the PHP Chinese website!