Vue中的slot使用插槽分发内容的方法


Posted in Javascript onMarch 01, 2018

本文题材来自:https://cn.vuejs.org/v2/guide/components.html#%E4%BD%BF%E7%94%A8%E6%8F%92%E6%A7%BD%E5%88%86%E5%8F%91%E5%86%85%E5%AE%B9

<slot></slot>标签,简单来说就是占位符,它会帮你占好位置,等你需要的时候直接将html传入,它会帮你显示出来。

也有人说:props可以将数据从父组件传入子组件,slot可以将html从父组件传入子组件。那么如何实现呢?

单个插槽:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <script type="text/javascript" src="vue.min.js"></script>
  </head>
  <body>
    <div id="app">
      <h1>我是父组件的标题</h1>
      <my-component>
        <p>这是一些初始内容</p>
        <p>这是更多的初始内容</p>
      </my-component>
    </div>
    <script type="text/javascript">
      Vue.component('my-component', {
       // 有效,因为是在正确的作用域内
       template: '<div>\
              <h2>我是子组件的标题</h2>\
              <slot>只有在没有要分发的内容时才会显示。</slot>\
            </div>',
       data: function () {
        return {
         
        }
       }
      });
      new Vue({
        el:'#app',
        data:{
          msg:'你好啊'
        }
      })

    </script>
  </body>
</html>

组件中的模板中写入slot标签,在父级调用子组件的时候传入html即可。

具名插槽:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <script type="text/javascript" src="vue.min.js"></script>
  </head>
  <body>
    <div id="app">
      <my-component>
         <h1 slot="header">这里可能是一个页面标题</h1>

         <p>主要内容的一个段落。</p>
         <p>另一个主要段落。</p>

         <p slot="footer">这里有一些联系信息</p>
      </my-component>
    </div>
    <script type="text/javascript">
      Vue.component('my-component', {
       // 有效,因为是在正确的作用域内
       template: '<div class="container">\
             <header>\
              <slot name="header"></slot>\
             </header>\
              <main>\
              <slot></slot>\
             </main>\
             <footer>\
              <slot name="footer"></slot>\
             </footer>\
            </div>',
       data: function () {
        return {
         
        }
       }
      });
      new Vue({
        el:'#app',
        data:{
          msg:'你好啊'
        }
      })

    </script>
  </body>
</html>

具名插槽,顾名思义当有多个slot标签时,你需要给他们起个自己的名字,在父组件调用时需要slot="内部的对应名字",当存在没有命名的slot标签时,父级组件传入的默认html代码将全部输出在无名的slot标签中。

作用域插槽

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <script type="text/javascript" src="vue.min.js"></script>
  </head>
  <body>
    <div id="app">
       <!-- 在父级中,具有特殊特性 slot-scope 的 <template> 元素必须存在,表示它是作用域插槽的模板。slot-scope 的值将被用作一个临时变量名,此变量接收从子组件传递过来的 prop 对象: -->
       <child>
        <template scope="props">
         <span>hello from parent</span><br>
         <span>{{ props.text }}</span>
        </template>
      </child>
    </div>
    <script type="text/javascript">
      // 在子组件中,只需将数据传递到插槽,就像你将 prop 传递给组件一样:
      Vue.component('child',{
        template:'<ul>' +
              '<slot text="hello from child"></slot>' +
             '</ul>',
        data:function(){
         return {

         }
        },
      });
      new Vue({
        el:'#app',
        data:{
          msg:'你好啊'
        }
      })

    </script>
  </body>
</html>

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

