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 相关文章推荐
js 关于=+与+=日期函数使用说明(赋值运算符)
Nov 15 Javascript
用jQuery实现一些导航条切换,显示隐藏的实例代码
Jun 08 Javascript
css结合js制作下拉菜单示例代码
Feb 27 Javascript
javascript监听鼠标滚轮事件浅析
Jun 05 Javascript
常用的jquery模板插件——jQuery Boilerplate介绍
Sep 23 Javascript
javascript中HTMLDOM操作详解
Dec 11 Javascript
AngularJS入门教程之Helloworld示例
Dec 25 Javascript
js实现消息滚动效果
Jan 18 Javascript
JavaScript 实现 Tab 点击切换实例代码
Mar 25 Javascript
文本溢出插件jquery.dotdotdot.js使用方法详解
Jun 22 jQuery
JS设计模式之状态模式概念与用法分析
Feb 05 Javascript
vue如何实现关闭对话框后刷新列表
Apr 08 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利用hash冲突漏洞进行DDoS攻击的方法分析
2015/03/26 PHP
Joomla语言翻译类Jtext用法分析
2016/05/05 PHP
浅谈ThinkPHP5.0版本和ThinkPHP3.2版本的区别
2017/06/17 PHP
php redis setnx分布式锁简单原理解析
2020/10/23 PHP
关于实现代码语法标亮 dp.SyntaxHighlighter
2007/02/02 Javascript
JSON 学习之JSON in JavaScript详细使用说明
2010/02/23 Javascript
关于jQuery新的事件绑定机制on()的使用技巧
2013/04/26 Javascript
用Javascript获取页面元素的具体位置
2013/12/09 Javascript
JavaScript阻止事件冒泡示例分享
2014/12/28 Javascript
js中this的用法实例分析
2015/01/10 Javascript
自己动手手写jQuery插件总结
2015/01/20 Javascript
Bootstrap Modal遮罩弹出层代码分享
2016/11/21 Javascript
如何提高javascript加载速度
2016/12/26 Javascript
TypeScript入门-基本数据类型
2017/03/28 Javascript
es6学习笔记之Async函数基本教程
2017/05/11 Javascript
Node 代理访问的实现
2019/09/19 Javascript
JS控制GIF图片的停止与显示
2019/10/24 Javascript
ES6学习笔记之字符串、数组、对象、函数新增知识点实例分析
2020/01/22 Javascript
原生JS实现九宫格抽奖
2020/09/13 Javascript
python数据处理 根据颜色对图片进行分类的方法
2018/12/08 Python
解决pycharm的Python console不能调试当前程序的问题
2019/01/20 Python
Pytorch在dataloader类中设置shuffle的随机数种子方式
2020/01/14 Python
Python标准库json模块和pickle模块使用详解
2020/03/10 Python
Qoo10台湾站:亚洲领先的在线市场
2018/05/15 全球购物
法国在线药房:1001Pharmacies
2021/03/07 全球购物
转让协议书范本
2014/09/13 职场文书
群众路线领导干部个人对照检查材料(集锦)
2014/09/23 职场文书
2014年教育教学工作总结
2014/11/13 职场文书
单位接收函格式
2015/01/30 职场文书
校友回访母校寄语
2015/02/26 职场文书
英语导游欢迎词
2015/09/30 职场文书
导游词之太行山青龙峡
2020/01/14 职场文书
Golang 使用Map实现去重与set的功能操作
2021/04/29 Golang
Python内置的数据类型及使用方法
2022/04/13 Python
Apache Hudi 加速传统的批处理模式
2022/04/24 Servers
Java由浅入深通关抽象类与接口(上篇)
2022/04/26 Java/Android