1 为了能在模板中使用,组件必须先注册以便 Vue 能够识别。这里有两种组件的注册类型:全局注册局部注册

1.1 全局注册是通过Vue.component 来向Vue注册,例子

Vue.component('my-component-name', {
// ... options ...
})

全局注册的组件可以用在其被注册之后的任何 (通过 new Vue) 新创建的 Vue 根实例,也包括其组件树中的所有子组件的模板中。

1.2 局部注册,先声名一个局部组件,在 js 文件中直接用变量接收对象

var comp = {
template:'<li></li>'
}

在根实例中使用 components 属性引入局部组件。

new Vue({
...
components:['comp']
...
})

引入局部组件后就可以在模板中使用子组件了。

2 父组件向子组件传递数据方法,通过 Prop 向子组件传递数据,父组件数据通过绑定子组件的属性向子组件传递数据,在子组件的模板中就可以使用该属性。即成为了子组件的数据属性。

Prop 是你可以在组件上注册的一些自定义属性。当一个值传递给一个 prop 属性的时候,它就变成了那个组件实例的一个属性。例子如下:

2.1 定义一个子组件

Vue.component('list-item',{
template:"<li>{{content}}</li>",
props:['content']
});

props 表明子组件接受父组件通过 content 属性传递过来的数据。

此时子组件的 template 就可以使用 props 中声名的属性了。该属性也是子组件的数据属性。

2.2 在父组件的模板中使用声名的组件。

<ul>
<list-item v-for="(item,index) of listItems" :key="index" :content="item"></list-item>
</ul>

将父组件中的 item 数据绑定到子组件的 content 属性上。

至此就完成了父组件向子组件传递数据的功能。

完整代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>demo2</title>
<script type="text/javascript" src="../static/vue/vue.js"></script> </head>
<body>
<div id="root">
<input v-model="inputValue">
<button @click="addItem">点我提交</button>
<ul>
<list-item v-for="(item,index) of listItems" :key="index" :content="item"></list-item>
</ul> </div> </body>
<script type="text/javascript"> Vue.component('list-item',{
template:"<li>{{content}}</li>",
props:['content']
}); new Vue({
el:"#root",
data:{
inputValue:'',
listItems:[] },
methods:{
addItem: function () {
this.listItems.push(this.inputValue);
this.inputValue = '';
}
} })
</script>
</html>

3 通过事件向父组件发送消息

3.1 子组件触发父组件的一个事件,我们可以调用内建的 $emit 方法并传入事件的名字,来向父级组件触发一个事件。例如:单击按钮,向父组件发送‘enlarge-text’事件。

<button v-on:click="$emit('enlarge-text')">
Enlarge text
</button>

3.1.2 通过函数第二个参数向父组件传递参数

<button v-on:click="$emit('enlarge-text', 0.1)">
Enlarge text
</button>

然后当在父级组件监听这个事件的时候,我们可以通过 $event 访问到被抛出的这个值:

<blog-post
...
v-on:enlarge-text="postFontSize += $event"
></blog-post>

解释二:

通过第二小节可以将父组件的数据传递到子组件中。现在想让父组件接受子组件的数据如何做的呢?通过发布订阅模式。主要函数 $emit 抛出一个事件

例子:单击子组件删除对应的子组件。

3.2.1 绑定子组件单击事件,并向父组件抛出事件和数据。

Vue.component('list-item',{
template:"<li @click='handleClick'>{{content}}</li>",
props:['content','index'],
methods:{
handleClick:function () {
this.$emit('delete',this.index);
}
}
});

当单击子组件时,绑定的是handleClick 方法,首先在子组件中使用该方法处理。处理函数通过 $emit 方法抛出 delete 事件(自定义事件) 和 index 数据。

3.2.2 父组件中监听子组件的自定义的 delete 事件,并绑定处理函数。

<list-item
v-for="(item, index) of listItems"
:key="index" :content="item"
:index="index"
@delete="handleDelete"
>
</list-item>

当父组件监听到子组件的 delete 事件后,使用 handleDelete 方法进行处理:删除对应组件。即将 listItems 中的对应数据删除掉,页面上就会对应删除。

new Vue({
el: "#root",
data: {
inputValue:'',
listItems: []
},
methods: {
addItem: function () {
this.listItems.push(this.inputValue);
this.inputValue='';
},
handleDelete: function (index) {
alert(index);
this.listItems.splice(index,);
}
}
})

完整代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>demo3</title>
<script type="text/javascript" src="../static/vue/vue.js"></script>
</head>
<body>
<div id="root">
<input v-model="inputValue">
<button @click="addItem">添加</button>
<ul>
<!--<li v-for="(item, index) of listItems" :key="index">{{item}}</li>-->
<list-item
v-for="(item, index) of listItems"
:key="index" :content="item"
:index="index"
@delete="handleDelete"
>
</list-item>
</ul> </div> </body> <script type="text/javascript">
Vue.component('list-item',{
template:"<li @click='handleClick'>{{content}}</li>",
props:['content','index'],
methods:{
handleClick:function () {
this.$emit('delete',this.index);
}
}
}); new Vue({
el: "#root",
data: {
inputValue:'',
listItems: []
},
methods: {
addItem: function () {
this.listItems.push(this.inputValue);
this.inputValue='';
},
handleDelete: function (index) {
alert(index);
this.listItems.splice(index,);
}
}
})
</script>
</html>

