摘要:组件实例之间的作用域是孤立存在,要让它们之间的信息互通,就必须采用组件的通信方式用于父组件向子组件传达信息静态方式以数组的形式发出自己所需要的信息至于父亲给不给,就由父亲说了算,父作用域给予回应,将回应回去,儿子得到自己想要的,然后展
组件实例之间的作用域是孤立存在,要让它们之间的信息互通,就必须采用组件的通信方式
props用于父组件向子组件传达信息
1.静态方式
eg:
props以数组的形式发出自己所需要的信息(至于父亲给不给,就由父亲说了算),父作用域给予回应,将message=‘hello’回应回去,儿子得到自己想要的,然后展现在html结构中;
2.动态获取数据
子组件要得到父亲口袋里面的东西(实例里面的数据),必须通过v-bind类似于绑定结构属性的方式发送给子组件;
eg:
渲染结果为:
zhangsan---name---0
man---sex---1
science---job---2
注意:在组件里面用v-for一定要写个外层标签包着v-for,因为大哥只能有一个,不能写并行标签
当然也可以传递方法给子组件
如果传递过来的方法中带有父组件里面的属性,也可以用
eg:
弹出框显示hello, world
由此我们可以得出:父组件传递给子组件的是一个引用地址,但是这个引用是单向的,只能父组件改变的时候子组件获得的信息也会发生变化,但是子组件不可以去更改父组件传递过来的值,但是可以去加工
eg:
弹出框显示:hello,world i am god
eg:
显示结果:
1.gif
props可以用来规定自己需要的数据类型,此时props将需求以对象的形式呈现,儿子开始挑剔了,但是父亲给他的不符合要求时候,它便会报错,但是毕竟是父亲给的,所以还是会渲染出来
eg:
blob.png
关于儿子组件的具体挑剔要求,我直接引个官网文档,就不做过多说明了
Vue.component("example", {
props: {
// 基础类型检测 (`null` 意思是任何类型都可以) propA: Number, // 多种类型 propB: [String, Number], // 必传且是字符串 propC: { type: String, required: true }, // 数字,有默认值 propD: { type: Number, default: 100 }, // 数组/对象的默认值应当由一个工厂函数返回 propE: { type: Object, default: function () { return { message: "hello" } } }, // 自定义验证函数 propF: { validator: function (value) { return value > 10 } }
}
})
$emit与$on,关于这一对兄弟,接触过angular.js和react的应该都很熟悉,$emit是发射的意思,$on 为监听,主要用于子组件向父组件传递信号,当然,儿子广播出去,父亲听不听就是父亲的事情了
eg:
{{a}}
显示如下:
1.gif
父亲在监控ok,每当听到儿子通过$emit发送过来ok时候,父亲就开始执行自己的add方法
当然儿子也可以向父亲传递信息过去
eg:
{{a}}
显示效果:
1.gif
儿子将自己的i值传递给父亲,父亲通过接收到的i值将自己的a值更改
监听原生事件的时候,父亲只需要在自己的监听器上加一个炫酷特效.native,儿子不需要去发广播,父亲就会知道,也就是说有些事情只要老爸愿意了解,不需要儿子去告诉,他自己也可以选择知道
eg:
{{a}}
显示结果:
1.gif
除了父子直接可以互相通信外,子组件直接互相通信,需要一个子组件先将信息传递给父组件,父组件再交给另一个子组件
eg:
我是父亲且a为:{{a}}
slot分发模式主要用于在组件中间插入标签或者组件之间的相互嵌套
单个内容插入,可以选择用slot标签事先占个位置
eg:
渲染结果为:
我就是:slot分发
也就是说slot类似于一个插槽,提前站好一个位置,要插入组件中的标签类似于卡,插入提前站好位置的插槽中
多个标签插入,就需要按照名字一一对号入座
eg:
我是1号卡片
我是2号卡片
我是3号卡片
作用域插槽还是有点抽象的,也就是子组件充当插槽,父组件将内容插在子组件上面,并且子组件将值传递给父组件,父组件用scope="props"来接收子组件传过来的值
eg:
动态组件通过component来动态切换组件的内容
eg:
带图原文地址http://www.cnblogs.com/douyae...
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/88930.html
摘要:事件总线事件总线首先创建了一个名为的空的实例然后全局定义了组件最后创建了实例。在父组件模板中,子组件标签上使用指定一个名称,并在父组件内通过来访问指定名称的子组件。 学习笔记:组件详解 组件详解 组件与复用 Vue组件需要注册后才可以使用。注册有全局注册和局部注册两种方式。 全局注册 Vue.component(my-component, {}); 要在父实例中使用这个组件,必须要...
摘要:它们之间必然需要相互通信父组件要给子组件传递数据,子组件需要将它内部发生的事情告知给父组件。父组件通过向下传递数据给子组件,子组件通过给父组件发送消息。这是由使用的父组件决定的。 Vue.js的组件 注册组件 全局注册 要注册一个全局组件,你可以使用 Vue.component(tagName, options)。例如: Vue.component(my-component, { ...
阅读 3012·2021-11-24 09:39
阅读 2210·2021-10-08 10:05
阅读 2720·2021-09-24 13:52
阅读 1533·2021-09-22 15:07
阅读 560·2019-08-30 15:55
阅读 1789·2019-08-30 15:53
阅读 673·2019-08-30 15:44
阅读 3100·2019-08-30 11:20