Javascript - Vue - 组件
创建组件
组件是可以重复使用的html容器,可以把它注册到全局的Vue或实例的vue对象上,使它成为全局组件或vue对象的子组件,然后可以将它的html标签插入html文档中。组件的html只能有一个root元素。
使用声明式的方法创建组件
var tt=Vue.extend({
template:"<div>hello vue</div>"
});
Vue.component("tt", tt); //参数1是组件的html标签名,参数2是组件对象名
//方式二
var tt = {
template: "<div>hello vue</div>"
};
Vue.component("tt", tt);
//方式三
var vv = new Vue({
el: ".box",
components: {
tt: {
template: "<div>hello vue</div>"
}
}
});
template指向的html还可以直接写在template标签里,然后通过id或class引入
<div>hello vue</div>
</template>
template:"#template-box"
});
var tt = {
template: "#template-box"
};
var vv = new Vue({
el: ".box",
components: {
tt: {
template: "#template-box"
}
}
});
使用vue文件创建组件
创建一个components目录,在目录下创建一个html,把后缀名改为.vue,清空该文档,然后把template写进去。这种文件就是vue专用的组件文件,在template标签下可以写任何html标签,支持html、script、style标签。
<div>
<h1>{{msg}}</h1>
</div>
</template>
<script>
//此处可以使用ES6语法导入js、css文件
//表示导出这个组件对象
export default {
//组件对象可以看成是一个特殊的vue对象,用法与在vue对象差不多,只是data必须是一个函数,它必须返回一个匿名的对象,而真正的data就放在匿名对象中
data: function () {
return {
msg:"hello vue"
}
}
}
</script>
<style></style>
然后导入这个组件对象,把它注册在vue对象上
import tt from "./components/tt.vue";
var vm = new Vue({
el: ".box",
components: {
tt: tt
}
});
现在可以在vue对象绑定的那个html中使用组件了
<tt></tt>
</div>
*组件的html名字如果是驼峰形式,那么插入html时,必须使用连字符:
template:"<div>hello vue</div>"
}
Vue.component("myCom",tt);
子父组件传值
子组件取父组件的数据、调用父组件的函数 $parent
el: ".box",
data: {
msg:"test"
},
methods: {
getParentFunction: function () {
alert("OK");
}
},
components: {
tt: tt
}
});
<div>
<button @click="getParentData">getParentData</button>
</div>
</template>
<script>
export default {
data: function () {
return {
msg:"hello vue"
}
},
methods: {
getParentData: function () {
alert(this.$parent.msg);
this.$parent.getParentFunction();
}
}
}
</script>
父组件取子组件的数据 $refs
使用vue的$refs对象可以获取为子组件定义的ref引用,通过这种方式获取子组件对象,然后得到子组件的数据或函数。ref只能用在子组件上,对父组件无效。
<div></div>
</template>
<script>
export default {
data: function () {
return {
msg: "hello vue"
}
},
methods: {
getChildFunction: function () {
alert("OK");
}
}
}
</script>
<tt ref="mytt"></tt>
</div>
el: ".box",
methods: {
getChildData: function () {
alert(this.$refs.mytt.msg);
this.$refs.mytt.getChildFunction();
}
},
components: {
tt: tt
}
});
切换子组件
除了html标签:template,vue还提供了component标签,这个html标签用于装载组件,它的html属性:is用于指定装载的组件的名字(组件对象的名字),利用is属性可以实现在html标签component中动态切换组件。
<a href="#" @click="login">login</a>
<a href="#" @click="register">register</a>
<component :is="componentName"></component>
</div>
<script>
Vue.component("login", {
template: "<h3>login区域</h3>"
});
Vue.component("register", {
template: "<h3>register区域</h3>",
});
var vm = new Vue({
el: "#box",
data: {
componentName:null
},
methods: {
login: function () {
this.componentName = "login";
},
register: function () {
this.componentName = "register";
}
}
});