其实就是相当于,在父组件中可以获取到子组件传递出来的props对象,从而渲染到父组件上。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
CSS+JS构建的图片查看器
Jul 22 Javascript
JavaScript实用技巧(一)
Aug 16 Javascript
web基于浏览器的本地存储方法应用
Nov 27 Javascript
js加载读取内容及显示与隐藏div示例
Feb 13 Javascript
jquery如何根据值设置默认的选中项
Mar 17 Javascript
js中一维数组和二位数组中的几个问题示例说明
Jul 17 Javascript
AngularJS基础知识笔记之表格
May 10 Javascript
js实现黑色简易的滑动门网页tab选项卡效果
Aug 31 Javascript
原生JS实现N级菜单的代码
May 21 Javascript
JS实现数组去重方法总结(六种方法)
Jul 14 Javascript
JS一个简单的注册页面实例
Sep 05 Javascript
Vue实现商品详情页的评价列表功能
Sep 04 Javascript
在vue中封装可复用的组件方法
Mar 01 #Javascript
JavaScript判断日期时间差的实例代码
Mar 01 #Javascript
Vue 父子组件的数据传递、修改和更新方法
Mar 01 #Javascript
vue2.0 子组件改变props值,并向父组件传值的方法
Mar 01 #Javascript
浅谈vue单一组件下动态修改数据时的全部重渲染
Mar 01 #Javascript
vue 虚拟dom的patch源码分析
Mar 01 #Javascript
基于cropper.js封装vue实现在线图片裁剪组件功能
Mar 01 #Javascript
You might like
PHP Imagick完美实现图片裁切、生成缩略图、添加水印
2016/02/22 PHP
php实现图片上传时添加文字和图片水印技巧
2020/04/18 PHP
php rmdir使用递归函数删除非空目录实例详解
2016/10/20 PHP
CentOS7编译安装php7.1的教程详解
2019/04/18 PHP
IE与FireFox的兼容性问题分析
2007/04/22 Javascript
关于UTF-8的客户端用AJAX方式获取GB2312的服务器端乱码问题的解决办法
2010/11/30 Javascript
避免回车键导致的页面无意义刷新的解决方法
2011/04/12 Javascript
javascript面向对象之对象的深入理解
2015/01/13 Javascript
js实现类似于add(1)(2)(3)调用方式的方法
2015/03/04 Javascript
使用JavaScript脚本无法直接改变Asp.net中Checkbox控件的Enable属性的解决方法
2015/09/16 Javascript
jQuery 监控键盘一段时间没输入
2016/04/22 Javascript
JavaScript实现设计模式中的单例模式的一些技巧总结
2016/05/17 Javascript
利用Query+bootstrap和js两种方式实现日期选择器
2017/01/10 Javascript
JS实现列表页面隔行变色效果
2017/03/25 Javascript
详解vue模拟加载更多功能(数据追加)
2017/06/23 Javascript
js中!和!!的区别与用法
2020/05/09 Javascript
详解vue-router的导航钩子(导航守卫)
2020/11/02 Javascript
[01:14:35]DOTA2上海特级锦标赛B组资格赛#1 Alliance VS Fnatic第一局
2016/02/26 DOTA
[01:07:41]IG vs VGJ.T 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python list 合并连接字符串的方法
2013/03/09 Python
Python实现字典的key和values的交换
2015/08/04 Python
Python遍历目录中的所有文件的方法
2016/07/08 Python
python实现数独游戏 java简单实现数独游戏
2018/03/30 Python
实用自动化运维Python脚本分享
2018/06/04 Python
简单了解python中对象的取反运算符
2019/07/01 Python
Python 使用元类type创建类对象常见应用详解
2019/10/17 Python
python分布式编程实现过程解析
2019/11/08 Python
通过代码实例了解Python sys模块
2020/09/14 Python
python 调用API接口 获取和解析 Json数据
2020/09/28 Python
彪马英国官网:PUMA英国
2019/02/11 全球购物
PHP使用Redis队列执行定时任务实例讲解
2021/03/24 PHP
《十六年前的回忆》教学反思
2014/02/14 职场文书
2015年学雷锋活动总结
2015/02/06 职场文书
创业计划书之物流运送
2019/09/17 职场文书
python3+PyQt5+Qt Designer实现界面可视化
2021/06/10 Python
使用 CSS 构建强大且酷炫的粒子动画效果
2022/08/14 HTML / CSS