Vue 中组件概念的更多相关文章

  1. Vue中组件

    0828自我总结 Vue中组件 一.组件的构成 组件:由 template + css + js 三部分组成(.vue文件) 1)组件具有复用性 2) 复用组件时,数据要隔离 3) 复用组件时,方法不 ...

  2. vue中组件之间的通信

    一.vue中组件通信的种类 父组件向子组件的通信 子组件向父组件的通信 隔代组件之间的通信 兄弟 组件 之间的通信 二.实现通信的方式  props vue自定义的事件 消息订阅与发布 vuex sl ...

  3. Vue中组件间通信的方式

    Vue中组件间通信的方式 Vue中组件间通信包括父子组件.兄弟组件.隔代组件之间通信. props $emit 这种组件通信的方式是我们运用的非常多的一种,props以单向数据流的形式可以很好的完成父 ...

  4. Vue中组件化编码使用(实战练习一)

    Vue中组件化编码的大致流程(初接触).组件之间的参数传递(最基础的形式).组件之间的配合完成一个需求 1.在Vue中进行组件化编码 1.1.组件化编码流程: (1).拆分静态组件:组件要按照功能点拆 ...

  5. Vue中组件之间的通信方式

    vue是数据驱动视图更新的框架, 所以对于vue来说组件间的数据通信非常重要,那么组件之间如何进行数据通信的呢? 本文会介绍组件间通信的8种方式如下图所示, 并介绍在不同的场景下如何选择有效方式实现的 ...

  6. 038——VUE中组件之WEB开发中组件使用场景与定义组件的方式

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. Vue中组件化编码使用、实现组件之间的参数传递(实战练习二)

    上一章节实现的是静态页面的设计.这一章节实现将数据抽取出来.通过组件间参数的传递来实现 上一章节链接地址:https://blog.csdn.net/weixin_43304253/article/d ...

  8. vue中组件的四种方法总结

    希望对大家有用 全局组件的第一种写法 html: <div id = "app"> <show></show></div> js: ...

  9. vue中组件之间的相互调用,及通用后台管理系统左侧菜单树的迭代生成

    由于本人近期开始学习使用vue搭建一个后端管理系统的前端项目,在左侧生成菜单树的时候遇到了一些问题.在这里记录下 分析:由于本人设定的菜单可以使多级结构,直接使用vue的v-for 遍历并不是很方便. ...

随机推荐

  1. AndroidStudio 中查看获取MD5和SHA1值以及如何查看手机应用信息以及读取*.db数据库里面数据

    查看获取MD5和SHA1值具体操作方式链接 查看获取MD5和SHA1值实际操作命令CMD语句: C:\Users\Administrator>cd .android C:\Users\Admin ...

  2. scpclient使用报错fchmod无法找到问题解决

    因为这个函数时linux下专用的,Windows下无法使用,所以会导致提示这个函数不能使用,解决的方法如下: 1. import platform 2. if platform.system() == ...

  3. Hibernate学习笔记三:常用数据库操作语句

    转载请注明原文地址: 一:HQL 1:HQL语句格式:select from POJO类名 where 条件表达式 group by 属性 having 聚集函数 order by 属性 [其中,fr ...

  4. UML - EA 序列图

    序列图中的 Fragment 的类型(Loop.Opt.Par和Alt) (还有: ) 序列图主要用于展示对象之间交互的顺序. 序列图将交互关系表示为一个二维图.纵向是时间轴,时间沿竖线向下延伸.横向 ...

  5. ISO七层协议

    1 OSI参考模型 谈到网络不能不谈OSI参考模型,虽然OSI参考模型的实际应用意义不是很大,但其的确对于理解网络协议内部的运作很有帮助,也为我们学习网络协议提供了一个很好的参考.在现实网络世界里,T ...

  6. 51单片机和Arduino—闪烁灯实现

        技术:51单片机学习.Keil4环境安装.Arduino环境安装.闪烁灯教程   概述 本文提供51单片机.Arduino单片机入门软件安装和一些需要使用的软件介绍,为后续单片机.嵌入式开发做 ...

  7. Jqeury Mobile实战之切屏效果以及屏幕滚动到底端加载更多和点击切换更多

    http://blog.csdn.net/q718330882/article/details/46120691 //页面滚动到底部加载更多事件 $( window ).scroll(function ...

  8. windows下配置ssh访问github

    一.说明 一直使用HTTPS的方式访问github的代码,用的时间长了,发现这是效率很低的一种开发行为,因为每次git push的时候都要输入username和password.今天就介绍如何在win ...

  9. Easyui实用视频教程系列---Tree点击打开tab页面

    Easyui实用视频教程系列---Tree点击打开tab页面 首先 我们 要搭建环境 easyui 环境 然后 把tree 给创建出来 在某个位置 粘贴 下面代码 <ul id="tt ...

  10. perf之record

    如果CPU的使用率突然暴涨,如何迅速定位是哪个进程.哪段代码引起的呢?我们需要一个profiling工具,对CPU上执行的代码进行采样.统计,告诉我们CPU到底在忙些什么. perf 就是这样的工具. ...