Vue --- 组件练习
一
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 --- 组件练习的更多相关文章
- vue组件
分享出来让思路更成熟. 首先组件是 Vue.js 最强大的功能之一. 可以减少很多的工作量,提高工作效率. 编写一个可复用性的组件,虽然官网上也有.... 编写可复用性的vue组件 具备一下的几个要求 ...
- vue组件的配置属性
vue组件的声明语法: Vue.component('component-name',{ template:'<p>段落{{prop1}} {{prop2}}</p>', da ...
- vue组件,撸第一个
实现此例您可以学到: vue-cli的基本应用 父组件如何向子组件传递值 单文件组件如何引入scss v-on和v-for的基础应用 源码下载 一.搭建vue开发环境 更换镜像到cnpmnpm ins ...
- vue组件最佳实践
看了老外的一篇关于组件开发的建议(强烈建议阅读英文原版),感觉不错翻译一下加深理解. 这篇文章制定一个统一的规则来开发你的vue程序,以至于达到一下目的. 1.让开发者和开发团队更容易发现一些事情. ...
- JS组件系列——又一款MVVM组件:Vue(二:构建自己的Vue组件)
前言:转眼距离上篇 JS组件系列——又一款MVVM组件:Vue(一:30分钟搞定前端增删改查) 已有好几个月了,今天打算将它捡起来,发现好久不用,Vue相关技术点都生疏不少.经过这几个月的时间,Vue ...
- vue组件大集合 component
vue组件分为全局组件.局部组件和父子组件,其中局部组件只能在el定义的范围内使用, 全局组件可以在随意地方使用,父子组件之间的传值问题等. Vue.extend 创建一个组件构造器 template ...
- 【Vue】详解Vue组件系统
Vue渲染的两大基础方式 new 一个Vue的实例 这个我们一般会使用在挂载根节点这一初始化操作上: new Vue({ el: '#app' }) 注册组件并使用—— 全局注册 通过Vue.comp ...
- 关于vue组件的一个小结
用vue进行开发到目前为止也有将近一年的时间了,在项目技术选型的时候隔壁组选 react的时候我们坚持使用vue作为前端的开发框架.虽然两者思想上的差异不大,但是vue的语法在代码的可读性以及后期的维 ...
- Vue组件基础用法
前面的话 组件(Component)是Vue.js最强大的功能之一.组件可以扩展HTML元素,封装可重用的代码.根据项目需求,抽象出一些组件,每个组件里包含了展现.功能和样式.每个页面,根据自己所需, ...
- Vue组件模板形式实现对象数组数据循环为树形结构
数据结构为数组中包含对象--树形结构,用Vue组件的写法实现以下的效果: 树形列表,缩进显示层级,第5级数据加底色,数据样式显色,点击展开折叠数据.本文为用Vue实现方式,另有一篇为用knockout ...
随机推荐
- Navicat 12.1激活
去官网下载 https://www.navicat.com.cn/download/navicat-premium 然后下载这个破解包 第一个是整合了 navicat121_premium_cs_x6 ...
- web记住我功能的实现
在web网页中经常可以看到记住我这样的功能,其实现原理是登陆时候在response中写入cookie,发送请求时,取出cookie判断,如果有则说明已经登陆 写cookie Cookie cookie ...
- java 调用Spring接口上传文件及其他参数填充
第一步:在Spring配置中添加以下内容 <!-- 配置MultipartResolver 用于文件上传 使用spring的CommosMultipartResolver --> < ...
- 手撕面试官系列(五):Tomcat+Mysql+设计模式面试专题
Tomcat (面试题+答案领取方式见侧边栏) Tomcat 的缺省端口是多少,怎么修改? tomcat 有哪几种 Connector 运行模式(优化)? Tomcat 有几种部署方式? tomcat ...
- AtCoder-arc060 (题解)
A - 高橋君とカード / Tak and Cards (DP) 题目链接 题目大意: 有 \(n\) 个数字,要求取出一些数字,使得它们的平均数恰好为 \(x\) ,问有几种取法. 大致思路: 只要 ...
- tensorflow-笔记02
TensorFlow扩展功能 自动求导.子图的执行.计算图控制流.队列/容器 1.TensorFlow自动求导 在深度学习乃至机器学习中,计算损失函数的梯度是最基本的需求,因此TensorFlow也原 ...
- Mysql表字段命令alter add
alter add命令用来增加表的字段. alter add命令格式:alter table 表名 add字段 类型 其他; 例如,在表MyClass中添加了一个字段passtest,类型为int(4 ...
- [转]Go语言string,int,int64 ,float之间类型转换方法
1 正文 (1)int转string s := strconv.Itoa(i) 等价于s := strconv.FormatInt(int64(i), 10) (2)int64转string i := ...
- 浏览器提示:源映射错误:request failed with status 404 源 URL:http://xxx.js 源映射 URL:jquery.min.map
浏览器 jquery1.9.1min.js 报脚本错误 无jquery.min.map 文件 最近在浏览个人网站的时候就遇到了这个问题 我先说一下什么是source map文件. source map ...
- bootstrap fileinput实现限制图片上传数量及如何控制分批多次上传
废话没有,直奔主题 问题点: fileinput提供了一个maxFileCount用于限制图片上传的数量,设置maxFileCount为1时,一次性选择超过一张会有如下提示: 当选择一张,不点上传,再 ...