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程序 入门者学习
Jul 09 Javascript
jQuery源码解读之addClass()方法分析
Feb 20 Javascript
AngularJS使用angular-formly进行表单验证
Dec 27 Javascript
jqueryMobile使用示例分享
Jan 12 Javascript
Angular 通过注入 $location 获取与修改当前页面URL的实例
May 31 Javascript
js实现本地时间同步功能
Aug 26 Javascript
vue加载自定义的js文件方法
Mar 13 Javascript
javascript少儿编程关于返回值的函数内容
May 27 Javascript
Vue render渲染时间戳转时间,时间转时间戳及渲染进度条效果
Jul 27 Javascript
微信小程序获取地理位置及经纬度授权代码实例
Sep 18 Javascript
vue表单数据交互提交演示教程
Nov 13 Javascript
微信小程序获取当前位置和城市名
Nov 13 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中使用Oracle数据库(1)
2006/10/09 PHP
我的论坛源代码(八)
2006/10/09 PHP
PHP 年龄计算函数(精确到天)
2012/06/07 PHP
Thinkphp中的curd应用实用要点
2015/01/04 PHP
PHP内存缓存功能memcached示例
2016/10/19 PHP
尝试在让script的type属性等于text/html
2013/01/15 Javascript
关于在IE下的一个安全BUG --可用于跟踪用户的系统鼠标位置
2013/04/17 Javascript
jquery实现的一个导航滚动效果具体代码
2013/05/27 Javascript
AngularJS入门教程之学习环境搭建
2014/12/06 Javascript
jQuery插件bgStretcher.js实现全屏背景特效
2015/06/05 Javascript
Node.js自定义实现文件路由功能
2017/09/22 Javascript
sublime text 3配置使用python操作方法
2017/06/11 Python
python做反被爬保护的方法
2019/07/01 Python
python django 原生sql 获取数据的例子
2019/08/14 Python
python读取raw binary图片并提取统计信息的实例
2020/01/09 Python
python3.8.1+selenium实现登录滑块验证功能
2020/05/22 Python
浅谈Python中的生成器和迭代器
2020/06/19 Python
python代码能做成软件吗
2020/07/24 Python
利用python+request通过接口实现人员通行记录上传功能
2021/01/13 Python
John Hardy官方网站:手工设计首饰的奢侈品牌
2017/07/05 全球购物
优瑞自动咖啡机官网:Jura
2018/09/29 全球购物
丝绸和人造花卉、植物和树木:Nearly Natural
2018/11/28 全球购物
维多利亚的秘密阿联酋官网:Victoria’s Secret阿联酋
2019/12/07 全球购物
常见的软件开发流程有哪些
2015/11/14 面试题
护士自荐信范文
2013/12/15 职场文书
2013年学期结束动员演讲稿
2014/01/07 职场文书
优秀求职信范文分享
2014/01/26 职场文书
学习雷锋做美德少年寄语大全
2014/04/09 职场文书
人力资源管理专业应届生求职信
2014/04/24 职场文书
国际贸易毕业生求职信
2014/07/20 职场文书
总经理助理岗位职责范本
2014/07/20 职场文书
员工年终自我评价
2014/09/14 职场文书
普通党员四风问题对照检查材料
2014/09/27 职场文书
工会2014法制宣传日活动总结
2014/11/01 职场文书
营业员岗位职责范本
2015/04/14 职场文书
Python中time标准库的使用教程
2022/04/13 Python