最近看到了一个眼镜在线试戴小项目使用纯js手写的,本人刚学习vue.js没多久,便试试用vue做做看了,还没完善。

其中包括初始图片加载,使用keywords查找,父子组件之间传递信息,子组件之间传递信息

1. 使用keywords查找

1.1 给每个li添加初始data

smallImg: [
  {
    keywords: "椭圆脸",
    src: "images/model_1.jpg",
    addClass: false
  },
  {
    keywords: "圆形脸",
    src: "images/model_2.jpg",
    addClass: false
  },

  ...

]

 1.2 添加方法

  1. // 搜索脸型
  2. addCurrent: function (index){
  3. // li样式添加
  4. this.faceType[index].isTrue=true;
  5. this.faceType[this.oldIndex].isTrue=false;
  6. this.oldIndex=index;
  7.  
  8. // 搜索脸型
  9. var type=this.faceType[index].type;
  10. this.smallImg.forEach(function (val,index){
  11. // 先都不加class
  12. val.addClass=false;
  13. // 若关键字不等于脸型则添加class
  14. if(val.keywords!=type){
  15. val.addClass=true;
  16. }
  17. });
  18. // 点击全部,则所有的都不添加class
  19. if(index==0){
  20. this.smallImg.forEach(function (val,index){
  21. // 先都不加class
  22. val.addClass=false;
  23. });
  24. }
  25. }

2. 子组件向父组件发送数据

  2.1 点击任意眼镜触发showGlass()事件

  1. <script type="text/template" id="galsslist">
  1. <div class="galsslist">
  2. <ul class="clearfix">
  3. <li v-for="(val,index) in glass" @click="showGlass(index)" v-if="val.show">
  4. <img :src="val.src" alt="">
  5. <h4>{{ val.title }}</h4>
  6. <p>{{ val.text }}</p>
  7. </li>
  8. </ul>
  9. </div>
  10. </script>

  2.2 子组件发射togg()事件到父组件,并传递点击的index值

  1. showGlass: function (index){
  2.     this.$emit("togg",index);
  3. },

  2.3 父组件自定义事件

  1. <!-- 自定义事件,子组件向父组件发送数据 -->
  2. <galsslist @togg="showBig"></galsslist>

  2.4 执行showBig()事件,佩戴选择的眼镜

  1. showBig: function (index){
  2. this.bigGlassImg="images/glass_"+(index+1)+".png";
  3. this.showbigGlassImg=true;
  4. }

3. 子组件之间传递信息

3.1 先在index的data中定义  bus: new Vue(),

3.2 点击搜索在子组件触发search事件,发射事件 sear(), 并传递sendMsg信息

  1. // 向另一个组件传递信息
  2. search: function (){
  3. var sendMsg=this.toggArr[0].msg;
  4. this.$root.bus.$emit("sear",sendMsg);
  5. }

 3.3 执行事件sear(),并修改this.searchKey,并触发searchKeywords()事件

  1. // 接收另一组件传递的信息
  2. created: function (){
  3. var self=this;
  4. this.$root.bus.$on("sear",function (val){
  5. self.searchKey=val;
  6. self.searchKeywords();
  7. })
  8. },
  9. beforeDestory: function (){
  10. this.$root.bus.$off("sear");
  11. }

 3.4 显示与之匹配的眼镜

  1. searchKeywords: function (){
  2. this.glass.forEach(function (val,index){
  3. // 先全部显示
  4. val.show=true;
  5. var key=val.title.split("_")[0];
  6. // key不相等,则隐藏
  7. if(key!=this.searchKey){
  8. val.show=false;
  9. }
  10. },this);
  11. // 为全部则全部显示
  12. if(this.searchKey=="全部"){
  13. this.glass.forEach(function (val,index){
  14. // 全部显示
  15. val.show=true;
  16. });
  17. }
  18. }

