600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 详解Vue.js中的作用域插槽

详解Vue.js中的作用域插槽

时间:2023-09-27 13:59:46

相关推荐

详解Vue.js中的作用域插槽

web前端|Vue.js

Vue.js,作用域插槽

web前端-Vue.js

vps管理软件源码,ubuntu打开时蓝屏,tomcat9下载流程,爬虫方法和技巧,php环境搭建安装实训报告,seo模型讲解lzw

作用域槽是Vue.js的一个有用特性,它可以使组件更加通用和可重用。唯一的问题是它们很难理解!试着让你的头在父母和孩子的范围内交织,就像解决一个棘手的数学方程。

下载器php源码,ubuntu怎么换字体,淘宝爬虫在哪接单,php int,青岛济南seolzw

当你不能很容易地理解某件事时,一个好的方法是试着用它来解决问题。在本文中,我将演示如何使用作用域槽来构建可重用列表组件。

视频小程序 源码,vsCode设置有哪些,更新ubuntu指令,tomcat目录结构查看,乱用爬虫,php 5.2.12,自然排名是seo吗,珠宝店网站源码,游戏资讯 dz模板lzw

基本组成部分

我们要构建的组件叫做my-list,它显示了很多东西。该特性的特殊之处在于,您可以自定义列表项在每次使用组件时的呈现方式。

让我们首先处理最简单的用例,并获取my-list来呈现一个列表:一个几何形状名称数组和它们的边数。

app.js

ponent(my-list, { template: #my-list, data() { return {title: Shapes,shapes: [ { name: Square, sides: 4 }, { name: Hexagon, sides: 6 }, { name: Triangle, sides: 3 }] }; }});new Vue({ el: #app});

index.html

{{ title }}

{{ shape.name }}({{ shape.sides }} sides)

添加了一点CSS后,将会下图例:

泛化my-list

现在,我们想要使my-list功能足够多,以呈现任何类型的列表。第二个测试用例将是一个颜色列表,包括一个小样本来显示颜色。

为此,我们必须抽象特定于形状列表的任何数据。由于列表中的项的结构可能不同,我们将为my-list提供一个插槽,以便父列表可以定义任何特定列表的显示方式。

app.js

ponent(my-list, { template: #my-list, props: [ itle ]});

index.html

{{ title }}

现在让我们在根实例中创建my-list组件的两个实例来显示我们的两个测试用例列表:

app.js

new Vue({ el: #app, data: { shapes: [ { name: Square, sides: 4 }, { name: Hexagon, sides: 6 }, { name: Triangle, sides: 3 } ], colors: [{ name: Yellow, hex: #F4D03F, },{ name: Green, hex: #229954 },{ name: Purple, hex: #9B59B6 } ] }});

{{ shape.name }}({{ shape.sides }} sides)

{{ color.name }}

就像这样:

表面成分

我们刚刚创建的代码工作得很好,但是代码并不好。my-list是按名称显示列表的组件。但是我们已经抽象了所有将列表呈现到父列表中的逻辑。组件只是用一些表示标记将列表包装起来。

考虑到组件的两个声明中仍然有重复的代码(例如

<div v-for="item in…"

作用域的插槽

为了实现这一点,我们将使用作用域槽而不是常规槽。作用域插槽允许您将模板传递给插槽,而不是传递呈现的元素。它被称为“作用域”槽,因为尽管模板是在父作用域中呈现的,但它可以访问特定的子数据。

例如,具有作用域插槽的组件子组件可能如下所示。

使用此组件的父组件将在槽中声明模板元素。此模板元素将具有一个属性范围,该范围指定别名对象。添加到slot(在子模板中)的任何道具都可以作为别名对象的属性使用。

Hello from parent {{ props.my-prop }}

显示为:

Hello from parent Hello from child

在my-list中使用作用域插槽

让我们将列表数组作为道具传递给my-list。然后我们可以用作用域插槽替换插槽。这样my-list就可以负责迭代列表项,但是父级仍然可以定义每个列表项应该如何显示。

index.html

现在我们得到my-list来迭代这些项。在v-for循环中,item是当前列表项的别名。我们可以创建一个槽,并使用v-bind=”item”将该列表项绑定到槽。

app.js

ponent(my-list, { template: #my-list, props: [ itle, items ]});

index.html

{{ title }}

注意:如果您以前没有见过v-bind在没有参数的情况下使用,这将把整个对象的属性绑定到元素。这对于作用域插槽非常有用,因为您绑定的对象通常具有任意属性,现在不需要通过名称指定这些属性。

现在我们将返回到根实例,并在my-list的slot中声明一个模板。首先查看形状列表,模板必须包含我们为其分配别名形状的scope属性。这个别名允许我们访问限定范围的道具。在模板内部,我们可以使用与以前完全相同的标记来显示形状列表项。

{{ shape.name }}({{ shape.sides }} sides)

下面是完整的模板:

{{ shape.name }}({{ shape.sides }} sides)

{{ color.name }}

结论

尽管这种方法和以前一样有很多标记,但它将公共功能委托给了组件,从而实现了更健壮的设计。

以下是完整代码的代码页:

编程入门!!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。