vuejs父子组件的数据传递

在vue中,父组件往子组件传递参数都是通过属性的形式来传递的

<div id=‘root‘>
  <counter :count = ‘1‘></counter>
  <counter :count = ‘2‘></counter>
</div>

<script>
var counter = {
  props:[‘count‘],
    template:‘<div>{{count}}</div>‘
  }
  var vm = new Vue({
    el:‘#root‘,
    components:{
      counter: counter
    }
})
</script>

需求,在子组件被点击的时候+1,我们可能会这么写

var counter = {
  props:[‘count‘],
  template:‘<div @click="handleClick">{{count}}</div>‘,
  methods:{
    handleClick:function(){
      this.count ++
    }
  }
}

这个时候页面上看上去是正常的,但是控制台会报错,为什么呢?

vue中有个单向数据流的概念,也就是父组件可以向子组件传递参数,通过属性传,传递的参数可以随便的进行修改,但是反过来,子组件绝对不能去修改父组件传递过来的参数,只能用这个内容,但是不能修改这个内容

之所以vue中有这个单向数据流的概念,原因在于,一旦子组件这个接收的数据并不是基础类型的数据,而是一个引用数据的时候,在子组件改变了数据,又可能接收的这个内容还被其他的组件所使用,这样不仅仅改了自身的数据,还会对其他对组件造成影响,所以vue中有个单向数据流,子组件不能改变父组件传递过来对数据

那么,这里确实要改变这个count的值,现在不让我改,那要怎么实现这个功能呢?

var counter = {
  props:[‘count‘],
  data:function(){
    return {
      number:this.count
    }
  },
  template:‘<div @click="handleClick">{{number}}</div>‘,
  methods:{
    handleClick:function(){
      this.number ++
    }
  }
}

这样实现,将父组件传递过来的参数赋值给子组件的number,再使用子组件自己的数据的时候,是可以进行更改的,而且也不会影响到父组件的数据

子组件如何向父组件传递参数

通过事件触发的方式,$emit

<div id=‘root‘>
  <counter :count = ‘3‘ @change = ‘handleChange‘></counter>
  <counter :count = ‘2‘ @change = ‘handleChange‘></counter>
  <div>{{total}}</div>
</div>

<script>
var counter = {
  props:[‘count‘],
  data:function(){
    return {
      number:this.count
    }
  },
  template:‘<div @click="handleClick">{{number}}</div>‘,
  methods:{
    handleClick:function(){
      this.number += 2;
      this.$emit(‘change‘,2);
    }
  }
}
var vm = new Vue({
  el:‘#root‘,
  data:{
    total:5
  },
  components:{
    counter: counter
  },
  methods:{
    handleChange:function(step){
      this.total += step;
    }
  }
})

原文地址:https://www.cnblogs.com/wzndkj/p/9650398.html

时间: 2024-07-30 10:15:46

vuejs父子组件的数据传递的相关文章

react组件的数据传递

在react中,为了解决html标签构建应用的不足,将公共的功能单独抽离成一个文件作为一个组件,在使用的地方按需引入,既然是组件彼此调用,就会涉及到父子组件的通信,下面主要来总结简单的组件通信. 1,项目准备 在开始组件通信前,先在components中新建两个文件,News.js和Header.js,并在News.js中引用Header.js,然后在App.js中引入News.js. App.js Header.js News.js 2,父组件给子组件传值 要在子组件中获取父组件传递的值,只需

vue.js学习笔记(Vuejs——组件——props数据传递)

①组件实例的作用域: 是孤立的,简单的来说,组件和组件之间,即使有同名属性,值也不共享. <div id="app"> <add></add> <del></del> </div> <script> var vm = new Vue({ el: '#app', components: { "add": { template: "<button>btn:{{btn

自定义父子组件的数据双向绑定实现

数据结构: 流程分析: 新建时,需要在提交表单时获取到子组件的child数据,一般情况下,在提交时,利用this.parent.child=this.$refs.child.child,将child的数据赋值到parent中 修改时,需要从父组件把child对象传递给子组件,在获取parent的信息后,调用this.$refs.child.setData(this.parent.child)将数据传递到子组件中 问题:什么时候调用?(第一次尝试,新建时在提交表单时去拿child的数据,修改时在m

vuejs 父子组件传值实例

如图:需求分析 父组件是页面,显示表格数据,子组件是一个功能和信息栏,主要是添加信息的表单以及记录表格数据条数.子组件如何获取父组件数据条数呢? 使用computed计算数据长度 computed:{ total(){ let THIS=this; let totalList=THIS.todo.length;//获取数据长度 return totalList; }, noFinsh(){ let THIS=this; let count=0; THIS.todo.forEach(item=>{

React和Vue组件间数据传递demo

一.React (一)父组件向子组件传数据 简单的向下传递参数 /* Parent */ class App extends Component { render() { return ( <div className="App"> <Child msg="来自父元素的问候"/> </div> ); } } /* Child */ class Child extends Component { render() { return

Vuejs——组件——props数据传递

父组件向子组件传递: wapper.vue父组件 <template> <div> <input type="text" v-model="msg"> <br> <!-- 将子控件属性inputValue与父组件msg属性绑定 --> <child :inputValue="msg"></child> </div> </template>

Vue2.0组件间数据传递

Vue1.0组件间传递 使用$on()监听事件: 使用$emit()在它上面触发事件: 使用$dispatch()派发事件,事件沿着父链冒泡: 使用$broadcast()广播事件,事件向下传导给所有的后代 Vue2.0后$dispatch(),$broadcast()被弃用,见https://cn.vuejs.org/v2/guide/migration.html#dispatch-和-broadcast-替换 1,父组件向子组件传递场景:Father上一个输入框,根据输入传递到Child组件

vue非父子组件之间值传递

非父子之间通过一个空的vue实例作为事件总线,相当于一个中转站.这个中转站是所有组件都可以看到的,大家通过这个中转站接收和触发事件. import Vue from 'vue' import App from './App' import router from './router' Vue.config.productionTip = false /* eslint-disable no-new */ new Vue({ el: '#app', router, data:{ eventHub:

在vue中通过使用$attrs实现组件之间的数据传递

组件之间传递数据的方式有很多种,之所以有这么多种方式,是为了满足在不同场景不同条件下的使用. 一般有三种方式: 通过 props 的方式向子组件传递(父子组件) vuex 进行状态管理 非父子组件的通信传递 Vue Event Bus,使用Vue的实例,实现事件的监听和发布,实现组件之间的传递 本文介绍的是使用$attrs的方式. 这个api是在2.4版本中添加的,那么为什么要添加这个特性呢? 看看官网是怎么解释的 包含了父作用域中不作为 prop 被识别 (且获取) 的特性绑定 (class