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 相关文章推荐
JavaScript插入动态样式实现代码
Feb 22 Javascript
浅析JavaScript基本类型与引用类型
May 28 Javascript
jquery实现未经美化的简洁TAB菜单效果
Aug 28 Javascript
javascript学习总结之js使用技巧
Sep 02 Javascript
js滑动提示效果代码分享
Mar 10 Javascript
原生javascript+css3编写的3D魔方动画旋扭特效
Mar 14 Javascript
js replace()去除代码中空格的实例
Feb 14 Javascript
angular2中router路由跳转navigate的使用与刷新页面问题详解
May 07 Javascript
vue 粒子特效的示例代码
Sep 19 Javascript
详解将微信小程序接口Promise化并使用async函数
Aug 05 Javascript
Vue学习之常用指令实例详解
Jan 06 Javascript
Vue父子组件传值的一些坑
Sep 16 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
十大催泪虐心动漫,你能坚持看到第几部?
2020/03/04 日漫
php中修改浏览器的User-Agent来伪装你的浏览器和操作系统
2011/07/29 PHP
PHP操作Memcache实例介绍
2013/06/14 PHP
ubuntu下编译安装xcache for php5.3 的具体操作步骤
2013/06/18 PHP
解析PHP中的file_get_contents获取远程页面乱码的问题
2013/06/25 PHP
php中的PHP_EOL换行符详细解析
2013/10/26 PHP
CentOS7系统搭建LAMP及更新PHP版本操作详解
2020/03/26 PHP
jQuery学习4 浏览器的事件模型
2010/02/07 Javascript
JavaScript表达式:URL 协议介绍
2013/03/10 Javascript
jQuery插件实现表格隔行换色且感应鼠标高亮行变色
2013/09/22 Javascript
js报$ is not a function 的问题的解决方法
2014/01/20 Javascript
JavaScript onkeydown事件入门实例(键盘某个按键被按下)
2014/10/17 Javascript
使用JavaScript+canvas实现图片裁剪
2015/01/30 Javascript
javascript中JSON对象与JSON字符串相互转换实例
2015/07/11 Javascript
Web Uploader文件上传插件使用详解
2016/05/10 Javascript
vue2 如何实现div contenteditable=“true”(类似于v-model)的效果
2017/02/08 Javascript
使用JavaScript进行表单校验功能
2017/08/01 Javascript
微信小程序入口场景的问题集合与相关解决方法
2019/06/26 Javascript
layui数据表格跨行自动合并的例子
2019/09/02 Javascript
实例讲解python函数式编程
2014/06/09 Python
python使用datetime模块计算各种时间间隔的方法
2015/03/24 Python
PyQt5每天必学之组合框
2018/04/20 Python
使用Python处理Excel表格的简单方法
2018/06/07 Python
pytorch dataloader 取batch_size时候出现bug的解决方式
2020/02/20 Python
Pytorch 图像变换函数集合小结
2021/02/01 Python
CSS3 选择器 伪类选择器介绍
2012/01/21 HTML / CSS
实习生个人找工作的自我评价
2013/10/30 职场文书
经管应届生求职信
2013/11/17 职场文书
园林技术个人的自我评价
2014/01/08 职场文书
十八届三中全会感言
2014/03/10 职场文书
慈善晚会策划方案
2014/05/14 职场文书
校本教研活动总结
2014/07/01 职场文书
法定代表人授权委托书范文
2014/08/02 职场文书
酒店辞职书范文
2015/02/26 职场文书
【HBU】数据库第四周 单表查询
2021/04/05 SQL Server
Python合并pdf文件的工具
2021/07/01 Python