父组件向子组件传值步骤:

在这里先定义一下,相对本案例来说:App.vue是父组件,Second-module.vue是子组件。

一、首先,值肯定是定义在父组件中的,供所有子组件共享。所以要在父组件的data中定义值:

二、其次,父组件要和子组件有契合点:就是在父组件中调用、注册、引用子组件:

  调用:

  注册:

  引用:

 

三、接下来,就可以在父组件和子组件链接的地方(即引用子组件的标签上),把父组件的值绑定给子组件:

这里我绑定了两个值,一个是数组,一个是字符串。

2018-03-30  10:15:55 特别补充:

我在写完文章后很长一段时间没再接触vue,再上手开始写demo的时候,出现了不少不怎么被注意的小问题,其中一点和这里有关,进行补充,特别注意:

总的来说父传子就是这三个步骤:父组件中定义值、调用子组件并引用、在引用的标签上给子组件传值。

但是注意是要用 v-bind: 绑定要传的值,不用v-bind直接把值放到标签上,会被当成html的节点属性解析的

四、最后,子组件内部肯定要去接受父组件传过来的值:props(小道具)来接收:

五、这样,子组件内部就可以直接使用父组件的值了。

但是有要注意的点:

子组件接受的父组件的值分为——引用类型和普通类型两种,

普通类型:字符串(String)、数字(Number)、布尔值(Boolean)、空(Null)

引用类型:数组(Array)、对象(Object)

其中,普通类型是可以在子组件中更改,不会影响其他兄弟子组件内同样调用的来自父组件的值,

但是,引用类型的值,当在子组件中修改后,父组件的也会修改,那么后果就是,其他同样引用了改值的子组件内部的值也会跟着被修改。除非你有特殊的要求这么去做,否则最好不要这么做。

父组件传给子组件的值,在子组件中千万不能修改,因其数据是公用的,改了所有引用的子组件就都改了。

先看一个效果页面:

左边的列表栏是引用父组件值的第一个子组件,右边是引用了同样值的第二个子组件,他们都有一样的信息:

开发工具中看也是明显的6条数据:

注意对比看最后一条数据: 点击右边区域第一个蓝色按钮后,就少了一组数据,当然是两边同时少的。

同样看开发工具中,App组件的数据是少了一条的。

但是传递的是字符串、数字、布尔值的时候,在一个组件中修改就不会影响到其他组件的信息。就没有关系。

我点击第二个蓝色按钮,,就只有第二个子组件里的title改变了,第一个的组件没有变动

尝试过后,值确实改了,但是vue给我弹出了一个警告:

警告:避免直接对一个道具进行修改,因为当父组件重新呈现时,该值将被覆盖。相反,使用基于支柱的数据或计算属性。

官网说法:

总结:

你可以这么理解:传值就是复制过去了一个值的副本,副本是可以自己随便改的,但是引用是复制了个快捷方式,是一个指针,他们用的都是父组件中的那一个。

其实理解了js的原型链和面向对象原理后就不难理解这个:

把子组件想象成父组件的实例,那么有可能父组件引用属性的值(即方法),都是在父组件的原型上的。然后其他子组件,共享这一个在父组件原型上的引用值,所以牵一发而动全身。

(父组件原型:我习惯将其想象成爷爷的身份,构造函数是爸爸,实例是孙子,孙子一切都来自于爷爷,比如说形式。。扯远了)

但是父组件传给子组件的值,就像是构造函数中创建的属性一样,是由父组件(爸爸)拿着的。

所以当子组件(孙子们)自立门户(被创建)的时候,父组件将值一人给了一份(爸爸的家产分给了每一个孩子)。那么子组件在自己家里改动,不会影响同用这个属性的兄弟组件家里的值的。

最后说明:纯属个人为了理解时胡乱连接的关系,不是真正的就是这样的,不要太在意。。

不贴源码的讲解就是耍流氓!

父组件App.vue源码:

