vue中各组件之间传递数据的方法示例


Posted in Javascript onJuly 27, 2017

前言

本文主要给大家介绍了关于vue组件之间传递数据的相关资料,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍:

作用域

在vue中,组件实例的作用域是孤立的,父组件模板的内容在父组件作用域内编译;子组件模板的内容在子组件作用域内编译。这意味着不能 (也不应该) 在子组件的模板内直接引用父组件的数据。

下面几种方法可以实现组件之间数据的传递。

一、通过prop传递数据

1)在子组件中,使用prop属性,显示的表明,它所需要的数据。

2)在父组件中,需要引用子组件的地方,传入数据。

具体看下面的代码:

<div id="app">
<my-item :value="value">//传入数据,注意引号里面的为父组件的数据,
</my-item>
</div>  
Vue.component("my-item",{
 template:"<div>这是组件,{{value}}</div>",
 props:["value"],//声明需要的数据,HTML 特性是不区分大小写的,所以此处如果为驼峰命名法,如:myMessage,则在模板中需要转化为用断线隔开的形式:my-Message
 data:function(){
  return {

  }
 },
 methods:{
  
 }
});

//创建vue实例
const vm=new Vue({
 el:"#app",
 data:{
  value:"这是父组件的数据",
 },
 methods:{
 
 },
});

这种方法适合父组件向子组件传递数据,可以记为:你先告诉我要什么,然后我给你什么。

注意:这种方式是单向数据流,当父组件的属性变化时,将传导给子组件,但是不会反过来。当你想改变prop中数据时,可采用如下方法:定义一个局部变量,并用 prop 的值初始化它,或者使用计算属性。

二、通过自定义事件

自定义事件可以实现子组件向父组件传递数据,具体方法如下:

1)在子组件中使用$emit(eventName,[...args])触发事件,传递数据

2)在父组件中$on(eventName,callback)监听事件,接受数据作为回调函数的参数,并执行回调函数。

其实这种方法和angular中控制器之间传递数据的有点类似的。注意触发和监听事件的事件类型必须要保持一致,才可接受导数据。具体看下面的例子:

<div id="app">
{{number}}
<!-- 在用到子组件的地方监听,监听当前实例上的自定义事件 ,接受参数,并执行回调-->
<my-item v-on:cli="totlcli">
</my-item>
</div>

Vue.component("my-item",{
template:"<button v-on:click='add'>{{count}}</button>",
data:function(){
 return {
  count : 0,
 }
},
methods:{
 add:function(){
  this.count+=1;
  this.$emit("cli",this.count);//触发当前实例上的事件。多个参数可以数组的形式传递
 }
}
});

//创建vue实例
const vm=new Vue({
el:"#app",
data:{
 number:""
},
methods:{
 totlcli:function(num){//这个回调在父组件监听到事件时,执行的,其参数为触发事件时传递的。
  return this.number=num;
 },
},
});

这样就可以把子组件中的数据通过自定义事件的方式传到了父组件。

三、使用slot分发内容

主要应用场景是,混合父组件的内容与子组件自己的模板时用到。具体使用步骤:

1)在子组件中,使用slot标签作为组件模板之中的内容分发插槽。 <slot> 元素自身将被替换。

2)在父组件中,使用slot属性,用于标记往哪个slot中插入子组件内容。

当name相同时,响应的内容就会被插入到子组件中去
具体看下面的例子:

<div id="app">
 <my-item>
  <p slot="header">这是头部</p>
  <p>这是多余的内容,</p>
  <p slot="footer">这是尾部</p>
 </my-item>
</div>

Vue.component("my-item",{
  template:"<div>"+
    "<header><slot name='header'></slot></header>"+
    "<main><slot>备用插槽,当没有备用内容会显示出来</slot></main>"+
    "<footer><slot name='footer'></slot></footer>"+
    "<div>",
  props:{
  },
  data:function(){
   return {   
   }
  }
 });
 const vm=new Vue({
  el:"#app",
  data:{
  },
  methods:{ 
  },
 });

渲染结构如下:

vue中各组件之间传递数据的方法示例

