java大师博客网站

vue教程

  • vue模拟el-table演示插槽用法 最近开发了一套图书管理系统,有兴趣的同学可以看下:图书管理系统演示 很多人知道插槽分为三种,但是实际到elementui当中为什么这么用,就一脸懵逼,接下来就跟大家聊一聊插槽在elementui中的应用,...
  • 通过封装el-table的方式,创建我们自己的Mytable组件 做了一个图书管理系统,有兴趣的朋友可以看下:图书管理系统演示 1、好处: 通过封装 el-table 组件,创建我们自己的 Mytable 组件,可以带来以下好处: 复用代码...
  • Login.vue <template> <div class="login-container"> <el-card class="login-card"> <h3 class="login-title...
  • vue3整合axios 3.1导入依赖 npm install axios 3.2新建util文件夹,创建api.js import axios from 'axios' import {ElLoading,ElMessage} from 'e...
  • vue3 hook函数返回多个对象 如果你想导出一个使用ref包装的对象,你可以使用toRef函数将对象的属性转换为响应式引用。这样,当属性的值发生变化时,它将自动触发重新渲染。 以下是一个示例代码: import { ref, toRef ...
  • vue通用的增删改查按钮组件 代码复用:这个组件可以在多个页面或组件中使用,避免了重复编写相同的按钮代码。 灵活性:通过showButtons属性,可以根据需要显示不同的按钮。默认情况下,它会显示添加、修改和删除按钮,但你也可以根据具体情况传递...
  • vue动态路由页面刷新后路由消失处理 原因:页面刷新后,页面会重新实例化路由数据,因为是动态路由,所以页面刷新后会将router置为router/index.js配置的原始路由数据,所以匹配路由地址的时候会报错。因为只需要在用户会话期间保持动态路...
  • 在ES6中,我们可以使用几种方式来遍历对象。下面是其中的几种方式,并附带详细的示例: for...in循环: 使用for...in循环可以遍历对象的可枚举属性。它会遍历对象自身的属性以及继承的属性(如果属性是可枚举的)。 const obj ...
  • 要使用自己的directives指令,需要按照以下步骤进行: 在Vue实例中注册指令 在Vue实例的创建函数中,可以使用Vue.directive方法来注册自定义指令。例如: // 创建Vue实例 var app = new Vue({ e...
  • Vue2和ElementUI编写的无限级菜单路由 文章转载自:www.javaman.cn <template> <div> <el-menu :default-active="$route.path" clas...
vue入门教程之-插槽 - java大师  java大师博客网站

vue入门教程之-插槽

欢迎关注博主公众号「java大师」, 专注于分享Java领域干货文章, 关注回复「资源」, 免费领取全网最热的Java架构师学习PDF, 转载请注明出处 https://www.javaman.cn/vue/vue-slot

上一节我们讲了vue的组件,本节我们来讲一下vue的另一个概念插槽

1、为什么要用插槽?

< slot > 元素

Shadow DOM 使用 元素将不同的 DOM 树组合在一起。Slot 是组件内部的占位符,用户可以使用自己的标记来填充。

通过定义一个或多个 slot,您可将外部标记引入到组件的 shadow DOM 中进行渲染。 这相当于您在说“在此处渲染用户的标记”。

通俗点说:

slot是对组件的扩展,通过slot插槽向组件内部指定位置传递内容,通过slot可以父子传参;是“占坑”,在组件模板中占好了位置,当使用该组件标签时候,组件标签里面的内容就会自动填坑(替换组件模板中< slot >位置),当插槽也就是坑< slot name=”mySlot”>有命名时,组件标签中使用属性slot=”mySlot”的元素就会替换该对应位置内容;

vue-slot图解

2、插槽-slot

(1) html代码

下图中定义了一个组件todo,todo中的template中用slot关键字定义了三个插槽title,content和category

每个插糟实际上也是一个component组件

<div id="app">
    <!--将title,content和category通过属性与data数据进行绑定 -->
    <todo>
        <todo-title slot="title" :title="title"></todo-title>
        <todo-content slot="content" :content="content"></todo-content>
        <todo-category slot="category" v-for="category in categorys" :category="category"></todo-ategory>
    </todo>
    </div>

    
    
        //定义插槽的名字
        Vue.component('todo',{
            template:
                '<div>' +
                    '<slot name="title"></slot>'+
                    '<slot name="content"></slot>'+
                    '分类:'+
                    '<ul>' +
                        '<slot name="category"></slot>'+
                    '</ul>'+
                '</div>'
        })

        //定义todo-title组件,通过title属性,将值传给title
        Vue.component('todo-title',{
            props: ['title'],
            template:'<h3>标题:{{title}}</h3>'
        })
		//定义todo-content组件,通过content属性,将值传给content
        Vue.component('todo-content',{
            props: ['content'],
            template:'<p>内容:{{content}}</p>'
        })
		//定义todo-category,通过category属性,将值传给category
        Vue.component('todo-category',{
            props: ['category'],
            template:'<li>{{category}}</li>'
        })

        var vm = new Vue({
            el:"#app",
            data:{
                title:"java大师",
                content:"我爱java,我爱学习,我要成为富二代",
                categorys:["java","IT技术","大牛"]
            }
        });
    
(2)运行结果如下图:

vue-slot运行结果


全部评论: 0

    我有话说: