首页 > 其他分享 >vue中的插槽

vue中的插槽

时间:2023-04-17 22:46:11浏览次数:32  
标签:slot vue title 插槽 标签 组件

插槽用大白话讲就是:在子组件中用slot标签占个位置,然后在父组件中,子组件标签里嵌套一个标签,然后执行的时候用嵌套的标签替代slot

子组件:组件MySon定义了一个默认插槽,用slot标签表示。当父组件使用MySon时,可以在其标签内放置任意内容,该内容将会替换掉slot标签。

 1 <template>
 2   <div class="my-son">
 3     <h3>{{ title }}</h3>
 4     <slot></slot>
 5   </div>
 6 </template>
 7 
 8 <script>
 9 export default {
10   name: 'MySon',
11   props:[
12     title: String,
13   ]
14 }
15 </script>

父组件:使用p标签去把子组件的slot标签替换掉,这就是最简单的默认插槽

 1 <template>
 2   <div>
 3     <my-son title="Hello World">
 4       <p>This is the content of MySon component.</p>
 5     </my-son>
 6   </div>
 7 </template>
 8 
 9 <script>
10 import MyCard from './MySon.vue'
11 
12 export default {
13   components: { MySon }
14 }
15 </script>

具名插槽

然后接下来就是比默认插槽复杂一点的具名插槽,顾名思义就是有名字的插槽,当我们写了多个插槽时就需要名字来区分了

子组件:这里看子组件就比默认插槽的slot多了一个name属性,而name属性的内容就是插槽的名子

<template>
  <div class="card">
    <h3>{{ title }}</h3>
    <p>{{ description }}</p>
    <slot name="content"></slot>
    <slot name="footer"></slot>
  </div>
</template>

<script>
export default {
  name: 'MyCard',
  props: {
    title: String,
    description: String
  }
}
</script>

父组件:相比较父组件就要复杂点,先看第4行代码,这里它用template标签包裹,而我们要知道在Vue中,template标签本身不会被渲染到HTML页面中的。

然后就是v-slot可以理解是用来指定替代哪个插槽的,这里第四行v-slot:content,就是说要替代名字为content的插槽,而v-slot:是可以简写为#的

比如v-slot:content简写#content

这里有一个点要思考就是第8行的代码为什么执行的回调函数onClick,要写在父组件中,而不是写在子组件中的,我认为写在父组件中可以使得代码容易阅读,希望vue开发者也是这麽想的哈哈

有知道的可以提出来欢迎指正

 1 <template>
 2   <div>
 3     <my-card title="Hello">
 4       <template v-slot:content>
 5         <p>This is the content of MyCard component.</p>
 6       </template>
 7       <template v-slot:footer>
 8         <button @click="onClick">Click me</button>
 9       </template>
10     </my-card>
11   </div>
12 </template>
13 
14 <script>
15 import MyCard from './MyCard.vue'
16 
17 export default {
18   components: { MyCard },
19   methods: {
20     onClick () {
21       console.log('Button clicked')
22     }
23   }
24 }
25 </script>

接下来就是作用域插槽,作用域插槽子组件向父组件传递数据的一种机制

子组件:

<template>
  <div>
    <h1>{{title}}</h1>
    <!-- 使用slot标签占位 -->
    <!-- slot标签内写属性可以给父组件传值 -->
    <slot name="test" :iii="abc"></slot>
  </div>
</template>

<script>
  export default {
    name:'Test',
    data () {
      return {
        title:'hello world',
        abc:12321
      }
    }
  }
</script>

父组件:

<template>
  <div>
    <Test>
      <!-- 使用='props' 这样props可以接收到子组件在插槽中传过来的值 这里props名字不是固定的,可以写成a,b,c都行-->
        <template  #test="props" >
          <h2>{{props.iii}}</h2>
        </template>
    </Test>
  </div>
</template>

<script>
import Test from './components/Test.vue';
  export default {
    name:'App',
    components: {
      Test
    }
  }

