vue 使用插槽分发内容操作示例【单个插槽、具名插槽、作用域插槽】


Posted in Javascript onMarch 06, 2020

本文实例讲述了vue 使用插槽分发内容操作。分享给大家供大家参考,具体如下:

单个插槽

除非子组件模板包含至少一个 <slot> 插口,否则父组件的内容将会被丢弃。当子组件模板只有一个没有属性的插槽时,父组件传入的整个内容片段将插入到插槽所在的 DOM 位置,并替换掉插槽标签本身。

最初在 <slot> 标签中的任何内容都被视为备用内容。备用内容在子组件的作用域内编译,并且只有在宿主元素为空,且没有要插入的内容时才显示备用内容

例:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Vue 测试实例 - 单个插槽</title>
<script src="https://cdn.bootcss.com/vue/2.2.2/vue.min.js"></script>
</head>
<body>
 
<div id="example">
  <div>
 <h1>我是父组件的标题</h1>
 <my-component>
  <p>这是一些初始内容</p>
  <p>这是更多的初始内容</p>
 </my-component>
</div>
</div>
 
 
var childNode = {
  //当没有<slot>时,父组件的其他内容不会显示,当有<slot>时,要是父组件中的内容不为空,<slot>
  //中的内容就不会显示
 template: `
 <div>
 <h2>我是子组件的标题</h2>
 <slot>
  只有在没有要分发的内容时才会显示。
 </slot>
</div>
 `,
};
// 创建根实例
new Vue({
 el: '#example',
 components: {
 'my-component': childNode
 }
})
</script>
</body>
</html>

vue 使用插槽分发内容操作示例【单个插槽、具名插槽、作用域插槽】

具名插槽

<slot> 元素可以用一个特殊的特性 name 来进一步配置如何分发内容。多个插槽可以有不同的名字。具名插槽将匹配内容片段中有对应 slot 特性的元素。

仍然可以有一个匿名插槽,它是默认插槽,作为找不到匹配的内容片段的备用插槽。如果没有默认插槽,这些找不到匹配的内容片段将被抛弃。

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Vue 测试实例 - 具名插槽</title>
<script src="https://cdn.bootcss.com/vue/2.2.2/vue.min.js"></script>
</head>
<body>
 
<div id="example">
 <app-layout>
 <h1 slot="header">这里可能是一个页面标题</h1>
 
 <p>主要内容的一个段落。</p>
 <p>另一个主要段落。</p>
 
 <p slot="footer">这里有一些联系信息</p>
</app-layout>
</div>
 <script>
 Vue.component('app-layout',{
 template:'<div class="container">'+
 '<header>'+
  '<slot name="header"></slot>'+
 '</header>'+
 '<main>'+
  '<slot></slot>'+
 '</main>'+
 '<footer>'+
  '<slot name="footer"></slot>'+
 '</footer>'+
'</div>'
 })
 
// 创建根实例
new Vue({
 el: '#example',
 
})
</script>
</body>
</html>

vue 使用插槽分发内容操作示例【单个插槽、具名插槽、作用域插槽】

作用域插槽

作用域插槽是一种特殊类型的插槽,用作一个 (能被传递数据的) 可重用模板,来代替已经渲染好的元素。

在子组件中,只需将数据传递到插槽,就像你将 prop 传递给组件一样:

<div class="child">
 <slot text="hello from child"></slot>
</div>

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

在 2.5.0+,slot-scope 能被用在任意元素或组件中而不再局限于 <template>。

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Vue 测试实例 - 作用域插槽</title>
<script src="https://cdn.bootcss.com/vue/2.2.2/vue.min.js"></script>
</head>
<body>
 
<div id="example">
   <parent-com></parent-com>
</div>
  <script>
  Vue.component('child-com',{
    template:'' +
    '<ul>' +
    '  <slot name="child-ul" v-for="item in animal" v-bind:text="item.name"></slot>' +
    '</ul>',
    data:function(){
      return {
        animal:[
          {name:'大象'},
          {name:'小狗'},
          {name:'小猫'},
          {name:'老虎'}
        ]
      }
    }
  });
  //父组件
  // 在父组件的模板里,使用一个Vue自带的特殊组件<template> ,
  // 并在该组件上使用scope属性,值是一个临时的变量,存着的是由子组件传过来的
  // prop对象,在下面的例子中我把他命名为props。
  // 获得由子传过来的prop对象。这时候,父组件就可以访问子组件在自定义属性上暴露的数据了。
  Vue.component('parent-com',{
    template:'' +
    '<div class="container">' +
    '<p>动物列表</p>' +
    '<child-com>' +
    '  <template scope="props" slot="child-ul">' +
    '    <li class="child-ul">{{ props.text }}</li>' +
    '  </template>' +
    '</child-com>' +
    '</div>'
  });
 
