vue父子组件的数据传递示例


Posted in Javascript onMarch 07, 2017

1.父组件向子组件传递数据

<div id="box">
  <aaa></aaa>
</div>
<template id="aaa">
  <h1>模板aaa=>{{msg1}}</h1>  //msg1写在这里是可以的,因为这是父组件内部
  //<bbb>{{msg1}}</bbb>     //这种写法是不可以的,这是在子组件内部,要在这里显示父组件的数
                //据,需要用props定义属性
  <bbb :m='msg1'></bbb>
</template>
var vm=new Vue({
  el:"#box",
  data () {
    a:'aaa'
  },
  components:{
    'aaa':{
      data () {
        msg1:'父组件的数据'
      },
      template:'#aaa',
      components:{
        'bbb':{
        // props:['m'],    //这是一种写法,props以数组的形式定义属性
        props:{
          'm':String      //这是第二种写法,对象的形式
        },
          template:'<h3>这是子组件bbb--{{m}}</h3>'
        }
      }
    },
  }
})

从这个例子中可以看出,父组件向子组件传递数据,因为每一个组件都是独立的作用域,所以要把父组件的数据在子组件中显示,要使用props定义属性来绑定父组件里面的数据才可以,如这里父组件的数据是msg1,用props定义一个属性m,来接收数据msg1;在子组件的模板里面用{{m}}的形式显示父组件的数据

父组件不仅可以向子组件传递数据,也可以传递方法,如:

<edit-issue :title='issueTitle' :is-show.sync='modelIssue' :model-type.sync='modeltype' :issue-datas='listdb' :user.sync='users' :projects="projectDatas" :get-datas="getCreateIssues" :localtoken="localtokenId" :user-    name="userName" :token-data="tokendata">
</edit-issue>

这是一个子组件,引用在父组件中,其中的 :get-datas=”getCreateIssues” 接收的是一个方法,这个方法在父组件中从后台获取数据传递给子组件,在子组件中就可以展示这些数据,

methods:{
  getCreateIssues(){        //这是es6的格式
    this.$http.get(url,data).then(res=>{}) //这也是es6的格式
  }
}

在子组件中

 props:['executorsData','isShow','modelType','issueDatas','user','projects','title','getDatas','getEditData','localtoken',"userName","tokenData"],

getDatas就是从父组件中接收数据的方法,对应上面的 :get-datas=”getCreateIssues”,在子组件可以直接使用getDatas这个方法,如:

methods:{
  okConfirm(){
      issueApi.delIssue(this.delId).then(res=>{
        if(res.data.code==0){
          this.successPop('删除成功');
          this.openConfirm=false;
          this.isShow=false;
          //这里就是使用的父组件的方法
          this.getDatas();    
          //end
          this.$dispatch('fetchList');
        }else{
          this.warningPop(res.data.message)
        }
      })
    },
}

2.子组件向父组件传递数据

vue父子组件的数据传递示例

在子组件中选择条件后,在父组件中执行搜索功能

<div class="task-btn">
  <p @click="clear()">清空</p>
  <p @click="confirm(modalData)">搜索</p>
  //modalData是需要向后台发送的数据
</div>
export default{
  props:['confirm'],
  data(){
    return {
      modalData:{ProjVerName:''}     
    }
  }
}

定义一个confirm方法接收父组件中的方法,这里从子组件向父组件传递数据不是按照教程上的方法使用$emit,而是直接把数据作为参数传递到方法中,在父组件中这样使用:

<issuesearch :confirm="search" :showtotal.sync="showtotal" :is-re-get.sync="isReGet" :type="chosenType">
 </issuesearc>
data(){
  return {
    searchData:{
      ProjVerName:'',
    }
  }
},
methods:{
  search(data){   //data就是接收子组件传递过来的数据的形参
    this.searchData.ProjVerName=data.ProjVerName;
    this.$http.get(url,this.searchData.ProjVerName).then(res=>{
    console.log(res)
})
  }
}

这种方法就是从子组件向父组件传递数据,

从子组件向父组件传递方法,需要使用$dispatch,如:

vue父子组件的数据传递示例 

在子组件中点击保存以后,这个弹出框消失,父组件中需要获取一遍最新数据,这种情况就需要把这个保存事件发送出去,让父组件知道,用法:

<div class="creator-btn fr margintop" @click="save()" v-if="(modelType=='edit')&&(issueDatas.state!==5)">保存</div>
methods:{
  save (){
    this.$http.post(url,data).then(res=>{
      console.log('保存成功');
      this.$route.router.go({
        name:'issues.issueList'
      });  //保存完以后跳转到对应的路由
      this.$dispatch('disSave')  //这里把保存事件发送出去
    })
  }
}

