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 相关文章推荐
B/S开发中常用javaScript技术与代码
Mar 09 Javascript
比较详细的关于javascript中void(0)的具体含义解释
Aug 02 Javascript
js 匿名调用实现代码
Jun 19 Javascript
解析URI与URL之间的区别与联系
Nov 22 Javascript
无法获取隐藏元素宽度和高度的解决方案
Mar 07 Javascript
js实现音频控制进度条功能
Apr 01 Javascript
Bootstrap table学习笔记(2) 前后端分页模糊查询
May 18 Javascript
Vue中的$set的使用实例代码
Oct 08 Javascript
vue+elementUI实现表单和图片上传及验证功能示例
May 14 Javascript
JS中call()和apply()的功能及用法实例分析
Jun 28 Javascript
Vue+ElementUI table实现表格分页
Dec 14 Javascript
javascript实现贪吃蛇经典游戏
Apr 10 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 获取客户端真实IP地址多种方法小结
2010/05/15 PHP
tp5框架无刷新分页实现方法分析
2019/09/26 PHP
用Javascript同时提交多个Web表单的方法
2009/12/26 Javascript
javascript 跨浏览器开发经验总结(五) js 事件
2010/05/19 Javascript
Jquery中Ajax 缓存带来的影响的解决方法
2011/05/19 Javascript
JavaScript调用ajax获取文本文件内容实现代码
2014/03/28 Javascript
javascript框架设计读书笔记之字符串的扩展和修复
2014/12/02 Javascript
Javascript访问器属性实例分析
2014/12/30 Javascript
javascript+HTML5 Canvas绘制转盘抽奖
2020/05/16 Javascript
基于BootStrap Metronic开发框架经验小结【二】列表分页处理和插件JSTree的使用
2016/05/12 Javascript
JS简单实现仿百度控制台输出信息效果
2016/09/04 Javascript
两种简单的跨域方法(jsonp、php)
2017/01/02 Javascript
JavaScript实现鼠标点击导航栏变色特效
2017/02/08 Javascript
详解react服务端渲染(同构)的方法
2017/09/21 Javascript
一个Java程序猿眼中的前后端分离以及Vue.js入门(推荐)
2019/04/19 Javascript
node.js的http.createServer过程深入解析
2019/06/06 Javascript
详解Python 定时框架 Apscheduler原理及安装过程
2019/06/14 Python
如何基于Python批量下载音乐
2019/11/11 Python
python json.dumps中文乱码问题解决
2020/04/01 Python
python操作链表的示例代码
2020/09/27 Python
Python用户自定义异常的实现
2020/12/25 Python
详解HTML5中的标签
2015/06/19 HTML / CSS
HTML5中使用postMessage实现Ajax跨域请求的方法
2016/04/19 HTML / CSS
使用CSS实现弹性视频html5案例实践
2012/12/26 HTML / CSS
意大利婴儿产品网上商店:Mukako
2018/10/14 全球购物
将"引用"作为函数返回值类型的格式、好处和需要遵守的规则
2016/02/09 面试题
《云房子》教学反思
2014/04/20 职场文书
大学社团活动总结
2014/04/26 职场文书
义务教育学校标准化建设汇报材料
2014/08/16 职场文书
2014年建筑工程工作总结
2014/12/03 职场文书
人民的好儿女观后感
2015/06/18 职场文书
教务处干事工作总结
2015/08/14 职场文书
如何在Python中创建二叉树
2021/03/30 Python
GitHub上77.9K的Axios项目有哪些值得借鉴的地方详析
2021/06/15 Javascript
python实现简单聊天功能
2021/07/07 Python
Python可视化神器pyecharts之绘制地理图表练习
2022/07/07 Python