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 相关文章推荐
基于jQuery的投票系统显示结果插件
Aug 12 Javascript
JS去除右边逗号的简单方法
Jul 03 Javascript
js跑步算法的实现代码
Dec 04 Javascript
javascript中apply和call方法的作用及区别说明
Feb 14 Javascript
innerHTML在IE中报错解决方案
Dec 15 Javascript
深入浅析JavaScript中对事件的三种监听方式
Sep 29 Javascript
ES6中如何使用Set和WeakSet
Mar 10 Javascript
基于BootStrap Metronic开发框架经验小结【九】实现Web页面内容的打印预览和保存操作
May 12 Javascript
关闭Vue计算属性自带的缓存功能方法
Mar 02 Javascript
浅谈vue项目打包优化策略
Sep 29 Javascript
webpack打包html里面img后src为“[object Module]”问题
Dec 22 Javascript
jQuery 移除事件的方法
Jun 20 jQuery
在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 fsockopen函数被禁用的解决办法
2013/08/07 PHP
MongoDB在PHP中的常用操作小结
2014/02/20 PHP
php判断目录存在的简单方法
2019/09/26 PHP
简介JavaScript中fixed()方法的使用
2015/06/08 Javascript
使用javascript将时间转换成今天,昨天,前天等格式
2015/06/25 Javascript
Angularjs中UI Router全攻略
2016/01/29 Javascript
Vue.js第四天学习笔记
2016/12/02 Javascript
javascript基础练习之翻转字符串与回文
2017/02/20 Javascript
ztree简介_动力节点Java学院整理
2017/07/19 Javascript
JavaScript canvas实现围绕旋转动画
2017/11/18 Javascript
Vim快速合并行及vim 将文件所有行合并到一行
2017/11/27 Javascript
使用webpack3.0配置webpack-dev-server教程
2018/05/29 Javascript
详解从0开始搭建微信小程序(前后端)的全过程
2019/04/15 Javascript
vue项目打包后怎样优雅的解决跨域
2019/05/26 Javascript
实例详解带参数的 npm script
2019/05/28 Javascript
原生js拖拽实现图形伸缩效果
2020/02/10 Javascript
vue组件是如何解析及渲染的?
2021/01/13 Vue.js
[01:47]2018年度DOTA2最佳教练-完美盛典
2018/12/16 DOTA
浅谈python中字典append 到list 后值的改变问题
2018/05/04 Python
python tkinter界面居中显示的方法
2018/10/11 Python
Python调用C++,通过Pybind11制作Python接口
2018/10/16 Python
matplotlib实现区域颜色填充
2019/03/18 Python
python 实现目录复制的三种小结
2019/12/04 Python
pytorch 模型的train模式与eval模式实例
2020/02/20 Python
python 计算概率密度、累计分布、逆函数的例子
2020/02/25 Python
在pytorch中实现只让指定变量向后传播梯度
2020/02/29 Python
python中有帮助函数吗
2020/06/19 Python
python装饰器实现对异常代码出现进行自动监控的实现方法
2020/09/15 Python
Jupyter安装链接aconda实现过程图解
2020/11/02 Python
CSS3过渡transition效果实例介绍
2016/05/03 HTML / CSS
巧用CSS3的calc()宽度计算做响应模式布局的方法
2018/03/22 HTML / CSS
html5 拖拽及用 js 实现拖拽功能的示例代码
2020/10/23 HTML / CSS
struct与class的区别
2014/02/03 面试题
先进单位申报材料
2014/12/25 职场文书
2019优秀干部竞聘演讲稿范文!
2019/07/02 职场文书
Mysql 如何查询时间段交集
2021/06/08 MySQL