Vue:插槽slot

1. 概述

slot翻译为插槽,在生活中,我们也见过许多插槽,比如电源插座,USB插口等,这些都是插槽,它们起着各自的作用。

在组件中,我们可以通过插槽slot来添加各自的功能,有助于增强组件的扩展性。

比如在一个组件中,我们想多次调用,但每次调用组件后又想让它们有不同的地方,那么我们就可以在组件中预留插槽,然后在插槽中添加它们的不同。


2. 基本使用

<body>
  <script src='../js/vue.js'></script>
  <div id='app'>
    <cpn><button>click</button></cpn>
    <cpn><input type="text"></cpn>
    <cpn><a href="">百度</a></cpn>
    <cpn></cpn>
  </div>
  
  <template id="cpn">
    <div>
      <h1>相同的地方</h1>
      <slot>不同的地方</slot>//声明插槽
    </div>
  </template>
  
  <script>
    const cpn = {
      template: '#cpn'
    }
    const app = new Vue({
      el: '#app',
      data: {
        message: 'Hello Vue!'
      },
      components: {
        cpn
      }
    });
  </script>
</body>

这里在子组件中声明了一个插槽slot,然后在调用时给不同cpn内部添加自己想要的元素,它会将cpn内部添加的所有元素替代掉slot插槽,如果没有添加,则会默认显示slot内部元素信息。

在这里插入图片描述


3. 具名插槽

所谓具名插槽就是给插槽添加了name属性,然后在使用时,通过cpn内的slot属性等于插槽名来使用插槽。

<body>
  <script src='../js/vue.js'></script>
  <div id='app'>
    <cpn><span slot="slot2">已替换</span></cpn>
    <cpn>123</cpn>
  </div>
  <template id="cpn">
    <div>
      <h1>相同的部分</h1>
      <slot name='slot1'><span>left</span> </slot>
      <slot name='slot2'><span>center</span></slot>
      <slot name='slot3'><span>right</span> </slot>
      <slot>我是默认的部分</slot>
    </div>

  </template>

  <script>
    const cpn = {
      template: '#cpn'
    }
    const app = new Vue({
      el: '#app',
      data: {
        message: 'Hello Vue!'
      },
      components: {
        cpn
      }
    });
  </script>
</body>

这里在子组件中声明了4个插槽,前三个分别设置了name属性,在父组件中调用了两个cpn
第一个对name=‘slot2’的插槽进行了更换,其余没变
第二个没声明slot属性,直接改用内部值为123

结果如下
在这里插入图片描述
可以看出
第一个cpn确实已经对第二个插槽发生了修改
第二个cpn
由于没有声明slot属性,因此只是将123替换了也未声明name属性的插槽


4. 作用域插槽

什么叫作用域插槽?
顾名思义,插槽,还用上了作用域!

我们知道,data里的数据只能在当前组件里使用,如果想要使用还得组件传值,那如果我么想要在父组件里拿到子组件里的数据并按照自己想要的格式显示,有什么好的方法吗?
那就是作用域插槽

其实就是通过在slot标签上添加 v-bind 属性将数据动态绑定,然后父组件就可以通过在引用组件里的最外层标签的 slot-scope属性上获得。

步骤:
1.子组件通过v-bind属性动态绑定数据
2.父组件在引用组件cpn里声明一个外层div(vue2.5.x以下只能用template),在div上通过slot-scope(作用域插槽)等于slot获取到子组件里的插槽属性
3.然后就可以调用得到的插槽里的数据,就能按照自己想要的形式显示

上代码

<body>
  <script src='../js/vue.js'></script>
  <div id='app'>
    <cpn>
      <div slot-scope='slot'>
        <h3>1.无序列表显示</h3>
        <ul>
          <li v-for='item in slot.movies'>{{item}}</li>
        </ul>
        <h3>2.通过 ' - '隔开显示</h3>
        <span>{{slot.movies.join(' - ')}}</span>
      </div>
    </cpn>
  </div>

  <template id="cpn">
    <div>
      <slot :movies='movies'></slot>
    </div>
  </template>
  <script>

    const app = new Vue({
      el: '#app',
      data: {
      },
      components: {
        cpn: {
          template: '#cpn',
          data() {
            return {
              movies: ['金刚大战哥斯拉', '极速蜗牛', '复仇者联盟']
            }
          }
        }
      }
    });
  </script>
</body>

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
系统根据B/S,即所谓的电脑浏览器/网络服务器方式,运用Java技术性,挑选MySQL作为后台系统。系统主要包含对客服聊天管理、字典表管理、公告信息管理、金融工具管理、金融工具收藏管理、金融工具银行卡管理、借款管理、理财产品管理、理财产品收藏管理、理财产品银行卡管理、理财银行卡信息管理、银行卡管理、存款管理、银行卡记录管理、取款管理、转账管理、用户管理、员工管理等功能模块。 文中重点介绍了银行管理的专业技术发展背景和发展状况,随后遵照软件传统式研发流程,最先挑选适用思维和语言软件开发平台,依据需求分析报告模块和设计数据库结构,再根据系统功能模块的设计制作系统功能模块图、流程表和E-R图。随后设计架构以及编写代码,并实现系统能模块。最终基本完成系统检测和功能测试。结果显示,该系统能够实现所需要的作用,工作状态没有明显缺陷。 系统登录功能是程序必不可少的功能,在登录页面必填的数据有两项,一项就是账号,另一项数据就是密码,当管理员正确填写并提交这二者数据之后,管理员就可以进入系统后台功能操作区。进入银行卡列表,管理员可以进行查看列表、模糊搜索以及相关维护等操作。用户进入系统可以查看公告和模糊搜索公告信息、也可以进行公告维护操作。理财产品管理页面,管理员可以进行查看列表、模糊搜索以及相关维护等操作。产品类型管理页面,此页面提供给管理员的功能有:新增产品类型,修改产品类型,删除产品类型。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值