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 相关文章推荐
node.js正则表达式获取网页中所有链接的代码实例
Jun 03 Javascript
jquery 页眉单行信息滚动显示实现思路及代码
Jun 26 Javascript
JavaScript、tab切换完整版(自动切换、鼠标移入停止、移开运行)
Jan 05 Javascript
jQuery 3.0十大新特性最终版发布
Jul 14 Javascript
详解Javascript数据类型的转换规则
Dec 12 Javascript
vue与vue-i18n结合实现后台数据的多语言切换方法
Mar 08 Javascript
vue组件详解之使用slot分发内容
Apr 09 Javascript
Angular6封装http请求的步骤详解
Aug 13 Javascript
小程序实现选择题选择效果
Nov 04 Javascript
浅谈Vue 性能优化之深挖数组
Dec 11 Javascript
js实现简单掷骰子小游戏
Oct 24 Javascript
Vue根据条件添加click事件的方式
Nov 09 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 preg_match_all结合str_replace替换内容中所有img
2008/10/11 PHP
php AJAX实例根据邮编自动完成地址信息
2008/11/23 PHP
Codeigniter操作数据库表的优化写法总结
2014/06/12 PHP
php采用ajax数据提交post与post常见方法总结
2014/11/10 PHP
WordPress后台中实现图片上传功能的实例讲解
2016/01/11 PHP
通过PHP设置BugFree获取邮箱通知
2019/04/25 PHP
javascript setTimeout和setInterval计时的区别详解
2013/06/21 Javascript
js获取本机的外网/广域网ip地址完整源码
2013/08/12 Javascript
JavaScript中window、doucment、body的解释
2013/08/14 Javascript
对js关键字命名的疑问介绍
2014/04/25 Javascript
js获取url传值的方法
2015/12/18 Javascript
jquery实现倒计时功能
2015/12/28 Javascript
KnockoutJs快速入门教程
2016/05/16 Javascript
JSON与String互转的实现方法(Javascript)
2016/09/27 Javascript
javaScript中定义类或对象的五种方式总结
2016/12/04 Javascript
十大热门的JavaScript框架和库
2017/03/21 Javascript
jquery ui 实现 tab标签功能示例【测试可用】
2019/07/25 jQuery
通过vue写一个瀑布流插件代码实例
2019/09/07 Javascript
vue data引入本地图片的两种方式小结
2019/11/13 Javascript
介绍Python中的文档测试模块
2015/04/28 Python
Python多进程库multiprocessing中进程池Pool类的使用详解
2017/11/24 Python
Python实现进程同步和通信的方法
2018/01/02 Python
Python IDE Pycharm中的快捷键列表用法
2019/08/08 Python
np.random.seed() 的使用详解
2020/01/14 Python
python调用私有属性的方法总结
2020/07/24 Python
python如何控制进程或者线程的个数
2020/10/16 Python
HTML5 Canvas阴影使用方法实例演示
2013/08/02 HTML / CSS
马耳他航空公司官方网站:Air Malta
2019/05/15 全球购物
荷兰在线啤酒店:Beerwulf
2019/08/26 全球购物
园林毕业生自我鉴定范文
2013/12/29 职场文书
毕业生自荐书
2014/02/03 职场文书
团委竞选演讲稿
2014/04/24 职场文书
推荐信模板
2014/05/09 职场文书
应聘会计求职信
2014/06/11 职场文书
教师学期个人总结
2015/02/11 职场文书
windows server 2012安装FTP并配置被动模式指定开放端口
2022/06/10 Servers