<template><div id="app"><app-header></app-header><app-nav></app-nav><app-cont></app-cont><first-module v-bind:newlists = "newlists" v-bind:secondlist = "secondlist"></first-module><!-- 实现父组件给子组件传值 --><second-module v-bind:newlists ="newlists" v-bind:secondlist = "secondlist"></second-module><app-footer></app-footer></div>
</template><script>import Header from './components/Header'import Footer from './components/Footer'import Navbar from './components/Navbar'import Content from './components/Content'import Firstmodule from './components/First-module'import Secondmodule from './components/Second-module'export default {name: 'app',data () {//父组件中定义全局的数据,好传给需要的子组件们return {//return 一定要有,因为data在这里是一个函数方法,不然函数返回的就是undefiend,找不到数据啊newlists: [//传一个引用:数组{title: "Vue-初识Vue及引入CDN",time: "2017/08/15"},{title: "Vue-实例化Vue对象",time: "2017/08/15"},{title: "Vue-数据和方法",time: "2017/08/15"},{title: "Vue-属性绑定",time: "2017/08/15"},{title: "Vue-事件(点击:双击:鼠标事件)",time: "2017/08/15"},{title: "Vue-键盘事件及键值修饰符(alt:enter)",time: "2017/08/15"}],secondlist: "我是父组件传给第二个子组件的文本"//传一个值:字符串}},components: {//局部注册组件这里,可能会定义多个组件,所以component这个单词加上“s”"app-header": Header,"app-footer": Footer,'app-nav': Navbar,"app-cont": Content,"first-module": Firstmodule,"second-module": Secondmodule}}
</script><style>#app {font-family: '微软雅黑', Helvetica, Arial, sans-serif;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;text-align: center;color: #2c3e50;margin-top: 10px;}#app:after{content: "";clear: both;display: block;visibility: hidden;}ul {list-style-type: none;padding: 0;margin: 0;}.lists{}.lists li{padding: 10px 20px;text-align: left;}.lists li:nth-child(odd){background: #f5f5f5;}.lists a{color: #222;text-decoration: none;}.lists a p{margin: 5px 0;}.lists a span{color: #999;font-size: 12px;}
</style>

子组件Second-module.vue源码:

见另一篇文章底部:http://www.cnblogs.com/padding1015/p/7878741.html

声明:

  请尊重博客园原创精神,转载或使用图片请注明:

  博主:xing.org1^

  出处:http://www.cnblogs.com/padding1015/

Vue-组件嵌套之——父组件向子组件传值相关推荐

  1. 四、Vue组件化开发学习笔记——父子组件通信,父级向子级传值(props),子级向父级传值(自定义事件),slot插槽

    一.父子组件的通信 在上一篇博文中,我们提到了子组件是不能引用父组件或者Vue实例的数据的. 但是,在开发中,往往一些数据确实需要从上层传递到下层: 比如在一个页面中,我们从服务器请求到了很多的数据. ...

  2. vue 父刷新子_父组件中vuex方法更新state子组件不能及时更新并渲染的完美解决方法...

    场景: 我实际用到的是这样的,我父组件引用子组件related,父组件调用获取页面详情的方法,更新了state值related,子组件根据该related来渲染相关新闻内容,但是页面打开的时候总是先加 ...

  3. vue 父组件获取接口值传到子组件_vue父组件异步获取数据传给子组件的方法

    但是现在问题是父组件的数据是异步获取的,而子组件一开始就会渲染,如果此时没有传入数据,而子组件又要用到数据中的length属性时就会报错: 怎么办呢?最简单的办法就是让子组件条件渲染,当有数据的时候才 ...

  4. vue 父链和子组件索引_解决Vue2.x父组件与子组件之间的双向绑定问题

    最近在研究如何写一套基于Vue2.x的UI组件给自己用,提升一点BIG,在制作含有input的组件遇到一个问题:不知怎样才能把子组件中input与调用者(父组件)的数据实现双向绑定,想过使用Vuex, ...

  5. Vue钩子函数以及父组件的8个钩子和子组件的8个钩子的先后执行的顺序

    ** vue组件生命周期 ** 一个组件从 创建 到 销毁 的整个过程就是生命周期 生命周期函数(钩子函数) vue 框架内置函数,随着组件的生命周期,自动 按次序 执行 作用:特定的时间点,执行某些 ...

  6. 一、vue中当数据在父组件需要给子组件传递数据的时候,子组件输出为undefined

    父组件: <Type :imgList="imgList"/> 子组件: <img :src="imgList[0].imgUrl"/> ...

  7. 【Android TV 开发】焦点处理 ( 父容器与子组件焦点获取关系处理 | 不同电视设备上的兼容问题 | 触摸获取焦点 | 按键获取焦点 )

    Android TV 开发系列文章目录 [Android TV 开发]安卓电视调试 ( 开启网络远程调试 ) [Android TV 开发]焦点处理 ( 父容器与子组件焦点获取关系处理 | 不同电视设 ...

  8. 【微信小程序】组件间通信与事件-获取子组件的实例对象

    1.0 前言 1.1 为何写这篇笔记 小程序官方文档只粗略给了一段代码,让笔者找不到北,故记录下易于理解的过程,以便新手了解和使用 1.2 获取子组件实例对象的作用 当引用了组件,且父组件使用了监听函 ...

  9. layer用ajax往jsp页面传值,layer.open中父页面向子页面传值(示例代码)

    1.咱先看图说话 父list.jsp 子operate.jsp 实现的代码 1 在父页面上完成对子页面的数据渲染 function setData(data) { var lay=layer.open ...

  10. artdialog4.1.7 中父页面给子页面传值

    artdialog4.1.7中父页面给子页面传值时看了一些网友的解决方法: 在父页面声明全局变量 var returnValue=" ",子页面用art.dialog.opener ...

最新文章

  1. Hyper-V 2016 系列教程12 Hyper-V 体系结构
  2. 玩转C语言之自定义数据类型-typedef
  3. Linux启动提示Kernel panic - not syncing: Attempted to kill init解决办法
  4. xp彻底删除mysql_xp彻底清除mysql数据库
  5. linux下文件系统创建
  6. Junit框架使用(4)--JUnit常用断言及注解
  7. 【转】gem install libv8 错误
  8. PPM 金字塔池化模块 - PSPNet
  9. Linux内核源代码阅读
  10. 嗨,你真得懂this吗?
  11. One Mathematic Problem
  12. 了解Java对象(抽象和具体)
  13. 随记 C#读取TXT文件乱码
  14. net c# 代码连接数据库
  15. 文件下载时设置文件名以及中文被转换成下划线的解决办法
  16. modis 通道简介
  17. 搭档之家:首款透明电视来啦!小米大师系列预售立即秒光,你抢到了吗?
  18. 2019考研 报名条件是什么?
  19. IIS 之 应用程序池
  20. Xilinx Kintex-7 XC7K325T-2FFG676I嵌入式核心板简介

热门文章

  1. 链表ADT设计模板的简单应用——链表的ADT的实现C++版
  2. JAVA Set 交集,差集,并集
  3. 解决SAP业务问题的思考——逆向思维
  4. 使用向量的方法来计算点到直线的距离
  5. Google Maps API Key申请办法(最新)
  6. 腾讯云服务器配置code-server
  7. 阿里云1+X-云计算开发与运维-中级(多选题)
  8. List和IList的区别
  9. C++ Reference: Standard C++ Library reference: C Library: cstdio: FILE
  10. PHP2019参考文献,2019论文参考文献格式