Vue子父组件间的数据传递
来源:互联网 发布:淘宝主图制作技巧 编辑:程序博客网 时间:2024/06/08 10:32
Vue组件间的作用域是独立的,不能相互之间调用数据,需要通过特定的方法进行数据的传递。
一、父组件往子组件传递数据
1、使用 Prop 传递数据
组件实例的作用域是孤立的。这意味着不能 (也不应该) 在子组件的模板内直接引用父组件的数据。要让子组件使用父组件的数据,我们需要通过子组件的 props 选项。
注意:子组件标签中的属性不区分大小写,要通过中线的方式区分单词。props的值可以使数组,可以使对象。
父组件:
<template> <div id="app"> <child-a :msg="text" number-to="3333"></child-a> </div></template><script> import ChildA from './components/child.vue' export default { data() { return { text: '我是父组件的数据' } }, components: { ChildA } }</script>
子组件:
<template> <h1>{{msg}}++++{{numberTo}}</h1></template><script>export default { props: ['msg', 'number-to'], }</script>
2、使用slot分发内容
插槽功能,传递的是模板
1.单个slot:
除非子组件模板包含至少一个 插口,否则父组件的内容将会被丢弃。当子组件模板只有一个没有属性的 slot 时,父组件整个内容片段将插入到 slot 所在的 DOM 位置,并替换掉 slot 标签本身。
最初在 标签中的任何内容都被视为备用内容。备用内容在子组件的作用域内编译,并且只有在宿主元素为空,且没有要插入的内容时才显示备用内容。
假定 my-component 组件有下面模板:
<div> <h2>我是子组件的标题</h2> <slot> 只有在没有要分发的内容时才会显示。 </slot></div>
父组件模版:
<div> <h1>我是父组件的标题</h1> <my-component> <p>这是一些初始内容</p> <p>这是更多的初始内容</p> <!--这里的内容会插入到my-component组件下的slot标签中--> </my-component></div>
渲染结果:
<div> <h1>我是父组件的标题</h1> <div> <h2>我是子组件的标题</h2> <p>这是一些初始内容</p> <p>这是更多的初始内容</p> </div></div>
2.具名slot:
元素可以用一个特殊的属性 name 来配置如何分发内容。多个 slot 可以有不同的名字。具名 slot 将匹配内容片段中有对应 slot 特性的元素。
仍然可以有一个匿名 slot,它是默认 slot,作为找不到匹配的内容片段的备用插槽。如果没有默认的 slot,这些找不到匹配的内容片段将被抛弃。
例如,假定我们有一个 app-layout 组件,它的模板为:
<div class="container"> <header> <slot name="header"></slot> </header> <main> <slot></slot> </main> <footer> <slot name="footer"></slot> </footer></div>
父组件模版:
<app-layout> <h1 slot="header">这里可能是一个页面标题</h1> <p>主要内容的一个段落。</p> <p>另一个主要段落。</p> <p slot="footer">这里有一些联系信息</p></app-layout>
渲染结果为:
<div class="container"> <header> <h1>这里可能是一个页面标题</h1> </header> <main> <p>主要内容的一个段落。</p> <p>另一个主要段落。</p> </main> <footer> <p>这里有一些联系信息</p> </footer></div>
二、子组件向父组件传递数据
1、$emit
子组件主要通过事件传递数据给父组件
注意:子组件标签中的时间也不区分大小写要用“-”隔开
子组件:
<template> <button @click="emitEvent">点击我</button></template><script> export default { data() { return { msg: "我是子组件中的数据" } }, methods: { emitEvent(){ this.$emit('my-event', this.msg) //通过按钮的点击事件触发方法,然后用$emit触发一个my-event的自定义方法,传递this.msg数据。 } } }</script>
父组件:
<template> <div id="app"> <child-a @my-event="getMyEvent"></child-a> <!--父组件中通过监测my-event事件执行一个方法,然后取到子组件中传递过来的值--> </div></template><script> import ChildA from './components/child.vue' export default { components: { ChildA }, methods: { getMyEvent(msg){ console.log('接收的数据--------->'+msg)//接收的数据--------->我是子组件中的数据 } } }</script>
三、Vuex进行参数传递
为了便于开发,Vue 推出了一个状态管理工具 Vuex,可以很方便实现组件之间的参数传递
详细信息请查看官网:https://cn.vuejs.org/v2/guide/components.html
阅读全文
0 0
- Vue子父组件间的数据传递
- Vue之父组件向子组件传递数据
- vue父组件向子组件传递多个数据
- 父组件向子组件传递数据(vue.js)
- 子组件传递数据到父组件(vue.js)
- vue 子组件向父组件传递数据
- vue父组件与子组件间如何进行数据传递
- Vue子父组件之间数据传递方式
- Vue--- 子 --> 父 组件传递参数
- vue.js中的子组件与父组件,prop传递数据
- 解决关于Vue父组件动态向子组件传递数据
- vue-父组件获取子组件数据
- vue组件间的数据和方法传递
- vue父子组件的数据传递
- Vue---组件之间的数据传递
- vue组件中数据的传递
- vue 父子组件之间的数据传递
- angular2父子组件的数据传递,父组件向子组件传递数据
- JNI开发最详细最全入门
- 那些年我理解的沉浸式状态栏?OR透明化状态栏?
- JavaScript日期对象使用总结 javascript Date日期对象的创建
- pex虚拟机自动安装
- 大规模分布式跟踪系统的理论
- Vue子父组件间的数据传递
- editplus初学前端之三
- 观察者模式与事件监听器模式--java设计模式扫盲
- match
- jQuery 学习记录
- BZOJ3533 SDOI2014 向量集
- 设计模式-抽象工厂模式-abstractfactory-python
- 大话设计模式笔记(三)——单一、开放封闭、依赖倒转、里氏替换四大设计原则
- shaderForge需要注意的地方