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

在这里先定义一下,相对本案例来说: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或者$attras向子组件中传值

    知识点:vue中使用props或者$attras向子组件中传值 (1) props传值 子组件必须注册好要传的数据() props:['id'] (2)$attrs传值 该数据在props中,没有注册 ...

  2. Vue父子组件通信(父级向子级传递数据、子级向父级传递数据、Vue父子组件存储到data数据的访问)

    Vue父子组件通信(父级向子级传递数据.子级向父级传递数据.Vue父子组件存储到data数据的访问) 一.父级向子级传递数据[Prop]: ● Prop:子组件在自身标签上,使用自定义的属性来接收外界 ...

  3. vue父组件引用多个相同的子组件传值

    没有什么问题是for 解决不了的,我一直深信这句话,当然这句话也是我说的 父组件引用多个相同的子组件传值问题 (这种情况很少遇到) 1 <template> 2 <div> 3 ...

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

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

  5. layer.open中父页面向子页面传值

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

  6. vue 父组件给子组件传值 Vue父组件给子组件传方法 Vue父组件把整个实例传给子组件

    Home.vue <template> <!-- 所有的内容要被根节点包含起来 --> <div id="home"> <v-header ...

  7. 详解vue父组件传递props异步数据到子组件的问题

    案例一 父组件parent.vue // asyncData为异步获取的数据,想传递给子组件使用 <template> <div> 父组件 <child :child-d ...

  8. vue中通过.sync修饰符实现子组件修改父组件数据

    vue父子通讯是单向数据流,也就是子组件不能修改父组件的值,但是在一些情况下是需要这样做的. 先看官方文档: 接下来举例实现 1.实现一个双向数据绑定,子组件改变的时候,父组件也在改变 父组件 < ...

  9. [转]详解vue父组件传递props异步数据到子组件的问题

    原文地址:https://www.cnblogs.com/goloving/p/9114389.html 案例一 父组件parent.vue // asyncData为异步获取的数据,想传递给子组件使 ...

  10. vue中父级与子组件生命周期的先后顺序

    1.vue的生命周期 2.views/createrCustormer.vue为父级     <template>     <expressService />   </ ...

随机推荐

  1. Ubuntu 配置FTP服务器

    第三方的文件传输软件用着很不爽,想着自己搭建一个FTP来干活. 首先检查是否已经安装了FTP,输入命令: vsftpd -v  可以查看版本,如果没有安装,无法执行. 安装FTP p.p1 { mar ...

  2. php提供的sapi有哪些?CGI、FastCGI、php-fpm、php-cgi解释

    一.前言 一直对PHP的sapi是什么东西好奇,在网上一查都是各种说fpm cgi fastcgi php-cgi 直到看了鸟哥的这篇文章介绍戳这里,看到源码下的sapi目录才有所了解. 二.sapi ...

  3. ubuntu16.04~qt 5.8无法输入中文

    编译fcitx-qt需要cmake,安装cmake命令,如果已经安装,请略过. sudo apt-get install cmake 安装 fcitx-libs-dev sudo apt-get in ...

  4. bzoj 2120 带修改莫队

    2120: 数颜色 Time Limit: 6 Sec  Memory Limit: 259 MBSubmit: 7340  Solved: 2982[Submit][Status][Discuss] ...

  5. Oauth认证协议

    原文地址腾讯QQ第三方登录的实现原理? Oauth当中的角色: 1.Service Provider(服务提供方): 服务提供方通常是网站,在这些网站当中存储着一些受限制的资源,如照片.视频.联系人列 ...

  6. strcpy、strncpy与memcpy的区别与使用方法

    strcpy.strncpy.memcpy这三个C语言函数我们在主机代码编写中会很频繁的使用到,但是三个函数的区别.使用时该注意什么还是有必要说下的. 本文参考<C 标准库>编写. 一.函 ...

  7. 如何将ubuntu控制台输出到串口?

    如何将ubuntu控制台输出到串口? Linux使用ubuntu14.04发行版本 操作步骤: 1.修改/etc/default/grub ## Modify this line by leekwen ...

  8. Android 网络之 Volley+OkHttp+Https

    Volley 已经发布很长时间了, 也已被广泛应用, 相关教程到处都是. 本文只说两个值得注意的地方. 本文讲解部分比较少, 请参阅提供的相关链接. 完整的实现代码在 Github dodocat/A ...

  9. 关于用wubi安装Ubuntu,总是提示“没有定义根文件系统”的问题

    用diskgenius测试一下分区问题,就发现一些错误,所以怀疑可能就是因为这个分区参数错误导致WUBI安装不成功,费了大力气转移数据后,重新对硬盘分区,这里称赞一下diskgenius,的确不错,当 ...

  10. PHP stream_context_create()作用和用法分析

    stream_content_create 创建并返回一个文本数据流并应用各种选项,可用于fopen(),filegetcontents()等过程的超时设置.代理服务器.请求方式.头信息设置的特殊过程 ...