摘要:绑定到子组件属性绑定到父组件属性在子组件模板内将指令绑定到子组件属性列表第一项,由于父组件找不到属性,将不会显示。哪都通快递龙虎山天师府曜星社内容分发中的被插入中,并且因为中的指令而进行迭代,迭代之后通过获取上的属性数据。
组件的作用域(一)
父组件模板的内容在父组件作用域内编译;子组件模板的内容在子组件作用域内编译。
父子组件的编译相互独立,编译时只能使用各自作用域中的属性和方法,例如,你不可以在父组件模板内,将一个指令绑定到子组件的属性或方法上。如果这么做控制台会报一个属性未定义的错误。
如果想要绑定一个指令以便控制子组件的行为,那么你可以在子组件的模板内,将一个指令绑定到子组件的属性或方法上;或者在父组件的模板内,将指令绑定到父组件的属性或方法上。
new Vue({ el: "#app-2", data: { makeChildShow: true }, components: { "component-2-1": { template: "I am an sub component.", data: function () { return { childIsShow: true } } }, "component-2-2": { template: "I am an sub component.", data: function () { return { childIsShow: true } } } } })
- 绑定到子组件属性:
- 绑定到父组件属性:
- 在子组件模板内将指令绑定到子组件属性:
列表第一项,由于父组件找不到属性childIsShow,将不会显示。
默认情况下的内容分发将父组件的内容插入子组件模板的方式,我们称为内容分发。
默认情况下,在子组件中插入的父组件内容是不显示的。
new Vue({ el: "#app-1", data: { message: "I come from parent." }, components: { "component-1": { template: "I am an sub component.
", } } })
{{ message }}
内容分发失败,message不会显示。
单个插口如果想使用内容分发,将父组件内容插入到子组件的模板中,必须在子组件的模板内标记一个
如果父组件没有待分发的内容,备选内容成为最终渲染的结果。
new Vue({ el: "#app-3", components: { "component-3": { template: "
具名插口(多个插口)父组件标题
父组件插入内容
单插口模式做内容分发,只能一股脑把套入子模板的内容插入到有
而具名插口在内容和slot上都做上标记,对应的内容只能分发到对应的slot上。
标记内容用slot="tag"; 标记slot用
new Vue({ el: "#app-4", components: { "component-4": { template: "" } } })
我来组成头部
没被标记的slot都我插
我来组成腿部
以上定义了两个个不具名的插口,虽然这里显示正确,但是控制台报错,说定义重复的默认插口会有不预期的错误
组件作用域(二)根据具名插口,再来看个组件作用域的例子
new Vue({ el: "#app-7", methods: { parentMethod: function () { console.log("It is the parent"s method"); } }, components:{ "component-7":{ methods:{ childMethod: function(){ console.log("It is the child"s method") } }, template:" " } } })
内容分发部分①| 内容分发部分②|
内容分发部分属于父组件作用域,因此点击按钮的内容分发部分,会调用父组件方法,输出"It is the parent"s method"。
子组件模板定义属于子组件作用域,点击这个部分,会调用子组件方法,输出"It is the child"s method"
在内容分发的过程中,父组件分发的内容可以使用定义在子组件模板
特殊的,在标签中使用slot-scope,自身是不会在页面上显示,只起到传递数据媒介的作用。
new Vue({ el: "#app-5", components: { "component-5":{ template: "" } } })
{{slot_data_obj.slotvala}} {{slot_data_obj.slotvalb}}
由于slot-scope的值本质上只是个javascript对象,因此可以使用es6的解构语法进行
以上又可以怎么写
{{slotvala}} {{slotvalb}}插口作用域应用在列表上
插口不仅可以通过自身属性传递数据给分发的内容,还可以在其上定义v-for指令,从而将迭代的特性也传递给分发的内容。
new Vue({ el: "#app-6", components: { "component-6":{ data:function(){ return { items: [ {id:1,text:"哪都通快递"}, {id:2,text:"龙虎山天师府"}, {id:3,text:"曜星社"} ] } }, template: "
{{ id+"、"+text }}
内容分发中的被插入slot中,并且因为slot中的v-for指令而进行迭代,迭代之后通过slot-scope获取slot上的属性数据。
内联模板当使用子组件的内联特性——inline-template时,父组件的内容分发部分就被解释为子组件的模板,而子组件的template属性也将被这个部分取代(取代后template失效),并且作用域也属于子组件。
new Vue({ el:"#app-8", components:{ "component-8":{ template:"..."//全部被替换 data:function(){ return { childMsg:"child"s data" } } } } })
这些将作为组件自身的模板。
而非父组件透传进来的内容。
子组件数据: {{ childMsg }}
"child"s data"来自子组件的childMsg
由于其特点,在使用内联模板时,最容易产生的误区就是混淆作用域。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/51967.html
摘要:绑定到子组件属性绑定到父组件属性在子组件模板内将指令绑定到子组件属性列表第一项,由于父组件找不到属性,将不会显示。哪都通快递龙虎山天师府曜星社内容分发中的被插入中,并且因为中的指令而进行迭代,迭代之后通过获取上的属性数据。 组件的作用域(一) 父组件模板的内容在父组件作用域内编译;子组件模板的内容在子组件作用域内编译。 父子组件的编译相互独立,编译时只能使用各自作用域中的属性和方法,例...
摘要:假如以的作用域链作为类比,组件提供的对象其实就好比一个提供给子组件访问的作用域,而对象的属性可以看成作用域上的活动对象。所以,我借鉴了作用域链的思路,把当成是组件的作用域来使用。 前言 Context被翻译为上下文,在编程领域,这是一个经常会接触到的概念,React中也有。 在React的官方文档中,Context被归类为高级部分(Advanced),属于React的高级API,但官方...
摘要:事件总线事件总线首先创建了一个名为的空的实例然后全局定义了组件最后创建了实例。在父组件模板中,子组件标签上使用指定一个名称,并在父组件内通过来访问指定名称的子组件。 学习笔记:组件详解 组件详解 组件与复用 Vue组件需要注册后才可以使用。注册有全局注册和局部注册两种方式。 全局注册 Vue.component(my-component, {}); 要在父实例中使用这个组件,必须要...
阅读 1962·2021-10-25 09:48
阅读 2780·2021-09-22 14:59
阅读 1754·2019-08-29 16:52
阅读 854·2019-08-29 16:07
阅读 2296·2019-08-29 12:38
阅读 1750·2019-08-26 13:23
阅读 875·2019-08-26 11:49
阅读 3263·2019-08-26 10:56