Vue.js组件学习

组件可以扩展HTML元素,封装可重用的HTML代码,我们可以将组件看作自定义的HTML元素。组件系统提供了一种抽象,让我们可以使用独立可复用的小组件来构建大型应用。

一个简单组件例子(全局注册)

<!DOCTYPE html>
<html><body><div id="app"><!-- 3. #app是Vue实例挂载的元素,应该在挂载元素范围内使用组件--><the-component></the-component></div></body><script src="js/vue.js"></script><script>// 1.创建一个组件构造器var myComponent = Vue.extend({template: '<div> my first component!</div>'})// 2.注册组件,并指定组件的标签,组件的HTML标签为<the-component> 
        Vue.component('the-component', myComponent)new Vue({el: '#app'});</script>
</html>

运行结果:

分析:

1.Vue.extent() 是Vue构造器的扩展,调用Vue.extend()创建的是一个组件构造器,而不是一个具体的组件实例。它里面的选项对象的template属性用于定义组件要渲染的HTML。

2.Vue.component() 注册组件时,需要提供2个参数,第一个参数是组件的标签,第二个是组件构造器。它调用了组件构造器myComponent,创建一个组件实例。

3.组件应该挂载在某个Vue实例下,

new Vue({el: '#app'
});

这段代码必须要有,表示挂载在#app元素上,否则不会生效。

局部注册:

  <script>// 1.创建一个组件构造器var myComponent = Vue.extend({template: '<div> my first2 component!</div>'})new Vue({el: '#app',components: {// 2. 将myComponent组件注册到Vue实例下'the-component' : myComponent}});</script>

父组件和子组件

可以在组件中定义并使用其他组件,构成父子组件关系。

