ad_data = {

tv: [

{img: 'img/tv/001.png', title: 'tv1'},

{img: 'img/tv/002.png', title: 'tv2'},

{img: 'img/tv/003.png', title: 'tv3'},

{img: 'img/tv/004.png', title: 'tv4'},

],

phone: [

{img: 'img/phone/001.png', title: 'phone1'},

{img: 'img/phone/002.png', title: 'phone2'},

{img: 'img/phone/003.png', title: 'phone3'},

{img: 'img/phone/004.png', title: 'phone4'},

]

}

i) 有两个大标题,电视和手机,点击对应的标题,渲染对应的数据

ii) 一个字典作为一个显示单位,定义一个子组件进行渲染(涉及父子组件传参)

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
body,h2 {
margin: 0;
}
.wrap {
width: 880px;
margin: 0 auto;
}
.wrap:after {
content: '';
display: block;
}
.box {
width: 200px;
border-radius: 10px;
overflow: hidden;
background-color: #eee;
float: left;
margin: 10px;
} .box img {
width: 200px;
height: 240px;
}
.box h2 {
text-align: center;
font-weight: normal;
font-size: 20px;
} </style> <body>
<!--2、有以下广告数据(实际数据命名可以略做调整)-->
<!--ad_data = {-->
<!--tv: [-->
<!--{img: 'img/101.jpg', title: 'tv1'},-->
<!--{img: 'img/102.jpg', title: 'tv2'},-->
<!--{img: 'img/103.jpg', title: 'tv3'},-->
<!--{img: 'img/104.jpg', title: 'tv4'},-->
<!--],-->
<!--phone: [-->
<!--{img: 'img/201.jpg', title: 'phone1'},-->
<!--{img: 'img/202.jpg', title: 'phone2'},-->
<!--{img: 'img/203.jpg', title: 'phone3'},-->
<!--{img: 'img/204.jpg', title: 'phone4'},-->
<!--]-->
<!--}--> <!--i) 有两个大标题,电视和手机,点击对应的标题,渲染对应的数据-->
<!--ii) 一个字典作为一个显示单位,定义一个子组件进行渲染(涉及父子组件传参)--> <div id="add">
<h2 @click="t1">电视</h2>
<h2 @click="p1">手机</h2>
<div class="wrap" v-if="tt">
<my-tv v-for="t2 in holl.tv" :im="t2.img" :tit="t2.title" ></my-tv>
</div> <div class="wrap" v-if="pp">
<my-tv v-for="p2 in holl.phone" :im="p2.img" :tit="p2.title" ></my-tv>
</div>
</div> </body>
<script src="js/vue.js"></script>
<script>
let ad_data = {
tv: [
{img: 'img/101.jpg', title: 'tv1'},
{img: 'img/102.jpg', title: 'tv2'},
{img: 'img/103.jpg', title: 'tv3'},
{img: 'img/104.jpg', title: 'tv4'},
],
phone: [
{img: 'img/201.jpg', title: 'phone1'},
{img: 'img/202.jpg', title: 'phone2'},
{img: 'img/203.jpg', title: 'phone3'},
{img: 'img/204.jpg', title: 'phone4'},
]
}; let myTv={
props:['im','tit'],
template :`
<div class="box">
<img :src="im" alt="">
<h2>{{ tit }}</h2>
</div>
`, }; let myPh={
props:['im','tit'],
template :`
<div class="box">
<img :src="im" alt="">
<h2>{{ tit }}</h2>
</div>
`, }; new Vue({
el:'#add',
data:{
holl:ad_data,
tt:'',
pp:''
},
components:{
myTv,
myPh },
methods:{
t1(){
this.tt=1
},
p1(){
this.pp=1
}
}
})
</script>
</html>

页面最下方有一个 h2 标签,用来渲染用户当前选择的广告(点击哪个广告就是选中哪个广告)

i)当没有点击任何广告,h2 标签显示:未选中任何广告

