首页 > 其他分享 >vue插槽

vue插槽

时间:2022-11-01 11:01:37浏览次数:50  
标签:slot vue obj 插槽 mynum 标签 组件

1.插槽的用处

  1. 组件的插槽也是为了让我们封装的组件更加具有扩展性。

  2. 让使用者可以决定组件内容的一些内容到底展示什么。

 

2.匿名插槽

在子组件中直接使用未标名的slot直接接收模板中全部的元素,该插槽有什么元素完全取决于同级有什么元素.

<div id='app'>
       <child>
           <a href="#">这是a标签</a>
           <button>按钮</button>
       </child>
   </div>
   <template id="tmpl">
       <div>
           <slot></slot>
           <h1>标题</h1>
           <p>内容</p>
       </div>
   </template>

此时在页面中会显示 a标签与按钮 ,并且在标题和内容的上方,所以匿名的slot会直接接收所有的模板内元素

 

3.具名插槽

那要是当我并不是需要全部的元素的时候,我想使用特定的那个的时候,我就可以使用name来进行对应元素绑定

具名元素就可以实现一对一的调用与想调用的位置自由化

步骤:

  1. 使用具名插槽 只要给slot元素一个name属性即可

  2. slot="名字"与下方的name="名字"产生关联

<div id='app'>
       <child>
           <a href="#" slot="link">这是a标签</a>
           <button slot="btn">按钮</button>
       </child>
</div>
   <template id="tmp1">
       <div>
           <slot name="btn"></slot>
           <h1>标签</h1>
           <p>内容</p>
           <slot name="link"></slot>
       </div>
   </template>

 

4.作用域插槽

就是为在组件标签comp中使用comp组件内部的data数据

人话:当我想要在父组件的作用域中使用子组件的方法时我就需要使用slot-scope

步骤:

  1. 通过slot标签传到slot所对应的标签内部

  2. 在对应的这个标签(button标签)身上书写slot-scope(插槽作用域),值为一个对象

  3. 通过 对象名.标签属性 的方式取值

slot-scope="obj" 后面这个obj一般命名为scope

<div id='app'>
       <child>
           <!-- obj即为自定义的对象,用于接收传递而来的自定义参数 -->
  <button slot="btn" slot-scope="obj">按钮{{obj.mynum}} 标题{{obj.title}} </button>  
       </child>
</div>
<template id="tmp1">
       <div>
           <h1>子组件</h1>
            <!-- :mynum="num" 的绑定原理为 :自定义变量="data中的值" -->
           <slot name="btn" :mynum="num" title="插槽作用域"></slot>
       </div>
</template>
<script>
       let child = {
           template: "#tmp1",
           data() {   return {   num: 20,  a: 40
              }}}
       new Vue({
           el: '#app',
           data: {   },
           components: {
               child
          }   })

 

5.作用域插槽的四种不同格式

第一种写法:基本写法

slot-scope="obj" obj这个对象专门接收button这个标签所对应的slot标签身上的标签属性mynum, 作为自己的实例属性

 <button slot="btn" slot-scope="obj">按钮{{obj.mynum}} 标题{{obj.title}}</button>

 

第二种写法:模板基本写法

即为属性直接写在模板(template)上而不是在button中

<template slot="btn" slot-scope="obj">
               <button>按钮{{obj.mynum}} 标题{{obj.title}}</button>
               <p>{{obj.mynum}}</p>
               <p>{{obj.row.date}}</p>
</template>

 

下面两种是2.63版本后新出现的格式

第三种:指令写法

即为直接写在作用域中而里面的元素自然而然就能调用得到

slot="btn" slot-scope="obj" 替换为: v-slot:btn="obj", 写在组件的标签属性的位置

<child v-slot:btn="obj">
    <button>按钮{{obj.mynum}} 标题{{obj.title}}</button>
</child>

 

第四种:指令写法之模板写法

即为缩写与指令写法的结合版

<child>
     <template v-slot:btn="obj">
         <button>按钮{{obj.mynum}} 标题{{obj.title}}</button>
     </template>
</child>
 

标签:slot,vue,obj,插槽,mynum,标签,组件
From: https://www.cnblogs.com/Dollom/p/16846987.html

相关文章

  • 京东云开发者|关于“React 和 Vue 该用哪个”我真的栓Q
    一、前言:我全都要面对当今前端界两座大山一样的主流框架,React和Vue,相信很多小伙伴都或多或少都产生过这样疑问,而这样的问题也往往很让人头疼和犹豫不决:业务场景中是不是......
  • vue之列表排序-计算属性的应用
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><metahttp-e......
  • Vue3学习(四)
    连接数据库实现数据防抖shake.jsexportfunctionshake(fn,delay){lettime=null;returnfunction(){letparameter=arguments;if(time){......
  • Vue3学习(五)
    设置全局参数,调用参数三种方法,阻止默认事件,阻止冒泡,capture捕获设置全局参数 main.ts import{createApp}from'vue'importAppfrom'./App.vue'importrouter......
  • vue之列表过滤
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><metahttp-e......
  • vue动态绑定class的几种方式
    开发项目中:vue动态绑定class的几种方式~第一种:(最简单的绑定)1.绑定单个classhtml部分: <div:class="{'active':isActive}"></div>js部分:判断是否绑定一个activedat......
  • Vue3学习(二)
     <template><h1>方法</h1><inputtype="text"v-model="input3"@input="meth()">+<inputtype="text"v-model="input4"@input="meth()">=......
  • Vue3学习(三)
    <template><h2>姓名:{{user.name}}</h2><h2>姓名:{{user.age}}</h2><h2>姓名:{{user.job.salsry}}k</h2><button@click="user.name+='%'">修改姓名</bu......
  • vue 快速删除node_modules
      因为平时装依赖的时候,有可能会报错怎么不管用的时候,就需要把node_modules文件夹删了重新intall一下,但是直接删的话会要管理员权限,或者各种问题,这个时候就可以使用一个......
  • 使用es6-promise包兼容ie浏览器下的vue项目
    问题描述:“Promise”未定义解决步骤1.下载依赖npmies6-promise--save-dev2. 在入口文件中引入 es6-promise包,并使用(如果你是用vue-cli生成的项目,那么在/sr......