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 相关文章推荐
Javascript 异步加载详解(浏览器在javascript的加载方式)
May 20 Javascript
两种JS实现屏蔽鼠标右键的方法
Aug 20 Javascript
JS加载器如何动态加载外部js文件
May 26 Javascript
全面理解闭包机制
Jul 11 Javascript
基于jQuery实现弹出可关闭遮罩提示框实例代码
Jul 18 Javascript
利用Node.js编写跨平台的spawn语句详解
Feb 12 Javascript
用原生JS实现简单的多选框功能
Jun 12 Javascript
JavaScript解析任意形式的json树型结构展示
Jul 23 Javascript
微信小程序canvas开发水果老虎机的思路详解
Feb 07 Javascript
在HTML中使用JavaScript的两种方法
Dec 24 Javascript
Vue详细的入门笔记
May 10 Vue.js
node.js如何自定义实现一个EventEmitter
Jul 16 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
gd库图片下载类实现下载网页所有图片的php代码
2012/08/20 PHP
PHP 解决session死锁的方法
2013/06/20 PHP
PHP7 标准库修改
2021/03/09 PHP
js select常用操作控制代码
2010/03/16 Javascript
jquery $.ajax各个事件执行顺序
2010/10/15 Javascript
40个新鲜出炉的jQuery 插件和免费教程[上]
2012/07/24 Javascript
javascript内置对象操作详解
2015/02/04 Javascript
js实现防止被iframe的方法
2015/07/03 Javascript
Vuejs第十篇之vuejs父子组件通信
2016/09/06 Javascript
Angular.js中上传指令ng-upload的基本使用教程
2017/07/30 Javascript
JQuery中queue方法用法示例
2019/01/31 jQuery
深入了解JavaScript 的 WebAssembly
2019/06/15 Javascript
OpenLayers3加载常用控件使用方法详解
2020/09/25 Javascript
[08:42]DOTA2每周TOP10 精彩击杀集锦vol.2
2014/06/25 DOTA
Python如何import文件夹下的文件(实现方法)
2017/01/24 Python
python与caffe改变通道顺序的方法
2018/08/04 Python
解决python 无法加载downsample模型的问题
2018/10/25 Python
Python中对数组集进行按行打乱shuffle的方法
2018/11/08 Python
python运行时强制刷新缓冲区的方法
2019/01/14 Python
python write无法写入文件的解决方法
2019/01/23 Python
Python:slice与indices的用法
2019/11/25 Python
使用pycharm和pylint检查python代码规范操作
2020/06/09 Python
Python分析最近大火的网剧《隐秘的角落》
2020/07/02 Python
Python 下载Bing壁纸的示例
2020/09/29 Python
python 实时调取摄像头的示例代码
2020/11/25 Python
Tarte Cosmetics官网:美国最受欢迎的化妆品公司之一
2017/08/24 全球购物
澳大利亚领先的优质葡萄酒拍卖会:Langton’s Fine Wines
2019/03/24 全球购物
罗技英国官方网站:Logitech UK
2020/11/03 全球购物
美国床垫连锁店:Mattress Firm
2021/02/13 全球购物
竞聘自述材料
2014/08/25 职场文书
上课说话检讨书500字
2014/11/01 职场文书
食堂采购员岗位职责
2015/04/03 职场文书
2015年团支部年度工作总结
2015/05/27 职场文书
个人催款函范文
2015/06/24 职场文书
运动会100米加油稿
2015/07/21 职场文书
python区块链持久化和命令行接口实现简版
2022/05/25 Python