在父组件中使用events来接收这个事件,并执行一些动作,如:

events:{
 disSave(){  //这就是接收的子组件的方法
   this.getCreateIssues(); //接收完以后调用一个方法获取一遍数据,这样就实现了在子组件中点击保存后,父组件能直接获取到最新的数据
 }
},

关于子组件向父组件传递数据也可以使用教程里的方法,使用$emit

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
将jQuery应用于login页面的问题及解决
Oct 17 Javascript
js或css实现滚动广告的几种方案
Jan 28 Javascript
myeclipse安装jQuery插件的方法
Mar 29 Javascript
jquery获得页面元素的坐标值实现思路及代码
Apr 15 Javascript
jquery zTree异步加载简单实例讲解
Feb 25 Javascript
一句jQuery代码实现返回顶部效果(简单实用)
Dec 28 Javascript
老生常谈jquery中detach()和remove()的区别
Mar 02 Javascript
webpack构建的详细流程探底
Jan 08 Javascript
Vue不能观察到数组length的变化
Jun 08 Javascript
Vue项目添加动态浏览器头部title的方法
Jul 11 Javascript
基于vue如何发布一个npm包的方法步骤
May 15 Javascript
Vue微信公众号网页分享的示例代码
May 28 Javascript
完美实现js焦点轮播效果(二)(图片可滚动)
Mar 07 #Javascript
完美实现js焦点轮播效果(一)
Mar 07 #Javascript
Vue2.0组件间数据传递示例
Mar 07 #Javascript
js实现网页定位导航功能
Mar 07 #Javascript
Vuejs 组件——props数据传递的实例代码
Mar 07 #Javascript
js实现百度登录框鼠标拖拽效果
Mar 07 #Javascript
Vue获取DOM元素样式和样式更改示例
Mar 07 #Javascript
You might like
黑夜路人出的几道php笔试题
2009/08/04 PHP
php查找任何页面上的所有链接的方法
2013/12/03 PHP
PHP自定义错误处理的方法分析
2018/12/19 PHP
Laravel框架基于ajax和layer.js实现无刷新删除功能示例
2019/01/17 PHP
PHP 模拟登陆功能实例详解
2019/09/10 PHP
php高性能日志系统 seaslog 的安装与使用方法分析
2020/02/29 PHP
基于Web标准的UI组件 — 树状菜单(2)
2006/09/18 Javascript
jQuery Ajax之load()方法
2009/10/12 Javascript
JQuery select标签操作代码段
2010/05/16 Javascript
构造函数+原型模式构造js自定义对象(最通用)
2014/05/12 Javascript
限制上传文件大小和格式的jQuery插件实例
2015/01/24 Javascript
jQuery中trigger()与bind()用法分析
2015/12/18 Javascript
微信小程序 轮播图swiper详解及实例(源码下载)
2017/01/11 Javascript
基于Node.js实现压缩和解压缩的方法
2018/02/13 Javascript
还不懂递归?读完这篇文章保证你会懂
2018/07/29 Javascript
JS实现马赛克图片效果完整示例
2019/04/13 Javascript
Vue使用Canvas绘制图片、矩形、线条、文字,下载图片
2019/04/26 Javascript
ES6 Proxy实现Vue的变化检测问题
2019/06/11 Javascript
JS/CSS实现字符串单词首字母大写功能
2019/09/03 Javascript
layui按条件隐藏表格列的实例
2019/09/19 Javascript
Python基本socket通信控制操作示例
2019/01/30 Python
在linux系统下安装python librtmp包的实现方法
2019/07/22 Python
浅谈图像处理中掩膜(mask)的意义
2020/02/19 Python
Django serializer优化类视图的实现示例
2020/07/16 Python
python如何导出微信公众号文章方法详解
2020/08/31 Python
HTML5在微信内置浏览器下右上角菜单的调整字体导致页面显示错乱的问题
2021/01/19 HTML / CSS
澳大利亚在线床零售商:Bedworks
2020/09/01 全球购物
网络编辑岗位职责
2014/03/18 职场文书
乡镇消防安全责任书
2014/07/23 职场文书
卖车协议书范本4篇
2014/10/01 职场文书
售后前台接待岗位职责
2015/04/03 职场文书
百年孤独读书笔记
2015/06/29 职场文书
2015小学音乐教师个人工作总结
2015/07/21 职场文书
Python数据分析入门之数据读取与存储
2021/05/13 Python
MySQL单表千万级数据处理的思路分享
2021/06/05 MySQL
教你使用Ubuntu搭建DNS服务器
2022/09/23 Servers