以上就是vue中插槽的简单理解,欢迎各位大佬补充,万分感谢!!!

一起学习一起进步

标签:slot,vue,title,插槽,标签,组件
From: https://www.cnblogs.com/dingjishun/p/17327806.html

相关文章

  • table append 插槽
    <template><el-tableheight='300':data="tableData"style="width:100%"><el-table-columnprop="date"label="Date"width="180"/><el-table-columnprop="name&q......
  • Vue基础语法
    模板语法Vue.js使用了基于HTML的模板语法,允许开发者声明式地将DOM绑定至底层Vue实例的数据。所有Vue.js的模板都是合法的HTML,所以能被遵循规范的浏览器和HTML解析器解析。vue将模板编译成虚拟dom,结合响应系统,Vue能够智能地计算出最少需要重新渲染多少组件,并把DOM......
  • vue加goframe使用AES加解密(记录)
    vue加goframe使用AES加解密首先,需要在前端使用Vue的crypto-js库来进行AES加解密,可以使用以下命令进行安装:npminstallcrypto-js然后在需要加解密的组件中引入该库:importCryptoJSfrom'crypto-js'对于加密,可以使用以下代码:constkey=CryptoJS.enc.Utf8.parse('1234567......
  • vue常用组件之confirm用法及说明
    vue常用组件之confirm用法及说明原文链接:https://www.jb51.net/article/263587.htm+目录vue组件之confirmvue自定义confirm弹窗(全局组件)全局组件方式vue组件之confirm一些自带的方法,比如alert,confirm等,往往由于浏览器不同而展现出不同的样式,为了统一,我们可以自己实现简单封装,......
  • vue3微信公众号商城项目实战系列(6)用户登录
    1.一个商城要实现购物的功能,需要能识别用户的身份,这样才能完成加购物车,下单,付款等操作。但微信公众号商城和PC端商城有些不一样,区别在于微信公众号商城使用微信支付的时候需要一个openid的参数(以后再具体讲)这个参数必须访问微信公众号提供的接口才能获取到,基于这个原因,用户登录......
  • Vue3 ref函数处理基本类型或对象类型
    基本类型视频对象类型视频2.ref函数作用:定义一个响应式的数据语法:constxxx=ref(initValue)创建一个包含响应式数据的引用对象(reference对象,简称ref对象)。JS中操作数据:xxx.value模板中读取数据:不需要.value,直接:<div>{{xxx}}</div>备注:接收的数据可以是:基本......
  • vue插槽
    我们经常会有封装组件的需求,组件需要的往往不只有数据,有时候我们要给一个模块做内容方面的可自定义,比如我封装了一个黑板,但是我有时希望上面是字,又有时希望上面是图画,这就要用到插槽了一.插槽的基本用法子组件<template><el-row><slot></slot></el-ro......
  • 使用vue-cli创建第一个vue项目
    命令提示符切换至需要创建项目的目录:直接在路径输入cmd在按键盘的enter键打开的终端就直接切换到该目录下(1)输入以下命令:vuecreate项目名称(2)我这里选手动选择,键盘上下按钮,选完后按enter键(3)我这里选Babel和CSS,键盘上下按钮,选中或取消选中按空格,选完后按enter键(4)我这里选......
  • vue登录路由权限管理
    前言在开发Web应用程序时,常常需要进行登录验证和权限管理。Vue是一款流行的JavaScript框架,提供了一套灵活的路由管理工具,可以方便地实现登录路由权限管理。本篇博客将介绍如何使用Vue来实现这些功能。登录验证首先,我们需要在Vue应用程序中对用户进行登录验证。在Vue中,我们可以通......
  • vscode调试 vue
    1.配置vue.config.js加上devtool:'source-map'//开发环境可以加,生产环境,别人可以看到源代码,不完全不要加 2.添加launch.jsonvscode打开调试窗口,在下图箭头指向的位置点击打开配置文件launch.json:   3.配置远程调试1)浏览器快捷方式设置浏览器桌面快捷方式......