ii)当点击其中一个广告,如tv1,h2 标签显示:tv1被选中

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
body,h2 {
margin: 0;
}
.wrap {
width: 880px;
margin: 0 auto;
}
.wrap:after {
content: '';
display: block;
}
.box {
width: 200px;
border-radius: 10px;
overflow: hidden;
background-color: #eee;
float: left;
margin: 10px;
} .box img {
width: 200px;
height: 240px;
}
.box h2 {
text-align: center;
font-weight: normal;
font-size: 20px;
}
.gg {
margin-top: 615px;
margin-left: 45%;
} </style> <body>
<!--3、在第2题基础上,页面最下方有一个 h2 标签,用来渲染用户当前选择的广告(点击哪个广告就是选中哪个广告)-->
<!--i)当没有点击任何广告,h2 标签显示:未选中任何广告-->
<!--ii)当点击其中一个广告,如tv1,h2 标签显示:tv1被选中--> <div id="add">
<h2 @click="t1">电视</h2>
<h2 @click="p1">手机</h2>
<div class="wrap" v-if="tt">
<my-tv v-for="t2 in holl.tv" :im="t2.img" :tit="t2.title" @tb="tb1"></my-tv>
</div> <div class="wrap" v-if="pp">
<my-ph v-for="p2 in holl.phone" :im="p2.img" :tit="p2.title" @ppb="pbb1"></my-ph>
</div> <h2 class="gg">{{ h2 }}</h2> </div> </body>
<script src="js/vue.js"></script>
<script>
let ad_data = {
tv: [
{img: 'img/101.jpg', title: 'tv1'},
{img: 'img/102.jpg', title: 'tv2'},
{img: 'img/103.jpg', title: 'tv3'},
{img: 'img/104.jpg', title: 'tv4'},
],
phone: [
{img: 'img/201.jpg', title: 'phone1'},
{img: 'img/202.jpg', title: 'phone2'},
{img: 'img/203.jpg', title: 'phone3'},
{img: 'img/204.jpg', title: 'phone4'},
]
}; let myTv={
props:['im','tit'],
template :`
<div class="box" @click="tt1">
<img :src="im" alt="">
<h2>{{ tit }}</h2>
</div>
`,
methods:{
tt1(){
this.$emit('tb',this.tit)
}
} }; let myPh={
props:['im','tit'],
template :`
<div class="box" @click="bb1">
<img :src="im" alt="">
<h2>{{ tit }}</h2>
</div>
`,
methods:{
bb1(){
this.$emit('ppb',this.tit)
}
} }; new Vue({
el:'#add',
data:{
holl:ad_data,
tt:'',
pp:'',
h2:'未选中任何商品', },
components:{
myTv,
myPh },
methods:{
t1(){
this.tt=1
},
p1(){
this.pp=1
},
tb1(a){
this.h2=a
},
pbb1(a){
this.h2=a
} }
})
</script>
</html>

