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 日期时间函数(经典+完善+实用)
May 27 Javascript
Jquery 动态添加按钮实现代码
May 06 Javascript
jQuery实现鼠标经过图片预览大图效果
Apr 10 Javascript
Node.js 服务器端应用开发框架 -- Hapi.js
Jul 29 Javascript
js获取当前时间显示在页面上并每秒刷新
Dec 24 Javascript
浅谈javascript事件取消和阻止冒泡
May 26 Javascript
jQuery实现手机自定义弹出输入框
Jun 13 Javascript
javascript时间差插件分享
Jul 18 Javascript
JS获取日期的方法实例【昨天,今天,明天,前n天,后n天的日期】
Sep 28 Javascript
使用layui的router来进行传参的实现方法
Sep 06 Javascript
JS实现打字游戏
Dec 17 Javascript
如何优化vue打包文件过大
Apr 13 Vue.js
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写的小东西
2006/12/06 PHP
zend optimizer在wamp的基础上安装图文教程
2013/10/26 PHP
PHP实现数字补零功能的2个函数介绍
2014/05/12 PHP
PHP中数据库单例模式的实现代码分享
2014/08/21 PHP
深入理解JavaScript中的传值与传引用
2013/12/09 Javascript
jquery 获取 outerHtml 包含当前节点本身的代码
2014/10/30 Javascript
ECMAScript6块级作用域及新变量声明(let)
2015/06/12 Javascript
js表单提交和submit提交的区别实例分析
2015/12/10 Javascript
jQuery选择器用法实例详解
2015/12/17 Javascript
Javascript实现基本运算器
2017/07/15 Javascript
es7学习教程之Decorators(修饰器)详解
2017/07/21 Javascript
如何抽象一个Vue公共组件
2017/10/17 Javascript
vue+Java后端进行调试时解决跨域问题的方式
2017/10/19 Javascript
Javascript的console['']常用输入方法汇总
2018/04/26 Javascript
VUE Error: getaddrinfo ENOTFOUND localhost
2018/05/03 Javascript
垃圾回收器的相关知识点总结
2018/05/13 Javascript
详解Vue取消eslint语法限制
2018/08/04 Javascript
layui table 表格模板按钮的实例代码
2019/09/21 Javascript
Vue 防止短时间内连续点击后多次触发请求的操作
2020/11/11 Javascript
[40:05]DOTA2上海特级锦标赛A组小组赛#1 EHOME VS MVP.Phx第一局
2016/02/25 DOTA
python使用wxpython开发简单记事本的方法
2015/05/20 Python
Python检测网站链接是否已存在
2016/04/07 Python
Python 数据处理库 pandas 入门教程基本操作
2018/04/19 Python
python环形单链表的约瑟夫问题详解
2018/09/27 Python
原生python实现knn分类算法
2019/10/24 Python
Python Tornado批量上传图片并显示功能
2020/03/26 Python
Python制作运行进度条的实现效果(代码运行不无聊)
2021/02/24 Python
意大利专业化妆品品牌:KIKO MILANO
2017/02/01 全球购物
Eton丹麦官网:精美的男式衬衫
2020/05/27 全球购物
Linux开机引导的步骤是什么
2014/02/26 面试题
令人啧啧称赞的经理推荐信
2013/11/07 职场文书
工艺工程师工作职责
2013/11/23 职场文书
关于中国梦的演讲稿
2014/04/23 职场文书
年终奖发放方案
2014/06/02 职场文书
小学教师师德师风演讲稿
2014/08/22 职场文书
安全责任书
2015/01/29 职场文书