Vue header组件开发详解


Posted in Javascript onJanuary 26, 2018

一、 header 组件开发 之数据的传递

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",这里就像一个函数传参一样把sell当成形参,sellerObj就是实参,那么父组件实参是怎么传给子组件的,通过什么传

4. 父组件向子组件传递数据

在父组件中需要将sellerObj作为数据导出,子组件通过props从父组件中获得数据,且要指定数据类型

export default {
 props:{ // 子组件获取 父组件 数据
 sell:{
  type:Object // 传递的类型 
 }
 }
 }

小结:

  1. 子组件在props中创建一个属性,用以接收父组件传过来的值
  2. 父组件中注册子组件
  3. 在子组件标签中添加子组件props中创建的属性
  4. 把需要传给子组件的值赋给该属性

5. 调用数据

<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 + '分钟送达'}}
</div>

细节问题:

support 绑定数据时 加 v-if ='sell.supports'

理由 : 在我们通过axios获取数据前在父组件中创建了一个空的对象sellerObj 先传给子组件,开始 没有数据传送过去就会报错 underfined,加上 v-if ,接受不到数据就不会解析,也就不会报错。

二、 header 组件弹出层(详情)

1.弹出遮罩层

(1) 设置一个状态,判断该状态控制显示隐藏

data (){
 return {
 detailShow:false
 }
}
<div v-if="detailShow" class="detail"></div>

(2) 绑定点击事件,通过methods 方法改变 状态,控制显隐效果

<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) 遍历星星的数量

<span v-for="itemClass in itemClasses" :class="itemClass" class="star-item" track-by="$index"></span>

(3) 定义常量 控制 每个星的状态

// 类名用变量存起来
const LENGTH = 5 // 星星长度
const CLS_ON = 'on' // 全星
const CLS_HALF = 'half' // 半星
const CLS_OFF = 'off'// 空星

(4) 通过计算 判断每个span 的类型

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) 通过 动态绑定class 来 给span 加类名

<div class="star" :class="starSizeType">
 <span v-for="itemClass in itemClasses" :class="itemClass" class="star-item" track-by="$index"></span>
</div>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
用jscript实现列出安装的软件列表
Jun 18 Javascript
解决jquery的.animate()函数在IE6下的问题
Dec 03 Javascript
Javascript获取HTML静态页面参数传递值示例
Aug 18 Javascript
JS将秒换成时分秒实现代码
Sep 03 Javascript
jquery实现的图片点击滚动效果
Apr 29 Javascript
jQuery实现鼠标经过时出现隐藏层文字链接的方法
Oct 12 Javascript
JavaScript 链式结构序列化详解
Sep 30 Javascript
Node.js的Mongodb使用实例
Dec 30 Javascript
Jquery把获取到的input值转换成json
May 15 jQuery
vue.js实现带日期星期的数字时钟功能示例
Aug 28 Javascript
详解vue+axios给开发环境和生产环境配置不同的接口地址
Aug 16 Javascript
js实现石头剪刀布游戏
Oct 11 Javascript
Vue shopCart 组件开发详解
Jan 26 #Javascript
jquery写出PC端轮播图实例
Jan 26 #jQuery
深入理解vue中slot与slot-scope的具体使用
Jan 26 #Javascript
从零开始最小实现react服务器渲染详解
Jan 26 #Javascript
微信小程序模版渲染详解
Jan 26 #Javascript
微信小程序如何获取用户信息
Jan 26 #Javascript
vue实现前进刷新后退不刷新效果
Jan 26 #Javascript
You might like
教你如何解密 “ PHP 神盾解密工具 ”
2014/06/20 PHP
函数中使用require_once问题深入探讨 优雅的配置文件定义方法推荐
2014/07/02 PHP
PHP大文件分割上传 PHP分片上传
2017/08/28 PHP
实现JavaScript中继承的三种方式
2009/10/16 Javascript
Javascript Web Slider 焦点图示例源码
2013/10/10 Javascript
验证控件与Button的OnClientClick事件详细解析
2013/12/04 Javascript
微信小程序 Flex布局详解
2016/10/09 Javascript
js html实现计算器功能
2018/11/13 Javascript
微信小程序与后台PHP交互的方法实例分析
2018/12/10 Javascript
谈谈IntersectionObserver懒加载的具体使用
2019/10/15 Javascript
Javascript call及apply应用场景及实例
2020/08/26 Javascript
通过JS判断网页是否为手机打开
2020/10/28 Javascript
Vue中强制组件重新渲染的正确方法
2021/01/03 Vue.js
[02:51]2014DOTA2 TI小组赛总结中国军团全部进军钥匙球馆
2014/07/15 DOTA
[32:56]完美世界DOTA2联赛PWL S3 Rebirth vs CPG 第二场 12.11
2020/12/16 DOTA
tornado框架blog模块分析与使用
2013/11/21 Python
Python找出最小的K个数实例代码
2018/01/04 Python
通过python顺序修改文件名字的方法
2018/07/11 Python
在python中使用nohup命令说明
2020/04/16 Python
Pytorch 卷积中的 Input Shape用法
2020/06/29 Python
Python数据可视化实现漏斗图过程图解
2020/07/20 Python
纯CSS3制作页面切换效果的实例代码
2019/05/30 HTML / CSS
Ralph Lauren法国官网:美国高品味时装品牌
2017/12/08 全球购物
来自世界各地的优质葡萄酒:VineShop24
2018/07/09 全球购物
乌克兰在线电子产品商店:MTA
2019/11/14 全球购物
英国森林假期:Forest Holidays
2021/01/01 全球购物
C#实现启动一个进程
2016/10/01 面试题
如何现实servlet的单线程模式
2014/08/05 面试题
办理退休介绍信
2014/01/09 职场文书
毕业生就业推荐表自我鉴定
2014/03/20 职场文书
邹越感恩父母演讲稿
2014/08/28 职场文书
贵阳市党的群众路线教育实践活动党(工)委领导班子整改方案
2014/10/26 职场文书
2015年秋季新学期寄语
2015/03/25 职场文书
《富饶的西沙群岛》教学反思
2016/02/16 职场文书
解析Redis Cluster原理
2021/06/21 Redis
Canvas如何做个雪花屏版404的实现
2021/09/25 HTML / CSS