注意:匿名(没用name属性)的slot元素,作为找不到匹配的内容片段的备用插槽,即在父组件中没有使用slot属性的内容会在这个备用插槽显示。如果没有默认的 slot,这些找不到匹配的内容片段将被抛弃。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
jQuery的Ajax时无响应数据的解决方法
May 25 Javascript
js取消单选按钮选中并判断对象是否为空
Nov 14 Javascript
JS将所有对象s的属性复制给对象r(原生js+jquery)
Jan 25 Javascript
jquery form 隐藏的input 选择
Apr 29 Javascript
node.js中的fs.lchown方法使用说明
Dec 16 Javascript
生成二维码方法汇总
Dec 26 Javascript
Javascript之Number对象介绍
Jun 07 Javascript
bootstrap 下拉多选框进行多选传值问题代码分析
Feb 14 Javascript
Vue入门之数据绑定(小结)
Jan 08 Javascript
详解node child_process模块学习笔记
Jan 24 Javascript
node中的密码安全(加密)
Sep 17 Javascript
Vue在 Nuxt.js 中重定向 404 页面的方法
Apr 23 Javascript
微信小程序 页面跳转传值实现代码
Jul 27 #Javascript
JS实现按钮控制计时开始和停止功能
Jul 27 #Javascript
关于JavaScript中forEach和each用法浅析
Jul 27 #Javascript
Easyui使用Dialog行内按钮布局的实例
Jul 27 #Javascript
easyui datagrid 表格中操作栏 按钮图标不显示的解决方法
Jul 27 #Javascript
js实现日期显示的一些操作(实例讲解)
Jul 27 #Javascript
Angular通过angular-cli来搭建web前端项目的方法
Jul 27 #Javascript
You might like
PHP 和 HTML
2006/10/09 PHP
php中socket的用法详解
2014/10/24 PHP
PHP文件上传操作实例详解
2016/09/27 PHP
php基于Redis消息队列实现的消息推送的方法
2018/11/28 PHP
浅谈checkbox的一些操作(实战经验)
2013/11/20 Javascript
js图片延迟技术一般的思路与示例
2014/03/20 Javascript
jQuery学习笔记之总体架构
2014/06/03 Javascript
Nodejs sublime text 3安装与配置
2014/06/19 NodeJs
angularJS 中$attrs方法使用指南
2015/02/09 Javascript
jQuery基于ajax实现星星评论代码
2015/08/07 Javascript
原生js实现类似fullpage的单页/全屏滚动
2017/01/22 Javascript
如何获取元素的最终background-color
2017/02/06 Javascript
nodejs Assert中equal(),strictEqual(),deepEqual(),strictDeepEqual()比较
2017/09/18 NodeJs
js实现全选和全不选功能
2020/07/28 Javascript
vue 使用微信jssdk,调用微信相册上传图片功能
2020/11/13 Javascript
[01:24:34]2014 DOTA2华西杯精英邀请赛5 24 DK VS LGD
2014/05/25 DOTA
[54:25]Ti4 循环赛第三日LGD vs MOUZ
2014/07/12 DOTA
Python 条件判断的缩写方法
2008/09/06 Python
python抓取网页图片并放到指定文件夹
2014/04/24 Python
在Python中用has_key()方法查找键是否存在的教程
2015/05/21 Python
用python处理图片实现图像中的像素访问
2018/05/04 Python
elasticsearch python 查询的两种方法
2019/08/04 Python
python matplotlib折线图样式实现过程
2019/11/04 Python
css3中用animation的steps属性制作帧动画
2019/04/25 HTML / CSS
一站式跨境收款解决方案:Payoneer(派安盈)
2018/09/06 全球购物
英国办公家具网站:Furniture At Work
2019/10/07 全球购物
数据库基础的一些面试题
2012/02/25 面试题
爱情保证书大全
2014/04/29 职场文书
小学美术兴趣小组活动总结
2014/07/07 职场文书
2014年“四风”问题个人整改措施
2014/09/17 职场文书
平安家庭事迹材料
2014/12/20 职场文书
教师工作决心书
2015/02/04 职场文书
停电调休通知
2015/04/16 职场文书
运动会开幕式主持词
2015/07/01 职场文书
2015年中学体育教师工作总结
2015/10/23 职场文书
小学教师教学反思
2016/02/24 职场文书