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 相关文章推荐
给Javascript数组插入一条记录的代码
Aug 30 Javascript
jquery中dom操作和事件的实例学习 仿yahoo邮箱登录框的提示效果
Nov 30 Javascript
做好七件事帮你提升jQuery的性能
Feb 06 Javascript
jquery等待效果示例
May 01 Javascript
jquery实现弹出层效果实例
May 19 Javascript
jQuery实现可以控制图片旋转角度效果(附demo源码下载)
Jan 27 Javascript
剖析Node.js异步编程中的回调与代码设计模式
Feb 16 Javascript
使用jquery的jsonp如何发起跨域请求及其原理详解
Aug 17 jQuery
浅谈Vue.js中ref ($refs)用法举例总结
Dec 19 Javascript
vue 项目地址去掉 #的方法
Oct 20 Javascript
Vuepress 搭建带评论功能的静态博客的实现
Feb 17 Javascript
JavaScript 如何在浏览器中使用摄像头
Dec 02 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
一些有关检查数据的JS代码
2006/09/07 Javascript
javascript 动态table添加colspan\rowspan 参数的方法
2009/07/25 Javascript
node.js中的http.createClient方法使用说明
2014/12/15 Javascript
javascript 兼容各个浏览器的事件
2015/02/04 Javascript
JavaScript中全选、全不选、反选、无刷新删除、批量删除、即点即改入库(在yii框架中操作)的代码分享
2016/11/01 Javascript
DOM 事件的深入浅出(一)
2016/12/05 Javascript
JS实现Ajax的方法分析
2016/12/20 Javascript
百度地图JavascriptApi Marker平滑移动及车头指向行径方向
2017/03/13 Javascript
BootStrap+Mybatis框架下实现表单提交数据重复验证
2017/03/23 Javascript
JavaScript模拟实现封装的三种方式及写法区别
2017/10/27 Javascript
nodejs 日志模块winston的使用方法
2018/05/02 NodeJs
jQuery 实现倒计时天,时,分,秒功能
2018/07/31 jQuery
react中使用css的7中方式(最全总结)
2019/02/11 Javascript
详解用async/await来处理异步
2019/08/28 Javascript
bootstrap实现嵌套模态框的实例代码
2020/01/10 Javascript
Vue 图片压缩并上传至服务器功能
2020/01/15 Javascript
vuex存取值和映射函数使用说明
2020/07/24 Javascript
Python中让MySQL查询结果返回字典类型的方法
2014/08/22 Python
python使用matplotlib绘制柱状图教程
2017/02/08 Python
Keras 数据增强ImageDataGenerator多输入多输出实例
2020/07/03 Python
HTML如何让IMG自动适应DIV容器大小的实现方法
2020/02/25 HTML / CSS
加拿大最大的相机店:Henry’s
2017/05/17 全球购物
美国折衷生活方式品牌:Robert Graham
2018/07/13 全球购物
普通PHP程序员笔试题
2016/01/01 面试题
如何设置Java的运行环境
2013/04/05 面试题
法学专业应届生求职信
2013/10/16 职场文书
浪漫婚礼主持词
2014/03/14 职场文书
入党积极分子学习党的纲领思想汇报
2014/09/13 职场文书
中秋节随笔
2015/08/15 职场文书
企业管理不到位检讨书
2019/06/27 职场文书
导游词之鲁迅祖居
2019/10/17 职场文书
解决python存数据库速度太慢的问题
2021/04/23 Python
vue实现简单数据双向绑定
2021/04/28 Vue.js
Windows 11上手初体验:任务栏和开始菜单等迎来大改
2021/11/21 数码科技
Redis官方可视化工具RedisInsight安装使用教程
2022/04/19 Redis
Spring Boot配合PageHelper优化大表查询数据分页
2022/04/20 Java/Android