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中substr,substring,slice.splice的区别说明
Nov 25 Javascript
javascript闭包的高级使用方法实例
Jul 04 Javascript
使用JS CSS去除IE链接虚线框的三种方法
Nov 14 Javascript
JavaScript实现单击下拉框选择直接跳转页面的方法
Jul 02 Javascript
浏览器中url存储的JavaScript实现
Jul 07 Javascript
jQuery简单注册和禁用全局事件的方法
Jul 25 Javascript
JS常用算法实现代码
Nov 14 Javascript
React Native中TabBarIOS的简单使用方法示例
Oct 13 Javascript
JavaScript设计模式之代理模式实例分析
Jan 16 Javascript
layer页面跳转,获取html子节点元素的值方法
Sep 27 Javascript
基于JavaScript或jQuery实现网站夜间/高亮模式
May 30 jQuery
vue-openlayers实现地图坐标弹框效果
Sep 24 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自动注册登录验证机制实现代码
2011/12/20 PHP
thinkPHP实现将excel导入到数据库中的方法
2016/04/22 PHP
PHP使用finfo_file()函数检测上传图片类型的实现方法
2017/04/18 PHP
详解php框架Yaf路由重写
2017/06/20 PHP
PHP利用递归函数实现无限级分类的方法
2019/03/22 PHP
Javascript 学习笔记 错误处理
2009/07/30 Javascript
js apply/call/caller/callee/bind使用方法与区别分析
2009/10/28 Javascript
Javascript的匿名函数小结
2009/12/31 Javascript
javascript 模拟点击广告
2010/01/02 Javascript
jQuery调用WebService的实现代码
2011/06/19 Javascript
网页防止tab键的使用快速解决方法
2013/11/07 Javascript
Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结
2013/11/14 Javascript
js判断是否为ie的方法小结
2014/01/13 Javascript
jQuery调取jSon数据并展示的方法
2015/01/29 Javascript
jQuery实现宽屏图片轮播实例教程
2015/11/24 Javascript
基于JavaScript实现动态创建表格和增加表格行数
2015/12/20 Javascript
让DIV的滚动条自动滚动到最底部的3种方法(推荐)
2016/09/24 Javascript
微信开发 JS-SDK 6.0.2 经常遇到问题总结
2016/12/08 Javascript
微信小程序 基础组件与导航组件详细介绍
2017/02/21 Javascript
AngularJs定时器$interval 和 $timeout详解
2017/05/25 Javascript
Vuejs 2.0 子组件访问/调用父组件的方法(示例代码)
2018/02/08 Javascript
Angular使用动态加载组件方法实现Dialog的示例
2018/05/11 Javascript
layer.confirm取消按钮绑定事件的方法
2018/08/17 Javascript
typescript nodejs 依赖注入实现方法代码详解
2019/07/21 NodeJs
js实现星星海特效的示例
2020/09/28 Javascript
基于vue-simple-uploader封装文件分片上传、秒传及断点续传的全局上传插件功能
2021/02/23 Vue.js
Python3的socket使用方法详解
2020/02/18 Python
红色康乃馨酒店:Red Carnation Hotels
2017/06/22 全球购物
德国亚洲食品网上商店:asiafoodland.de
2019/12/28 全球购物
业务员岗位职责范本
2013/12/15 职场文书
《小池塘》教学反思
2014/02/28 职场文书
审计专业自荐信范文
2014/04/21 职场文书
党员承诺书范文
2014/05/19 职场文书
工厂见习报告范文
2014/10/31 职场文书
中班上学期个人总结
2015/02/12 职场文书
超市采购员岗位职责
2015/04/07 职场文书