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 数据缓存data(name, value)详解及实现
Jan 04 Javascript
Javascript学习笔记一 之 数据类型
Dec 15 Javascript
js页面跳转的常用方法整理
Oct 18 Javascript
Javascript基础教程之switch语句
Jan 18 Javascript
js实现的鼠标滚轮滚动切换页面效果(类似360默认页面滚动切换效果)
Jan 27 Javascript
微信公众号支付H5调用支付解析
Nov 04 Javascript
微信小程序 扎金花简单实例
Feb 21 Javascript
详解微信小程序 template添加绑定事件
Jun 23 Javascript
Vue cli 引入第三方JS和CSS的常用方法分享
Jan 20 Javascript
Element-ui table中过滤条件变更表格内容的方法
Mar 02 Javascript
微信小程序实现吸顶效果
Jan 08 Javascript
webpack.DefinePlugin与cross-env区别详解
Feb 23 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 array_slice函数的使用以及参数详解
2008/08/30 PHP
PHP 转义使用详解
2013/07/15 PHP
PHP实现获取文件后缀名的几种常用方法
2015/08/08 PHP
学习php设计模式 php实现状态模式
2015/12/07 PHP
laravel + vue实现的数据统计绘图(今天、7天、30天数据)
2018/07/31 PHP
Codeigniter里的无刷新上传的实现代码
2019/04/14 PHP
PhpStorm2020.1 安装 debug - Postman 调用的详细教程
2020/08/17 PHP
eval与window.eval的差别分析
2011/03/17 Javascript
13 个JavaScript 性能提升技巧分享
2012/07/26 Javascript
JavaScript自定义事件介绍
2013/08/29 Javascript
推荐25个超炫的jQuery网格插件
2014/11/28 Javascript
JavaScript编程中容易出BUG的几点小知识
2015/01/31 Javascript
jQuery使用attr()方法同时设置多个属性值用法实例
2015/03/26 Javascript
Knockout自定义绑定创建方法
2015/12/26 Javascript
AngularJS中$watch和$timeout的使用示例
2016/09/20 Javascript
JS文件上传神器bootstrap fileinput详解
2021/01/28 Javascript
vue实现登录后页面跳转到之前页面
2018/01/07 Javascript
微信小程序之滑动页面隐藏和显示组件功能的实现代码
2020/06/19 Javascript
JS实现简易图片自动轮播
2020/10/16 Javascript
html中创建并调用vue组件的几种方法汇总
2020/11/17 Javascript
Python中import机制详解
2017/11/14 Python
基于pip install django失败时的解决方法
2018/06/12 Python
pycharm使用matplotlib.pyplot不显示图形的解决方法
2018/10/28 Python
python实现图书借阅系统
2019/02/20 Python
Python web框架(django,flask)实现mysql数据库读写分离的示例
2020/11/18 Python
匈牙利墨盒和碳粉购买网站:CDRmarket
2018/04/14 全球购物
Tahari ASL官方网站:高级设计师女装
2021/03/15 全球购物
C#的几个面试问题
2016/05/22 面试题
酒店办公室文员岗位职责
2013/12/18 职场文书
学校岗位设置方案
2014/01/16 职场文书
高中生评语大全
2014/04/25 职场文书
2014年征兵标语
2014/06/20 职场文书
群众路线班子对照检查材料
2014/09/25 职场文书
考试作弊检讨书
2015/01/27 职场文书
工作简报范文
2015/07/21 职场文书
《西门豹》教学反思
2016/02/23 职场文书