Vue --- 组件练习的更多相关文章

  1. vue组件

    分享出来让思路更成熟. 首先组件是 Vue.js 最强大的功能之一. 可以减少很多的工作量,提高工作效率. 编写一个可复用性的组件,虽然官网上也有.... 编写可复用性的vue组件 具备一下的几个要求 ...

  2. vue组件的配置属性

    vue组件的声明语法: Vue.component('component-name',{ template:'<p>段落{{prop1}} {{prop2}}</p>', da ...

  3. vue组件,撸第一个

    实现此例您可以学到: vue-cli的基本应用 父组件如何向子组件传递值 单文件组件如何引入scss v-on和v-for的基础应用 源码下载 一.搭建vue开发环境 更换镜像到cnpmnpm ins ...

  4. vue组件最佳实践

    看了老外的一篇关于组件开发的建议(强烈建议阅读英文原版),感觉不错翻译一下加深理解. 这篇文章制定一个统一的规则来开发你的vue程序,以至于达到一下目的. 1.让开发者和开发团队更容易发现一些事情. ...

  5. JS组件系列——又一款MVVM组件:Vue(二:构建自己的Vue组件)

    前言:转眼距离上篇 JS组件系列——又一款MVVM组件:Vue(一:30分钟搞定前端增删改查) 已有好几个月了,今天打算将它捡起来,发现好久不用,Vue相关技术点都生疏不少.经过这几个月的时间,Vue ...

  6. vue组件大集合 component

    vue组件分为全局组件.局部组件和父子组件,其中局部组件只能在el定义的范围内使用, 全局组件可以在随意地方使用,父子组件之间的传值问题等. Vue.extend 创建一个组件构造器 template ...

  7. 【Vue】详解Vue组件系统

    Vue渲染的两大基础方式 new 一个Vue的实例 这个我们一般会使用在挂载根节点这一初始化操作上: new Vue({ el: '#app' }) 注册组件并使用—— 全局注册 通过Vue.comp ...

  8. 关于vue组件的一个小结

    用vue进行开发到目前为止也有将近一年的时间了,在项目技术选型的时候隔壁组选 react的时候我们坚持使用vue作为前端的开发框架.虽然两者思想上的差异不大,但是vue的语法在代码的可读性以及后期的维 ...

  9. Vue组件基础用法

    前面的话 组件(Component)是Vue.js最强大的功能之一.组件可以扩展HTML元素,封装可重用的代码.根据项目需求,抽象出一些组件,每个组件里包含了展现.功能和样式.每个页面,根据自己所需, ...

  10. Vue组件模板形式实现对象数组数据循环为树形结构

    数据结构为数组中包含对象--树形结构,用Vue组件的写法实现以下的效果: 树形列表,缩进显示层级,第5级数据加底色,数据样式显色,点击展开折叠数据.本文为用Vue实现方式,另有一篇为用knockout ...

随机推荐

  1. STL源码剖析——序列式容器#4 Stack & Queue

    Stack stack是一种先进后出(First In Last Out,FILO)的数据结构,它只有一个出口,元素的新增.删除.最顶端访问都在该出口进行,没有其他位置和方法可以存取stack的元素. ...

  2. Go基础编程实践(三)—— 日期和时间

    日期和时间 package main import ( "fmt" "time" ) func main() { // 获取当前时间 current := ti ...

  3. SVN客户端教程

    .SVN是一个自由/开源的版本控制系统,一组文件存放在中心版本库,记录每一次文件和目录的修改,Subversion允许把数据恢复到早期版本,或是检查数据修改的历史,Subversion可以通过网络访问 ...

  4. nmon2influxdb+grafana:服务监控可视化部署

    在工作中,无论是定位线上问题,还是性能优化,都需要对前端.后台服务进行监控.而及时的获取监控数据,能更好的帮助技术人员排查定位问题. 前面的博客介绍过服务端监控工具:Nmon使用方法及利用easyNm ...

  5. easyUi——datetimebox绑定数据失效

    在做easy-ui时候,绑定数据不管在怎么写,都绑定不上去,最后发现是因为 标签的ID没有写,尴尬了,记录一下,防止后期出错. ui代码 <script type="text/java ...

  6. C# 获取目录路径

    Console.WriteLine(System.Windows.Forms.Application.StartupPath);//获取启动了应用程序的可执行文件的路径,不包括可执行文件的名称.(Wi ...

  7. C# 利用MS的 EntLib的Database类编写的DbHelper

    C# 利用MS的 EntLib的Database类编写的DbHelper,由于MS的EntLib对Oracle.SQL Server和MySql已经封装,所以可以该DbHelper可以适用这三种数据库 ...

  8. 16 doc values 【正排索引】

    搜索的时候,要依靠倒排索引:排序的时候,需要依靠正排索引,看到每个document的每个field,然后进行排序,所谓的正排索引,其实就是doc values 在建立索引的时候,一方面会建立倒排索引, ...

  9. 将windows共享文件夹挂载到Linux

    今天想用docker部署下 .net core的 服务,需要把代码文件从windows传到linux,以前一直都是拖拽的,这次安装的系统没有图形界面, 所以到网上找到了下面的这种方法,将共享文件夹挂载 ...

  10. webpack集成vue单文件模式的很多坑(研究了1个星期)

    1.一开始不知道局部安装webpack后,如何调用webpack. 后来看说明文档(webpack中文网)才知道,有个npx可以启动本地安装的webpack. 我估计:全局安装webpack,全局的w ...