四、vue基础--自定义组件
1.语法:Vue.component("组件名字",{data,template}),代码如下:
a. data: 必须是一个函数,有一个返回值。和vue里面的使用方法一样
b. template: 用来标示这个组件的渲染后的具体的代码
<div id='app'>
<button-count></button-count>
<button-count></button-count>
<button-count></button-count>
</div>
<script>
Vue.component("button-count",{
template:"<button @click='count+=1'>点击了{{count}}</button>",
data:function(){
return{
count:0
}
}
})
new Vue({
el:'#app',
data:{
}
})
</script>
2.组件的属性是通过props定义的,可以是一个数组,直接写属性名字。也可以是一个对象,可以给每个属性定义约束,比如:type,required,default。组件中只能有一个根元素。代码如下:
<div id='app'>
<blog-list :blogs="blogs"></blog-list>
</div>
<script>
Vue.component("blog-list",{
//props:['blogs']
props:{
blogs:{
type:Array,
required:true
}
},
template:`
<table>
<thead>
<tr>
<th>序号</th>
<th>标题</th>
</tr>
</thead>
<tbody>
<tr v-for="(blog,index) in blogs">
<td>{{index+1}}</td>
<td>{{blog.title}}</td>
</tr>
</tbody>
</table>
`
})
new Vue({
el:'#app',
data:{
blogs:[{
title:"坏蛋是怎样练成的",
content:"xxx"
},{
title:"python基础",
content:"ooo"
}]
}
})
</script>
3.自定义组件添加事件:代码如下:
a.在需要触发事件的时候,调用this.$emit(事件名称,参数...)
b.在使用这个组件的时候,绑定事件,语法同html比如:@check-chenged
<div id='app'>
<blog-itme v-for="blog in blogs" :blog=blog @check-changed="checkChanged"></blog-itme>
<h1>选中的是:</h1>
<div v-for="blog in selected_blogs">
{{blog.title}}
</div>
</div>
<script>
Vue.component("blog-itme",{
props:["blog"],
template:`
<div>
<span>{{blog.title}}</span>
<input type="checkbox" @click="onCheck">
</div>
`,
methods:{
onCheck(){
this.$emit("check-changed",this.blog)
}
}
})
new Vue({
el:'#app',
data:{
blogs:[{
title:"坏蛋是怎样练成的",
id:"1"
},{
title:"python基础",
id:"2"
}],
selected_blogs:[]
},
methods:{
checkChanged(blog){
// console.log(blog);
//indexOf:获取某个元素在数组中的位置,如果返回非负数说明存在就是下标,反之不存在
let index = this.selected_blogs.indexOf(blog)
if(index>=0){
this.selected_blogs.splice(index,1)
}else{
this.selected_blogs.push(blog)
}
}
}
})
</script>
4.自定义组件v-model:计步器-->在配置中需要两个属性进行配置
a.event:代表什么情况下触发这个v-model行为
b.prop:代表传给v-model的那个变量,要绑定到那个属性上
c.调用this.$emit(model.event,计算后的结果)就可以了,代码如下:
<div id='app'>
<Stepper v-model="goods_count"></Stepper>
</div>
<script>
//计步器
Vue.component("Stepper",{
props:['count'],
model:{
event:"count-changed",
prop:"count"
},
template:`
<div>
<button @click="sub">-</button>
<span>{{count}}</span>
<button @click="add">+</button>
</div>
`,
methods:{
sub(){
this.$emit("count-changed",this.count-1)
},
add(){
this.$emit("count-changed",this.count+1)
}
}
})
new Vue({
el:'#app',
data:{
goods_count:0
}
})
</script>
5.自定义组件--插槽
a.插槽的用法是在组件的模板代码汇总,在指定的位置使用slot,以后在使用这个组件的时候,在组件中添加的内容都在slot的位置
b.作用区域:插槽中只能使用组件中的数据,只能从父组件中读取数据
c.默认值,可以填写一个默认值,使用的时候可以用默认值,也可以自己写值 代码如下:
<div id='app'>
<chacao url="https://www.baidu.com/">百度</chacao>
<div>
<moren>哈哈</moren>
<moren></moren>
</div>
</div>
<script>
Vue.component("chacao",{
props:['url'],
template:`
<div>
<a :href="url">谷歌</a>
<slot></slot>
</div>
`
})
Vue.component("moren",{
template:`
<button>
<slot>确定</slot>
</button>`
})
new Vue({
el:'#app',
data:{
}
})
</script>
6.自定义名称插槽:如果想要在自定义组件中定义多个插槽,就需要给插槽取个名字。
a.定义: <slot name="名称"></slot>
b.使用: <template v-slot:名称>XXX</template>
代码如下:
<div id='app'>
<container>
<template v-slot:header>这个是header</template>
<template v-slot:body>这个是body</template>
<template v-slot:footer>这个是footer</template>
</container>
</div>
<script>
Vue.component('container',{
template:`
<div class="container">
<div>
<slot name="header"></slot>
</div>
<div>
<slot name="body"></slot>
</div>
<div>
<slot name="footer"></slot>
</div>
</div>
`
})
new Vue({
el:'#app',
data:{
}
})
</script>
7.自定义插槽作用域:
a.把不要给差插槽的变量绑定到slot上
b.在使用插槽的时候指定名称后,加上一个名称,绑定到slot上所有的属性可以通过这个名称获得 代码如下:
<div id='app'>
<container>
<template v-slot:header="headerprops">
{{headerprops.navs}}
</template>
<template v-slot:footer="footerprops">
{{footerprops.address}}/ {{footerprops.aboutus}}
</template>
</container>
</div>
<script>
Vue.component("container",{
template:`
<div>
<div class="header">
<slot name="header" :navs="navs"></slot>
</div>
<div class="footer">
<slot name="footer" :address="address" :aboutus="aboutus"></slot>
</div>
</div>
`,
data:function(){
return {
"address":"公司地址",
"aboutus":"关于我们",
navs:['网络设置','我的谁']
}
}
})
new Vue({
el:'#app',
data:{
}
})
</script>
四、vue基础--自定义组件的更多相关文章
- vue基础----自定义组件directive ,bind,update,insert
<div id="app"> <input type="text" v-limit.3="msg" v-focus> ...
- vue中自定义组件(插件)
vue中自定义组件(插件) 原创 2017年01月04日 22:46:43 标签: 插件 在vue项目中,可以自定义组件像vue-resource一样使用Vue.use()方法来使用,具体实现方法: ...
- 【VUE】自定义组件
[VUE]自定义组件 转载: ============================================ ======================================== ...
- Vue基础-自定义事件的表单输入组件、自定义组件的 v-model
Vue 测试版本:Vue.js v2.5.13 学习 Vue 的自定义事件的表单输入组件,觉得文档讲的不太细致,所以这里再细化一下: 如果不用 v-model,代码应该是这样: <myinput ...
- vue的自定义组件和组件传值
<div id="app"> <div>{{pmessage}}</div> //父组件 <child :message="pm ...
- vue之自定义组件
除了核心功能默认内置的指令外,vue也允许用户注册自定义指令.虽然在vue2.0中,代码复用和抽象的主要形式是组件,但是有些情况下,我们仍需要对普通DOM元素进行底层操作,这个时候就需要用到自定义指令 ...
- vue 相邻自定义组件渲染错误正确的打开方式
话不多说看问题: 当封装自定义组件时例如(自定义下拉列表)两个相同的组件在多次v-if变化时偶尔会发生渲染错误,明明赋值正确但是组建中的ajax方法可能返回的数据乱掉,或者其他神逻辑错误. 经过查询发 ...
- 编程小白入门分享五:Vue的自定义组件
前言 上篇博客简单介绍了vue,本篇博客要在对vue有一定了解后,才可以比较容易理解自定义组件.想要封装好一个组件,一定要熟练掌握这三个技能,父组件 -> 子组件传值(props).子组件 -& ...
- vue发布自定义组件到npm
一.使用 vue create currentdatetime创建项目(可查考https://cli.vuejs.org/zh/guide/creating-a-project.html),创建成功后 ...
随机推荐
- opencv 直方图
1.简介 对输入图像进行直方图均衡化处理,提升后续对象检测的准确率在OpenCV人脸检测的代码演示中已经很常见.此外对医学影像图像与卫星遥感图像也经常通过直方图均衡化来提升图像质量. 图像直方图均衡化 ...
- 日常工作问题解决:使用vmvare克隆centos6虚拟机造成无eth0的解决办法
目录 一.问题描述 样本虚拟机配置有两张网卡,eth0.eth1,使用vmvare克隆虚拟机后,复制的虚拟机,没有网卡eth0,eth1,而是有eth2.eth3,如下所示: 二.原因分析 复制系统中 ...
- EMR目录
EMR目录: E-MapReduce 是阿里云上的开源大数据平台,用户可以登录集群主节点查看相关安装路径. 登录后也可以使用 env |grep xxx 查看. 或者,在EMR Hadoop集群,切换 ...
- spring boot 2.x版本:java.lang.ClassNotFoundException: org.springframework.boot.bind.RelaxedDataBinder
标题 ##搭建spring boot 2.0.3版本 使用alibaba的druid数据库连接池,com.github.pagehelper的分页插件,启动项目报错. 错误提示:java.lang.C ...
- 【hash】Similarity of Subtrees
图片来源: https://blog.csdn.net/dylan_frank/article/details/78177368 [题意]: 对于每一个节点来说有多少对相同的子树. [题解]: 利用层 ...
- 读取一整行,保留空白,直到遇到换行符:getline()
- c++学习---vector
vector存放类型不同,{}有些区别-: vector的size的返回类型: push_back的使用: 要防止缓冲区溢出,使用范围for语句:
- 将物理机系统转为虚拟机系统 p2v
ref : https://blog.csdn.net/gsls200808/article/details/77932713 背景: 在公司有台机子主要负责某产品的升级与维护,出于各种原因,该产品需 ...
- 扩展kmp入门+比赛模板
https://wenku.baidu.com/view/8e9ebefb0242a8956bece4b3.html 参考了这个ppt 理解起来还是有点费劲的(还是推荐一下这个课件 里面概念和思路给的 ...
- linux, kill掉占用60%多cpu的进程,几秒后换个pid 和 command 又出现
linux, kill掉占用60%多cpu的进程,几秒后换个pid 和 command 又出现?快速清理木马流程.假设木马的名字是xysbqaxjqy,如果top看不到,可以在/etc/init.d目 ...