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 api参考 visualjquery 中国线路 速度快
Nov 30 Javascript
jquery 选项卡效果 新手代码
Jul 08 Javascript
文字不间断滚动(上下左右)实例代码
Apr 21 Javascript
限制上传文件大小和格式的jQuery插件实例
Jan 24 Javascript
javascript常用函数(1)
Nov 04 Javascript
jquery分页插件jquery.pagination.js实现无刷新分页
Apr 01 Javascript
Bootstrap表单控件学习使用
Mar 07 Javascript
JavaScript文件的同步和异步加载的实现代码
Aug 19 Javascript
JavaScript实现的数字与字符串转换功能示例
Aug 23 Javascript
vue router demo详解
Oct 13 Javascript
js核心基础之构造函数constructor用法实例分析
May 11 Javascript
解决vue 退出动画无效的问题
Aug 09 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安装问题
2006/10/09 PHP
PHP6新特性分析
2016/03/03 PHP
php foreach如何跳出两层循环(详解)
2016/11/05 PHP
PHP Mysqli 常用代码集合
2016/11/12 PHP
PHP实现生成推广海报的方法详解
2018/03/14 PHP
让Laravel API永远返回JSON格式响应的方法示例
2018/09/05 PHP
js函数返回多个返回值的示例代码
2013/11/05 Javascript
JavaScript设计模式之外观模式介绍
2014/12/28 Javascript
JavaScript实现列表分页功能特效
2015/05/15 Javascript
Javascript中的迭代、归并方法详解
2016/06/14 Javascript
js实现统计字符串中特定字符出现个数的方法
2016/08/02 Javascript
JavaScript生成验证码并实现验证功能
2016/09/24 Javascript
JS正则替换掉小括号及内容的方法
2016/11/29 Javascript
nodejs的压缩文件模块archiver用法示例
2017/01/18 NodeJs
深入理解Webpack 中路径的配置
2017/06/17 Javascript
Vue内容分发slot(全面解析)
2017/08/19 Javascript
React-Native之定时器Timer的实现代码
2017/10/04 Javascript
浅谈vue项目4rs vue-router上线后history模式遇到的坑
2018/09/27 Javascript
vue 中Virtual Dom被创建的方法
2019/04/15 Javascript
JsonProperty 的使用方法详解
2019/10/11 Javascript
ES6实现图片切换特效代码
2020/01/14 Javascript
[05:05]第三天的dota2
2013/07/29 DOTA
在Django的通用视图中处理Context的方法
2015/07/21 Python
如何在sae中设置django,让sae的工作环境跟本地python环境一致
2017/11/21 Python
利用python将xml文件解析成html文件的实现方法
2017/12/22 Python
Python之循环结构
2019/01/15 Python
使用Python画出小人发射爱心的代码
2019/11/23 Python
python实现猜数游戏
2020/03/27 Python
Django中Q查询及Q()对象 F查询及F()对象用法
2020/07/09 Python
scrapy在python爬虫中搭建出错的解决方法
2020/11/22 Python
Myprotein荷兰官网:欧洲第一运动营养品牌
2020/07/11 全球购物
database面试题
2013/03/28 面试题
财务工作个人求职的自我评价
2013/12/19 职场文书
个人简历自我评价
2014/01/06 职场文书
大二学习计划书范文
2014/04/27 职场文书
股东授权委托书
2014/10/15 职场文书