// 创建根实例
new Vue({
 el: '#example',
 
})
</script>
</body>
</html>

希望本文所述对大家vue.js程序设计有所帮助。

Javascript 相关文章推荐
JQuery与Ajax常用代码实现对比
Oct 03 Javascript
js loading加载效果实现代码
Nov 24 Javascript
jQuery.Validate验证库的使用介绍
Apr 26 Javascript
两个select多选模式的选项相互移动(示例代码)
Jan 11 Javascript
基于Jquery easyui 选中特定的tab
Nov 17 Javascript
jQuery实现的右下角广告窗体跟随效果示例
Sep 16 Javascript
微信小程序 开发之快递查询功能的实现
Jan 09 Javascript
JavaScript箭头(arrow)函数详解
Jun 04 Javascript
vue之数据交互实例代码
Jun 16 Javascript
基于原生js运动方式关键点的总结(推荐)
Oct 01 Javascript
JS实现的贪吃蛇游戏完整实例
Jan 18 Javascript
vue中的 $slot 获取插槽的节点实例
Nov 12 Javascript
vue-router 路由传参用法实例分析
Mar 06 #Javascript
JavaScript前端实现压缩图片功能
Mar 06 #Javascript
vue2路由方式--嵌套路由实现方法分析
Mar 06 #Javascript
vue2路由基本用法实例分析
Mar 06 #Javascript
vue 动态组件用法示例小结
Mar 06 #Javascript
extjs图形绘制之饼图实现方法分析
Mar 06 #Javascript
extjs图表绘制之条形图实现方法分析
Mar 06 #Javascript
You might like
PHP数据的提交与过滤基本操作实例详解
2016/11/11 PHP
使用PHPExcel导出Excel表
2018/09/08 PHP
php7新特性的理解和比较总结
2019/04/14 PHP
HTML5附件拖拽上传drop &amp; google.gears实现代码
2011/04/28 Javascript
动态加载script文件的两种方法
2013/08/15 Javascript
node+express+jade制作简单网站指南
2014/11/26 Javascript
jQuery的css() 方法使用指南
2015/05/03 Javascript
js简单网速测试方法完整实例
2015/12/15 Javascript
js防阻塞加载的实现方法
2016/09/09 Javascript
vue基于element的区间选择组件
2018/09/07 Javascript
Vue.js的动态组件模板的实现
2018/11/26 Javascript
Nodejs监控事件循环异常示例详解
2019/09/22 NodeJs
layui动态渲染生成select的option值方法
2019/09/23 Javascript
Python学习之asyncore模块用法实例教程
2014/09/29 Python
实时获取Python的print输出流方法
2019/01/07 Python
Python两个字典键同值相加的几种方法
2019/03/05 Python
PyQt5 对图片进行缩放的实例
2019/06/18 Python
使用python来调用CAN通讯的DLL实现方法
2019/07/03 Python
python绘制多个子图的实例
2019/07/07 Python
Python循环结构的应用场景详解
2019/07/11 Python
django迁移数据库错误问题解决
2019/07/29 Python
Pycharm最新激活码2019(推荐)
2019/12/31 Python
python-xpath获取html文档的部分内容
2020/03/06 Python
Python sqlalchemy时间戳及密码管理实现代码详解
2020/08/01 Python
scrapy头部修改的方法详解
2020/12/06 Python
有机婴儿毛毯和衣服:Monica + Andy
2020/03/01 全球购物
社区十八大感言
2014/01/19 职场文书
《灯光》教学反思
2014/02/08 职场文书
大学生军训感想
2014/02/16 职场文书
挂牌仪式主持词
2014/03/20 职场文书
民生工程实施方案
2014/03/22 职场文书
平面设计师岗位职责
2014/09/18 职场文书
初婚初育证明范本
2014/11/24 职场文书
商务考察邀请函模板
2015/02/02 职场文书
我的长征观后感
2015/06/09 职场文书
职工趣味运动会开幕词
2016/03/04 职场文书