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 相关文章推荐
Node.js中使用Log.io在浏览器中实时监控日志(等同tail -f命令)
Sep 17 Javascript
jQuery提示效果代码分享
Nov 20 Javascript
Javascript中的getUTCHours()方法使用详解
Jun 10 Javascript
jQuery基于json与cookie实现购物车的方法
Apr 15 Javascript
浅析JS异步加载进度条
May 05 Javascript
微信小程序模板之分页滑动栏
Feb 10 Javascript
使用get方式提交表单在地址栏里面不显示提交信息
Feb 21 Javascript
js的函数的按值传递参数(实例讲解)
Nov 16 Javascript
JS实现去除数组中重复json的方法示例
Dec 21 Javascript
动态加载、移除js/css文件的示例代码
Mar 20 Javascript
详解vue 项目白屏解决方案
Oct 31 Javascript
Vue基于iview实现登录密码的显示与隐藏功能
Mar 06 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
MOTOROLA 摩托罗拉 MODEL 66-XI五灯中波收音机
2021/03/02 无线电
php封装的连接Mysql类及用法分析
2015/12/10 PHP
PHP编程之设置apache虚拟目录
2016/07/08 PHP
php连接微软MSSQL(sql server)完全攻略
2016/11/27 PHP
实例讲解PHP页面静态化
2018/02/05 PHP
php微信开发之关注事件
2018/06/14 PHP
php数组指针函数功能及用法示例
2020/02/11 PHP
Alliance vs Liquid BO3 第二场2.13
2021/03/10 DOTA
用YUI做了个标签浏览效果
2007/02/20 Javascript
JavaScript Chart 插件整理
2010/06/18 Javascript
文本框输入时 实现自动提示(像百度、google一样)
2012/04/05 Javascript
jQuery实现 注册时选择阅读条款 左右移动
2013/04/11 Javascript
纯javascript实现图片延时加载方法
2015/08/21 Javascript
JS平滑无缝滚动效果的实现代码
2016/05/06 Javascript
js 获取当前web应用的上下文路径实现方法
2016/08/19 Javascript
js仿百度音乐全选操作
2017/01/13 Javascript
微信小程序 页面跳转和数据传递实例详解
2017/01/19 Javascript
jQuery弹出窗口简单实现代码
2017/03/09 Javascript
详解NodeJS框架express的路径映射(路由)功能及控制
2017/03/24 NodeJs
借助node实战JSONP跨域实例
2017/03/30 Javascript
详解.vue文件中style标签的几个标识符
2018/07/17 Javascript
angular将html代码输出为内容的实例
2018/09/30 Javascript
layer 刷新某个页面的实现方法
2019/09/05 Javascript
python模拟登录百度贴吧(百度贴吧登录)实例
2013/12/18 Python
在centos7中分布式部署pyspider
2017/05/03 Python
Selenium鼠标与键盘事件常用操作方法示例
2018/08/13 Python
python简单验证码识别的实现方法
2019/05/10 Python
解决Python内层for循环如何break出外层的循环的问题
2019/06/24 Python
使用celery和Django处理异步任务的流程分析
2020/02/19 Python
Python自动登录QQ的实现示例
2020/08/28 Python
Python 打印自己设计的字体的实例讲解
2021/01/04 Python
html5视频自动横过来自适应页面且点击播放功能的实现
2020/06/03 HTML / CSS
中国网上药店领导者:1药网
2017/02/16 全球购物
党员承诺书怎么写
2014/05/20 职场文书
车间核算员岗位职责
2014/07/01 职场文书
中国梦团日活动总结
2014/07/07 职场文书