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 相关文章推荐
Extjs4中Form的使用之本地hiddenfield
Nov 26 Javascript
28个常用JavaScript方法集锦
Jan 14 Javascript
jQuery中empty()方法用法实例
Jan 16 Javascript
js 上传文件预览的简单实例
Aug 16 Javascript
利用angular.copy取消变量的双向绑定与解析
Nov 25 Javascript
js实现自定义路由
Feb 04 Javascript
JavaScript中清空数组的三种方式
Mar 22 Javascript
easyui datagrid 表格中操作栏 按钮图标不显示的解决方法
Jul 27 Javascript
详解node服务器中打开html文件的两种方法
Sep 18 Javascript
react.js 父子组件数据绑定实时通讯的示例代码
Sep 25 Javascript
vue.js开发实现全局调用的MessageBox组件实例代码
Nov 22 Javascript
js中Generator函数的深入讲解
Apr 07 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
DIY实用性框形天线
2021/03/02 无线电
在PHP语言中使用JSON和将json还原成数组的方法
2016/07/19 PHP
laravel 如何实现引入自己的函数或类库
2019/10/15 PHP
提高代码性能技巧谈—以创建千行表格为例
2006/07/01 Javascript
javascript 鼠标滚轮事件
2009/04/09 Javascript
AJAX使用了UpdatePanel后无法使用alert弹出脚本
2010/04/02 Javascript
Jquery下EasyUI组件中的DataGrid结果集清空方法
2014/01/06 Javascript
jquery实现聚光灯效果的方法
2015/02/06 Javascript
JavaScript阻止浏览器返回按钮的方法
2015/03/18 Javascript
跟我学习javascript的异步脚本加载
2015/11/20 Javascript
Vue.js基础知识汇总
2016/04/27 Javascript
使用three.js 画渐变的直线
2016/06/05 Javascript
Angularjs 自定义服务的三种方式(推荐)
2016/08/02 Javascript
微信小程序Redux绑定实例详解
2017/06/07 Javascript
原生JS进行前后端同构
2018/04/22 Javascript
JS复杂判断的更优雅写法代码详解
2018/11/07 Javascript
详解nodejs 配置文件处理方案
2019/01/02 NodeJs
jQuery+vue.js实现的多选下拉列表功能示例
2019/01/15 jQuery
我要点爆”微信小程序云开发之项目建立与我的页面功能实现
2019/05/26 Javascript
javascript中layim之查找好友查找群组
2021/02/06 Javascript
python 脚本生成随机 字母 + 数字密码功能
2018/05/26 Python
python 顺时针打印矩阵的超简洁代码
2018/11/14 Python
python 计算平均平方误差(MSE)的实例
2019/06/29 Python
关于TensorFlow新旧版本函数接口变化详解
2020/02/10 Python
使用Keras实现Tensor的相乘和相加代码
2020/06/18 Python
Python matplotlib图例放在外侧保存时显示不完整问题解决
2020/07/28 Python
利用CSS3实现毛玻璃效果示例源码
2016/09/25 HTML / CSS
HTML5 图片预加载的示例代码
2020/03/25 HTML / CSS
大四本科生的自我评价
2013/12/30 职场文书
初三学生评语大全
2014/04/24 职场文书
诚信的演讲稿范文
2014/05/12 职场文书
2014年冬季防火方案
2014/05/21 职场文书
高中课程设置方案
2014/05/28 职场文书
组工干部对照检查材料
2014/08/25 职场文书
大学生简历自我评价2015
2015/03/03 职场文书
服务器SVN搭建图文安装过程
2022/06/21 Servers