Vue笔记(三):Components—slot

摘要:
如果标记中有其他内容,请替换标记以显示其内容--my component component template--˃component-1alternate contentcomponent-22。命名的slot使用name属性来配置如何分发内容,并将元素与内容片段中相应的slot属性匹配Thiisaheader无名˃之后渲染结果:ThisisaheadernamelessThisisfooter3.作用域插槽作用域插槽与props类似,可用于父组件和子组件之间的数据传输编写JSBin slotDialog可重用组件时,最好考虑将来是否重用它们。

Solt - 内容分发

父组件模板的内容在父组件作用域内编译,子组件模板的内容在子组件作用域内编译。

组件的作用域相互独立,子组件中定义的数据只能在子组件模板内使用,父组件也如此。如果子组件想要使用父组件的数据,需要子组件定义 props 属性来实现。

为了让组件可以组合,我们需要一种方式来混合父组件的内容与子组件自己的模板,这个过程被称为内容分发Vue.js 使用 <slot> 元素作为内容插槽。

1. 单个插槽

  • <slot> 标签中的内容为备用内容,仅在 <my-component> 标签内容为空时显示。
  • <my-component> 标签内如果有其他内容,则替换 <slot> 标签显示其内容。
  • 如果组件模板内无 <slot> 插槽,那么 <my-component> 标签中内容将会被丢弃。
<!-- my-component组件模板 -->
<template>
    <div>
        <h3>component-1</h3>
        <slot>
            <p>备用内容</p>
        </slot>
        <h3>component-2</h3>
    </div>
</template>
<!-- 父组件 -->
<my-component></my-component>

2. 具名插槽

  • name 属性来配置如何分发内容,并匹配内容片段中有对应 slot 特性的元素。
  • 匿名插槽作为找不到匹配的内容片段的备用插槽。
<template>
    <div class="container">
        <header>
            <slot name="header"></slot>
        </header>
        <slot></slot>
        <footer>
            <slot name="footer"></slot>
        </footer>
    </div>
</template>
<my-layout>
    <h1 slot="header">This is a header</h1>
    <p>nameless</p>
    <h1 slot="footer">This is a footer</h1>
</my-layout>

渲染结果:

<div class="container">
    <header>
        <h1 slot="header">This is a header</h1>
    </header>
    <p>nameless</p>
    <footer>
        <h1 slot="footer">This is a footer</h1>
    </footer>
</div>

3. 作用域插槽

作用域插槽与 props 具有类似功能,可用于父子组件的数据传递。

在父级中,具有特殊特性 scope 的 <template> 元素必须存在,表示它是作用域插槽的模板。scope 的值对应一个临时变量名,此变量接收从子组件中传递的 props 对象:

<!-- 子组件模板 -->
<div>
    <slot txt="Hello World!" ></slot>
</div>

<my-component>
    <template scope="prop">
        <p>{{prop.txt}}</p>
    </template>
</my-component>

渲染结果:

<div>
    <p>Hello World!</p>
</div>

JS Bin - slot Dialog

复用组件

在编写组件时,最好考虑好以后是否要进行复用。一次性组件间有紧密的耦合没关系,但是可复用组件应当定义一个清晰的公开接口,同时也不要对其使用的外层数据作出任何假设。
Vue 组件的 API 来自三部分——prop、事件和插槽:

  • Prop 允许外部环境传递数据给组件;
  • 事件允许从组件内触发外部环境的副作用;
  • 插槽允许外部环境将额外的内容组合在组件中。

JS Bin - table - app - 简单表格数据的添加、删除、查询

免责声明:文章转载自《Vue笔记(三):Components—slot》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇zipinfoJava编程经验——Long等包装类型判断下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

windows下vue项目启动步骤

原创:https://blog.csdn.net/qq_27680317/article/details/71123051?locationNum=10&fps=1  不是ngnix服务器是,忽略7~10; 前后端分离项目,要做前后端联动测试,没整过前端用vue, nodejs和webpack的开发管理方式。来回折腾终于把已经建好的vue项目启动起...

用vue 写h5页面-摇一摇

  vue配合其他ui框架除了开发一个完整的web项目外,也有不少的项目做一些h5的活动页面开发。你的页面现在需要模拟微信的摇一摇动作。   项目环境: vue-cli 完成的一个项目   准备插件(包):依赖的第三方的插件(后续会完成如何写vue插件的方法)shake.js ,github地址: https://github.com/alexgibson...

vue的坑

1. (vue2.x以上,1.x没有问题)vue和jq一起使用的冲突:在使用了v-bind: class的元素上,当vue和jq都需要增改class时,用jq加的属性可能无效。 原因:当数据的布尔值改变后(比如某个class需要加上),由于vue是在本次事件轮结束后更新DOM或改变属性,而jq的addClass是同步的,所以jq加上的类名会被vue覆盖。...

Vue上传文件:ElementUI中的upload实现

一、上传文件实现   两种实现方式: 1、直接action <el-upload class="upload-file" drag :action="doUpload" :data="pppss"> <i class="el-icon-upload"></i> <div clas...

去掉vue路由中的#号

vue开发时地址栏上的ip后面会跟着一个#号,如果想去掉这个井号,可以在路由上加上 mode: 'history',  即可去掉 //设置路由 const router = new VueRouter({ mode: "history", base: __dirname, routes: [ { path: "/",...

vue实现CheckBox与数组对象绑定

实现需求: 实现一个简易的购物车,页面的表格展示data数据中的一个数组对象,并提供选中商品和全选商品checkbox复选框,页面实时显示选中商品的总金额: 分析: 1:使用v-for循环渲染arraylist对象; 2:使用computed计算属性计算总价; 3:使用computed计算全选复选框是否应该被选中(商品列表如果都被勾选,则设置全选复选框的...