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 相关文章推荐
封装好的省市地区联动控件附下载
Aug 13 Javascript
半角全角相互转换的js函数
Oct 16 Javascript
js通过元素class名字获取元素集合的具体实现
Jan 06 Javascript
js图片卷帘门导航菜单特效代码分享
Sep 10 Javascript
JavaScript数组的一些奇葩行为
Jan 25 Javascript
jQuery 获取屏幕高度、宽度的简单实现案例
May 17 Javascript
移动端滑动插件Swipe教程
Oct 16 Javascript
BootStrap selectpicker后台动态绑定数据的方法
Jul 28 Javascript
vue+echarts实现动态绘制图表及异步加载数据的方法
Oct 17 Javascript
详解如何使用webpack打包多页jquery项目
Feb 01 jQuery
javascript面向对象程序设计实践常用知识点总结
Jul 29 Javascript
vue实现拖拽进度条
Mar 01 Vue.js
完美实现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模拟SQL Server的两个日期处理函数
2006/10/09 PHP
wordpress之wp-settings.php
2007/08/17 PHP
用javascript动态调整iframe高度的方法
2007/03/06 Javascript
JS鼠标事件大全 推荐收藏
2011/11/01 Javascript
[JSF]使用DataModel处理表行事件的实例代码
2013/08/05 Javascript
代码触发js事件(click、change)示例应用
2013/12/13 Javascript
用js代码改变单选框选中状态的简单实例
2013/12/18 Javascript
js图片卷帘门导航菜单特效代码分享
2015/09/10 Javascript
javascript实现动态统计图开发实例
2015/11/21 Javascript
自制微信公众号一键排版工具
2016/09/22 Javascript
easyui关于validatebox实现多重规则验证的方法(必看)
2017/04/12 Javascript
jQuery zTree树插件动态加载实例代码
2017/05/11 jQuery
Angular.js ng-file-upload结合springMVC的使用教程
2017/07/10 Javascript
vue 路由懒加载中给 Webpack Chunks 命名的方法
2020/04/24 Javascript
JavaScript Window浏览器对象模型原理解析
2020/05/30 Javascript
Vue Render函数原理及代码实例解析
2020/07/30 Javascript
jQuery实现可以计算进制转换的计算器
2020/10/19 jQuery
vue3+typescript实现图片懒加载插件
2020/10/26 Javascript
vue项目中使用rem,在入口文件添加内容操作
2020/11/11 Javascript
JavaScript canvas实现跟随鼠标移动小球
2021/02/09 Javascript
使用PyV8在Python爬虫中执行js代码
2017/02/16 Python
Python 十六进制整数与ASCii编码字符串相互转换方法
2018/07/09 Python
Django如何使用第三方服务发送电子邮件
2019/08/14 Python
NumPy统计函数的实现方法
2020/01/21 Python
浅谈Python 参数与变量
2020/06/20 Python
解决Pymongo insert时会自动添加_id的问题
2020/12/05 Python
Python爬虫scrapy框架Cookie池(微博Cookie池)的使用
2021/01/13 Python
全球速卖通法国在线交易平台:AliExpress法国
2017/07/07 全球购物
SISLEY希思黎官方旗舰店:享誉全球的奢华植物美容品牌
2018/04/25 全球购物
意大利时尚奢侈品店:D’Aniello Boutique
2021/01/19 全球购物
家长给老师的道歉信
2014/01/13 职场文书
2014标准社保办理委托书
2014/10/06 职场文书
2015年幼儿园安全工作总结
2015/05/12 职场文书
2016年班主任新年寄语
2015/08/18 职场文书
导游词之平津战役纪念馆
2019/11/04 职场文书
Python实现批量将文件复制到新的目录中再修改名称
2022/04/12 Python