渲染组件
vue提供render来将组件对象渲染到html文档,这样做会使组件直接替换掉绑定到vue上的那个html元素。
template: "<h1>hello world</h1>"
};
var vm = new Vue({
el: "#box",
render: function (create) {
return create(tem);
}
});
组件的生命周期
与vue对象的生命周期是一样的。
在vue组件文件中获取外部文件中的dom元素
通常情况下,一个页面会有N个组件,如果你使用.vue文件创建组件,那么在组件文件中如何访问在同一个页面上的其它组件里的html元素呢?答案是只要这些组件在同一个页面上,那就可以直接使用js原生方法document.querySelector获取其它组件里的html元素。
Javascript - Vue - 组件的更多相关文章
- Javascript - Vue - webpack中的组件、路由和动画
引入vue.js 1.cnpm i vue -S 2.在mian.js中引入vue文件 import Vue from "vue"//在main.js中使用这种方式引用vue文件时 ...
- vue组件
分享出来让思路更成熟. 首先组件是 Vue.js 最强大的功能之一. 可以减少很多的工作量,提高工作效率. 编写一个可复用性的组件,虽然官网上也有.... 编写可复用性的vue组件 具备一下的几个要求 ...
- 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组件的写法实现以下的效果: 树形列表,缩进显示层级,第5级数据加底色,数据样式显色,点击展开折叠数据.本文为用Vue实现方式,另有一篇为用knockout ...
- canvas实现倒计时效果示例(vue组件内编写)
前言: 此事例是在vue组件中,使用canvas实现倒计时动画的效果.其实,实现效果的逻辑跟vue没有关系,只要读懂canvas如何实现效果的这部分逻辑就可以了 canvas动画的原理:利用定时器,给 ...
- Vue (三) --- Vue 组件开发
------------------------------------------------------------------好心情,会让你峰回路转. 5. 组件化开发 5.1 组件[compo ...
随机推荐
- PAT乙级:1072开学寄语(20分)
PAT乙级:1072开学寄语(20分) 题干 下图是上海某校的新学期开学寄语:天将降大任于斯人也,必先删其微博,卸其 QQ,封其电脑,夺其手机,收其 ipad,断其 wifi,使其百无聊赖,然后,净面 ...
- 开源百宝箱《HelloGitHub》第 64 期
兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 分享 GitHub 上有趣.入门级的开源项目. HelloGitHub 有实战.教程.黑科技.开源书籍.企业级开源项目,涵盖多种编程 ...
- kafka可视化工具
Kafka可视化客户端工具(Kafka Tool 2)的安装和使用 Kafka Tool 2 是一款 Kafka 的可视化客户端工具,可以非常方便的查看 Topic 的队列信息.消费者信息以及 kaf ...
- STEVE JOBS: Stanford Commencement【Stay Hungry. Stay Foolish.】
In 2005, a year after he was first diagnosed with cancer, Apple CEO Steve Jobs made a candid speech ...
- noip模拟29[简单的板子题](虽然我不会)
\(noip模拟29\;solutions\) 这次考试给我最大的伤害,让我意识到了差距 这场考试可以说是非常的简单,就是简单到,看两眼,打个表就有结果了 但是呢?我考得非常的完蛋,只有30pts 据 ...
- VSCode远程免密登录
VSCode远程免密登录 本地生成密钥 生成命令如下: ssh-keygen -t rsa 会生成id_rsa, id_rsa.pub两个文件 公钥拷贝到服务器 将公钥id_rsa.pub拷贝到服务器 ...
- QT常用控件(三)——自定义控件封装
引言 Qt已经提供了很多的基础控件供开发使用,而Qt原生的控件有时候并不能满足我们的需求,特别是在工业的运用上,比如我们需要一个日期时间的选择器,Qt虽然已经提供了原生的QDateTime控件,但这个 ...
- gitlab维护之修改clone地址
因为配置了域名访问gitlab私有仓库,但是在项目clone这里,显示的还是ip地址,并且还带端口,每次访问,clone都需要自己修改,比较不方便. 修改方法: sudo vim /opt/gitla ...
- 用 Java 实现常见的 8 种内部排序算法
一.插入类排序 插入类排序就是在一个有序的序列中,插入一个新的关键字.从而达到新的有序序列.插入排序一般有直接插入排序.折半插入排序和希尔排序. 1. 插入排序 1.1 直接插入排序 /** * 直接 ...
- 一周内被程序员疯转3.2W次,最终被大厂封杀的《字节跳动Android面试手册》!
一眨眼又到金三银四了,不知道各位有没有做好跳槽涨薪的准备了呢? 今天的话大家分享一份最新的<字节跳动Android面试手册>,内容包含Android基础+进阶,Java基础+进阶,数据结构 ...