父子组件间的数据传递

vue当中有个单向数据流的概念,也就是:父组件可以向子组件传递/修改参数(通过属性的方式传),但子组件不可以反过来修改父组件传递过来的参数!(因为怕子组件改了父组件引用类型的数据,可能会影响到其他组件)。那怎样解决这个问题?可以复制给子组件自己的变量,然后子组件修改自己的变量啊!
这是父组件向子组件传递数据:

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <script src="./vue.js"></script>
    <!-- <script src="http://cdn.staticfile.org/vue/2.6.10/vue.common.dev.js"></script> -->
</head>
<body>
<div id="root">
    //加了:后引号里的内容就不是字符串了,而是js表达式,所以,就是数字类型了 <br>
    <counter :count="1"></counter>
    <counter :count="2"></counter>
</div>
<script type="text/javascript">
    //父组件是通过属性的方式向子组件传递数据的

    //局部组件,需要注册
    var counter = {
        props: ["count"], //子组件接收父组件传过来的内容
        data: function() {
            return {
                number: this.count //从父组件接收count数据,复制到子组件自己data的变量number里
            }
        },
        /*template: "<div @click=‘handleClick‘>{{count}}</div>",*/

        //既然子组件不应该修改父组件传过来的值,那就修改自己的咯
        template: "<div @click=‘handleClick‘>{{number}}</div>",
        methods: {
            handleClick: function() {
                /*//这种方式虽然可以实现,但会警告:不要直接修改父组件传递过来的属性!
                this.count++ */

                //所以给子组件自己的number++,而不是父组件的count++
                this.number++
            }
        }
    }
    var vm = new Vue({
        el: "#root",
        components: {
            counter: counter
        }
    })
</script>
</body>
</html>

子组件向父组件传递数据:

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <script src="./vue.js"></script>
    <!-- <script src="http://cdn.staticfile.org/vue/2.6.10/vue.common.dev.js"></script> -->
</head>
<body>
<div id="root">
    //加了:后引号里的内容就不是字符串了,而是js表达式,所以,就是数字类型了 <br>
    //这个模版属于根组件,所以handleInc方法也要写在根组件 <br>
    <counter :count="3" @change="handleInc"></counter>
    <counter :count="2" @change="handleInc"></counter>
    <div>{{total}}</div>
</div>
<script type="text/javascript">
    //父组件是通过属性的方式向子组件传递数据的

    //局部组件,需要注册
    var counter = {
        props: ["count"],
        data: function() {
            return {
                number: this.count
            }
        },

        //既然子组件不应该修改父组件传过来的值,那就修改自己的咯
        template: "<div @click=‘handleClick‘>{{number}}</div>",
        methods: {
            handleClick: function() {
                this.number++
                //点击子组件,触发change事件,告诉父组件,自己增加了1(可以自己命名事件,不一定要是change)
                this.$emit("change", 1)
            }
        }
    }
    var vm = new Vue({
        el: "#root",
        components: {
            counter: counter
        },
        data: {
            total: 5
        },
        methods: {
            //接收到子组件中的参数step(这里是this.$emit("change", 1)中的1),参数可以随意命名的,不一定要叫step
            handleInc: function(step) {
                this.total += step
            }
        }
    })
</script>
</body>
</html>

原文地址:https://blog.51cto.com/5660061/2419379

时间: 2024-09-28 16:34:18

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

【重要组件间的数据传递1】如何将BroadcastReceiver中的数据传递给activity

题目描述 使用broadcastreceiver获得android手机的电池电量,并把电量显示到activity中. 技术分析 用接口传.定义一个接口 让 Activity实现这个接口,然后接受者调用接口里面的方法把要传递的参数传进去. 效果 布局文件 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com

【Vue】浅谈Vue不同场景下组件间的数据交流

浅谈Vue不同场景下组件间的数据“交流” Vue的官方文档可以说是很详细了.在我看来,它和react等其他框架文档一样,讲述的方式的更多的是“方法论”,而不是“场景论”,这也就导致了:我们在阅读完文档许多遍后,写起代码还是不免感到有许多困惑,因为我们不知道其中一些知识点的运用场景.这就是我写这篇文章的目的,探讨不同场景下组件间的数据“交流”的Vue实现 父子组件间的数据交流 父子组件间的数据交流可分为两种: 1.父组件传递数据给子组件 2.子组件传递数据给父组件 父组件传递数据给子组件——pro

vue2.0 组件之间的数据传递

组件间的数据传递// 父组件<template><div class="order"><dialog-addpro v-on:closedialog="close" :proinfo="proinfo"></dialog-addpro></div></template><script>import daddpro from '../../daddpro' expo

Vuex 组件之间的数据传递

在 Vue.js 的项目中,如果项目结构简单, 父子组件之间的数据传递可以使用  props 或者 $emit 等方式 http://www.cnblogs.com/wisewrong/p/6266038.html 但是如果是大型项目,很多时候都需要在子组件之间传递数据,使用之前的方式就不太方便.Vue 的状态管理工具 Vuex 完美的解决了这个问题. 一.安装并引入 Vuex 项目结构: 首先使用 npm 安装 Vuex cnpm install vuex -S 然后在 main.js 中引入

react.js从入门到精通(五)——组件之间的数据传递

一.组件之间在静态中的数据传递 从上面的代码我们可以看出,两个组件之间的数据是分离,但如果我们有某种需求,将数据从一个组件传到另一个组件中,该如何实现? 场景设计: 将Home.js中的HomeData传递到MyScreen.js中 import React,{ Component } from 'react' import MyScreen from "./MyScreen"; class Home extends Component { constructor(props) { s

Vue组件注册与数据传递

父子组件创建流程 1.构建父子组件 1.1 全局注册 (1)构建注册子组件 //构建子组件child var child = Vue.extend({ template: '<div>这是子组件</div>' }); //注册名为'child'的组件 Vue.component('child',child); (2)构建注册父组件 //构建父组件parent,在其中嵌套child组件 var parent = Vue.extend({ template: '<div>这

vue的父子组件间传值以及非父子间传值

Vue组件间的传值方式: 父传子 子传父 非父子间传值 1.首先父组件传值给子组件,使用bind绑定属性,然后在子组件用props接收属性值. //父组件 <template> <input type="text" /> <br/> <child :inputValue="inputValue"></child> </template> <script> import child f

C#不同窗体间通信,数据传递

在一个项目中,很多时候都需要在窗体间进行数据传递和通信,最觉见的是父子窗体之间的数据传递,比如登录ID,各个窗体都需要知道.有很多文章都写了这方面的问题,提出很多优秀的方法,鄙人不才,搜了一些资料之后,准备献丑了. 1.       如果很多窗体都需要用到某一窗体的东西,比如登录窗体记录的ID,为了避免每个窗体都去查询数据库,可以把这些公共变量或信息写入配置文件,每个窗体去读配置文件即可. 2.       如果共享信息的窗体不多,则对于兄弟窗口,可以通过其共同的父窗体来传递数据,此时父窗体如果

ThreadLocal父子线程之间的数据传递问题

一.问题的提出 在系统开发过程中常使用ThreadLocal进行传递日志的RequestId,由此来获取整条请求链路.然而当线程中开启了其他的线程,此时ThreadLocal里面的数据将会出现无法获取/读取错乱,甚至还可能会存在内存泄漏等问题,下面用代码来演示一下这个问题. 普通代码示例: 并行流代码示例: 二.问题的解决 ThreadLocal的子类InheritableThreadLocal其实已经帮我们处理好了,通过这个组件可以实现父子线程之间的数据传递,在子线程中能够父线程中的Threa