例子:(注意版本用vue.js 1.0的,2.0版本,button都出现不了

<!DOCTYPE html>
<html><head><meta charset="utf-8"></head><body><!-- 子组件模板 --><template id="child-template"><input v-model="msg"><button v-on:click="notify">Dispatch Event</button></template><!-- 父组件模板 --><div id="events-example"><p>Messages: {{ messages | json }}</p><child></child></div></body><script src="http://cdn.bootcss.com/vue/1.0.0-csp/vue.js"></script><script>// 注册子组件// 将当前消息派发出去
  Vue.component('child', {template: '#child-template',data: function () {return { msg: 'hello' }},methods: {notify: function () {if (this.msg.trim()) {this.$dispatch('child-msg', this.msg)this.msg = ''}}}})// 初始化父组件// 将收到消息时将事件推入一个数组var parent = new Vue({el: '#events-example',data: {messages: []},// 在创建实例时 `events` 选项简单地调用 `$on`
    events: {'child-msg': function (msg) {// 事件回调内的 `this` 自动绑定到注册它的实例上this.messages.push(msg)}}})</script>
</html>

运行结果:

props示例

<!DOCTYPE html>
<html><head><meta charset="utf-8"></head><body><template id="myComponent"><table><tr><th colspan="2">子组件数据</th></tr><tr><td>myname</td><td v-text="myName"></td></tr><tr><td>myage</td><td v-text="myAge"></td></tr></table></template><div id="app"><my-component v-bind:my-name="name" v-bind:my-age="age"></my-component></div></body><script src="http://cdn.bootcss.com/vue/1.0.0-csp/vue.js"></script><script>var vm = new Vue({el: '#app',data: {name: 'wangjuan',age: 24},components: {'my-component': {template: '#myComponent',props: ['myName', 'myAge']}}});</script>
</html>

结果为:

prop双向绑定

<!DOCTYPE html>
<html><head><meta charset="utf-8"></head><body><template id="myComponent"><table><tr><th colspan="3">子组件数据</th></tr><tr><td>myname:</td><td v-text="myName"></td><td><input type="text" v-model="myName" /></td></tr><tr><td>myage:</td><td v-text="myAge"></td><td><input type="text" v-model="myAge" /></td></tr></table></template><div id="app"><table><tr><th colspan="3">父组件数据</th></tr><tr><td>name:</td><td>{{ name }}</td><td><input type="text" v-model="name" /></td></tr><tr><td>age:</td><td>{{ age }}</td><td><input type="text" v-model="age" /></td></tr></table><my-component v-bind:my-name="name" v-bind:my-age="age"></my-component></div></body><script src="http://cdn.bootcss.com/vue/2.0.0-rc.8/vue.js"></script><script>var vm = new Vue({el: '#app',data: {name: 'wangjuan',age: 24},components: {'my-component': {template: '#myComponent',props: ['myName', 'myAge']}}});</script>
</html>

结果:

prop默认是单向绑定,不过这里我感觉默认是双向绑定,不知道哪里出问题了。。。

使用.sync或.once 绑定修饰符显式地强制双向或单次绑定。

子组件可以用this.$parent访问它的父组件。根实例的后代可以用this.$root访问它。父组件有一个数组this.$children,包含它所有的子元素。

 

转载于:https://www.cnblogs.com/wj204/p/5923045.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/373798.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Winform MD5

1&#xff1a;MD5 http://www.cmd5.com/ 字节数组----字符串 //将字节数组中每个元素按照指定的编码格式解析成字符串//直接将数组ToString()//将字节数组中的每个元素ToString() //ToString("Params") ToString("x") //可以将十进制字符串转换为16进制字符…

HTML元素显示与隐藏

在WEB开发中&#xff0c;前台HTML中经常需要控制元素的隐藏与显示&#xff0c;我们最为最常见是二级导航栏&#xff08;通过鼠标的移动来触发onmouseover&#xff0c;onmouseout事件来实现二级菜单的显示与隐藏&#xff09;二级菜单的显示与隐藏。 然而控制元素的影响与显示有…

书评:JavaFX 2.0:示例介绍

尽管Oracle在JavaOne 2010和JavaOne 2011上对JavaFX的更改使我从怀疑论者转变为对JavaFX的信奉者 &#xff0c;但是JavaFX愿景的转变并非没有缺点 。 特别是&#xff0c;JavaFX图书市场一直很棘手&#xff0c;因为几乎所有可用的JavaFX图书都与1.x版本有关。 在这篇文章中&…

脑子越来越不好使,文字越来越像驮shi

没办法&#xff0c;还是记下来。。。转载于:https://www.cnblogs.com/thorlet/p/5926595.html

python机制_python异常机制个人理解(参考网上资料)

当你的程序中出现异常情况时就需要异常处理。比如当你打开一个不存在的文件时。当你的程序中有一些无效的语句时&#xff0c;Python会提示你有错误存在。下面是一个拼写错误的例子&#xff0c;print写成了Print。Python是大小写敏感的&#xff0c;因此Python将引发一个错误&…

NYOJ 24 素数距离问题

素数距离问题 时间限制&#xff1a;3000 ms | 内存限制&#xff1a;65535 KB难度&#xff1a;2描述 现在给出你一些数&#xff0c;要求你写出一个程序&#xff0c;输出这些整数相邻最近的素数&#xff0c;并输出其相距长度。如果左右有等距离长度素数&#xff0c;则输出左侧的…

C#控件大小随窗体大小等比例变化

相信很多博友在开发初次接触学习C# winForm时&#xff0c;当窗体大小变化时&#xff0c;窗体内的控件并没有随着窗体的变化而变化&#xff0c;最近因为一个项目工程的原因&#xff0c;也需要解决这个问题。通过查阅和学习&#xff0c;这个问题得到了解决&#xff0c;或许不是很…

Google Appengine登台服务器操作方法

Google的App Engine开箱即用&#xff0c;支持版本化部署。 您可以非常轻松地在各修订版之间来回切换&#xff0c;这是在上线之前正确测试应用程序的一项很棒的功能。 有一个主要问题&#xff1a;应用程序的所有版本共享同一数据存储。 因此&#xff0c;如果要迁移数据&#xff…

下 面 这 条 语 句 一 共 创 建 了 多 少 个 对 象 : String s=a+b+c+d;

javac 编译可以对字符串常量直接相加的表达式进行优化&#xff0c; 不必要等到运行期去进行加法运算处理&#xff0c; 而是在编译时去掉其中的加号&#xff0c; 直接将其编译成一个这些常量相连的结果。题目中的第一行代码被编译器在编译时优化后&#xff0c; 相当于直接定义了…

公共样式_设计干货 | 园路铺装的100种样式,保存收好

Part 1园路的形式主干道&#xff1a;联系全园&#xff0c;必须考虑通行、生产、救护、消防、游览的需要。次干道&#xff1a;沟通各景点、建筑&#xff0c;通轻型车辆。休闲小径、健康步道&#xff1a;健康步道是近年来最为流行的足底按摩健身方式。通过行走卵石路上按摩足底穴…

22个所见即所得在线 Web 编辑器

新闻来源:sixrevisions.com我们曾介绍过 10 个基于 JavaScript 的 WYSIWYG&#xff08;所见即所得&#xff09; 编辑器&#xff0c;这些 Web 编辑器可以在线编辑和处理富 Web 内容&#xff0c;包括格式文本&#xff0c;表格&#xff0c;图片&#xff0c;媒体&#xff0c;链接等…

配置阿里云作为yum 源

第一步&#xff1a;下载aliyum 的yum源配置文件。 http://mirrors.aliyun.com/repo/ 第二步&#xff1a;把下载到的repo文件复制到/etc/yum.repo.d/目录下。 ----------------------------------------------------下面是本地yum源的一个例子 [base_extra]namebase & extra…

Spring 3,Spring Web Services 2和LDAP安全

今年的开局很好&#xff0c;其中另一个“截止日期不会改变” /“跳过所有繁文tape节” / “狂野西部”类型的项目中&#xff0c;我必须弄清楚并使用相对而言实现一些功能。新的库和技术需要进行更改&#xff0c;Spring 3并不是新增功能&#xff0c;但是在Java 5&#xff0c;web…

vue 日期选择器默认时间_vue-datepicker

vue-datepicker基于 Vue 的日期/时间选择组件。安装NodeJS 环境 (commonjs)npm i hyjiacan/vue-datepicker或者yarn add hyjiacan/vue-datepicker可以通过以下方式获取最新的代码git clone https://github.com/hyjiacan/vue-datepicker.git源码仓库浏览器环境 (umd)Since 2.4.0…

easyUI validate函数【总结篇-部分转】

以下是自己总结和修改别人的帖子和资源整理出来的一些常用验证函数&#xff0c;备用&#xff0c;交流。 <body>邮箱验证&#xff1a;<input type"text" validtype"email" required"true" missingMessage"不能为空" invalidMe…

CSDN挑战编程——《金色十月线上编程比赛第一题:小女孩数数》

金色十月线上编程比赛第一题&#xff1a;小女孩数数 题目详情: 【金色十月线上编程比赛规则】 一个小女孩正在用左手手指数数&#xff0c;从1数到n。她从拇指算作1开始数起&#xff0c;然后&#xff0c;食指为2&#xff0c;中指为3&#xff0c;无名指为4&#xff0c;小指为5。…

ubuntu 安装完成后的工作

以安装 ubuntu 15.10 为例 1. 备份并更改源 1 cd /etc/apt 2 sudo cp source.list source.list.bak 3 sudo vi source.list 删除所有内容并增加其他源&#xff08;用vi删除所有内容&#xff0c;命令行下gg移动光标至文件头&#xff0c;dG删除光标后所有内容&#xff09; 阿里云…

Morphia和MongoDB:不断发展的文档结构

在上一篇有关Morphia的文章中 &#xff0c;我介绍了一些典型用法&#xff0c;并提到了一些已知问题的警告和解决方法。 我展示了使用Morphia多么容易&#xff0c;以及它与Java世界的交互方式。 为了跟进该帖子&#xff0c;我将讨论如何处理一些现实生活中的需求&#xff1a;处理…

angular 点菜_Vue2与Angular5实现无人点餐、无人收银系统项目实战视频教程【组合套餐】(大地)...

Vue2实现无人点餐、无人收银系统项目实战视频教程详情地址&#xff1a;Angular5实现无人点餐、无人收银系统项目实战视频教程详情地址&#xff1a;教程介绍&#xff1a;Vue2与Angular5实现无人点餐、无人收银系统项目实战视频教程【组合套餐】是由大地老师倾情录制的最新Vue2与…

CSDN挑战编程——《金色十月线上编程比赛第二题:解密》

金色十月线上编程比赛第二题&#xff1a;解密 题目详情: 小强是一名学生&#xff0c; 同时他也是一个黑客。 考试结束后不久&#xff0c;他惊讶的发现自己的高等数学科目居然挂了&#xff0c;于是他果断入侵了学校教务部网站。在入侵的过程中&#xff0c;他发现了与成绩相关的…