4. github地址(https://github.com/hsiangleev/proj-eyeglass.git)

vue练手小项目--眼镜在线试戴的更多相关文章

  1. 初始Spring MVC——练手小项目

    初始Spring MVC 前几天开始了我的spring学习之旅,由于之前使用过MVC模式来做项目,所以我先下手的是 Spring MVC,做个练手项目,非常简单 项目介绍: 用户输入信息 -> ...

  2. Spring+Mybatis整合的练手小项目(一)项目部署

    声明:教程是网上找的,代码是自己敲的 项目目录大致如下: 1. 首先创建Maven工程,在pom.xml中加入项目所需依赖: <?xml version="1.0" enco ...

  3. 前端练手小项目——网页版qq音乐仿写

    qq音乐网页版仿写 一些步骤与注意事项 一开始肯定就是html+css布局和页面了,这段特别耗时间,耐心写完就好了 首先要说一下大致流程: 一定要先布局html!,所以一定要先分析页面布局情况,用不同 ...

  4. 一个vue练手的小项目

    编程路上的菜鸟一枚 : 最近接触了vue 然后写了一个练手的项目 使用vue-cli脚手架来搭建了的项目 技术: vue2  + vue-router  + ES6 + axios 框架有 mint- ...

  5. 【Python】【辅助程序】练手小程序:记录外网动态IP地址

    练手小程序 程序作用:对IP实时记录: 1.定时获取外网IP,存储在本地文件中: 编写思路: 1)收集获取外网的API接口       http://bbs.125.la/thread-1383897 ...

  6. 【Python精华】100个Python练手小程序

    100个Python练手小程序,学习python的很好的资料,覆盖了python中的每一部分,可以边学习边练习,更容易掌握python. [程序1] 题目:有1.2.3.4个数字,能组成多少个互不相同 ...

  7. 整理了适合新手的20个Python练手小程序

    100个Python练手小程序,学习python的很好的资料,覆盖了python中的每一部分,可以边学习边练习,更容易掌握python. 本文附带基础视频教程:私信回复[基础]就可以获取的 [程序1] ...

  8. php小项目-web在线文件管理器

    php小项目-web在线文件管理器 一 项目结果相关视图 二 项目经验 通过简单的实现小项目,对php的文件相关操作更加熟悉,主要用于熟悉文件的相关操作 三 源代码下载地址 http://files. ...

  9. 简单的ssm练手联手项目

    简单的ssm练手联手项目 这是一个简单的ssm整合项目 实现了汽车的品牌,价格,车型的添加 ,修改,删除,所有数据从数据库中拿取 使用到了jsp+mysql+Mybatis+spring+spring ...

随机推荐

  1. Eclipse中Maven的配置

    Maven 的配置 1. 安装配置Maven: 1.1 从Apache网站 http://maven.apache.org/ 下载并且解压缩安装Apache Maven 1.2 配置 Maven 的c ...

  2. jQuery菜单示例(全选,反选,取消)

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. 分布式memcached-虚拟节点

    1.通过memcached服务器下的不同端口来达到模拟多台服务器的效果 2.假设现在有三台memcached服务器,本地分别使用11211,11212,11213三个端口来模拟 ①打开端口 ②连接端口 ...

  4. MariaDB体验2----CSV文件导入

    之前已经安装好MariaDB,现在需要将一份从Sql Server数据库里面导出的CSV文件导入进MariaDB,期间碰到了各种坑,这里记录一下. HeidiSQL的导入CSV文件的地方在“工具”栏, ...

  5. java并发之原子性

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp17 1.原子性操作: 不能被线程调度机制中断的操作:--对原子性变量的赋值 ...

  6. C#大量数据导出到Excel(转)

    工作过程中经常会用到将数据导出到Excel中,一般情况下需要导出的数据都是几百几千条或者上万条,这都没有什么问题,但有时候会遇到特殊的需求,客户要求把几十万条甚至上百万条的数据导出到Excel中,这就 ...

  7. React和Vue的组件更新比较

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 24.0px "Helvetica Neue"; color: #404040 } p. ...

  8. 看懂c/c++ 函数、指针、数组定义

    读懂 函数 + 指针 + 数组 c语言运算符机器优先级,看这里 结合运算符优先级,我们试着读懂函数和指针 优先级简单看 表达式提升():一级优先 函数():二级优先 数组[]:二级优先 指针定义*:三 ...

  9. 201521123056 《Java程序设计》第5周学习总结

    1. 本周学习总结 1.1 尝试使用思维导图总结有关多态与接口的知识点. 答: 2. 书面作业 1.代码阅读:Child压缩包内源代码 1.1 com.parent包中Child.java文件能否编译 ...

  10. 201521123054 《Java程序设计》第5周学习总结

    1. 本周学习总结 2. 书面作业 作业参考文件下载 代码阅读:Child压缩包内源代码 1.1 com.parent包中Child.java文件能否编译通过?哪句会出现错误?试改正该错误.并分析输出 ...