首页 > 其他分享 >vue-slot及自定义分发

vue-slot及自定义分发

时间:2023-01-03 10:25:51浏览次数:31  
标签:slot index vue 自定义 title component Vue template todo

Vue-slot插槽

应用在组合组件的场景中


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div id="app">
    <todo>
      <todo-title slot="todo-title" v-bind:title="title"></todo-title>   <!--  v-bind简写为一个冒号:-->
        <todo-items slot="todo-items" v-for="item in todoItems" v-bind:item="item"></todo-items>
    </todo>
</div>

<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script>
<script>
    // Vue.component("todo",{
    //     template: "<div>"+
    //         "<slot></slot>" +
    //         "<ul>" +
    //         "<slot></slot>"+
    //         "</ul>"+
    //         "</div>"
    // });
    Vue.component("todo",{   //反斜杠实现换行,slot插槽
        template: "<div>\
            <slot name='todo-title'></slot>\
            <ul>\
            <slot name='todo-items'></slot>\
            </ul>\
            </div>"
    });

    Vue.component("todo-title",{    //将数据填充到第一个组件
        props:["title"],   // 接收参数
        template: "<p>{{title}}</p>"
    });

    Vue.component("todo-items",{
        props:["item"],
        template:"<li>{{item}}</li>"
    });

    var  vm=new Vue({
        el:"#app",
        data:{
            title:"列表",
            todoItems:["C","java","Python"]
        }
    });
</script>
</body>
</html>

image


自定义事件分发

组件中也可以定义方法实现参数传递和事件分发: this.$emit('自定义事件名',参数)


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div id="app">
    <todo>
      <todo-title slot="todo-title" v-bind:title="title"></todo-title>   <!--  v-bind简写为一个冒号:-->
        <todo-items slot="todo-items" v-for="(item,index) in todoItems"
                    v-bind:item="item" v-bind:index="index" v-on:remove="removeItems(index)"></todo-items>
    </todo>
</div>

<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script>
<script>
    // Vue.component("todo",{
    //     template: "<div>"+
    //         "<slot></slot>" +
    //         "<ul>" +
    //         "<slot></slot>"+
    //         "</ul>"+
    //         "</div>"
    // });
    Vue.component("todo",{   //反斜杠实现换行
        template: "<div>\
            <slot name='todo-title'></slot>\
            <ul>\
            <slot name='todo-items'></slot>\
            </ul>\
            </div>"
    });

    Vue.component("todo-title",{    //将数据填充到第一个组件
        props:["title"],   // 接收参数
        template: "<p>{{title}}</p>"
    });

    Vue.component("todo-items",{
        props:["item","index"],
        template:"<li>{{index}}---{{item}}<button @click='remove'>删除</button></li>",     //@是事件的简写(v-on)
        methods:{   //只能绑定当前组件的方法
            remove: function (index) {
                this.$emit("remove",index);
            }
        }
    });

    var  vm=new Vue({
        el:"#app",
        data:{
            title:"列表",
            todoItems:["C","java","Python"]
        },
        methods: {
            removeItems:function (index) {
                this.todoItems.splice(index,1)  //一次删除一个元素
                console.log("删除了"+this.todoItems[index]+"ok")
            }
        }
    });
</script>
</body>
</html>

image

标签:slot,index,vue,自定义,title,component,Vue,template,todo
From: https://www.cnblogs.com/yuanyu610/p/17021229.html

相关文章

  • 2023.01.03 - vue项目开启https调试
    vue-cli3.x项目:使用vue脚手架3.x搭建的项目,配置开启https方法比较简单,在项目根目录下的vue.config.js文件中增加属性https:true即可。//vue.config.jsmodule.expor......
  • 前端二面vue面试题(边面边更)
    Vuex有哪几种属性?有五种,分别是State、Getter、Mutation、Action、Modulestate=>基本数据(数据源存放地)getters=>从基本数据派生出来的数据mutations=>提交......
  • 滴滴前端一面高频vue面试题及答案
    keep-alive使用场景和原理keep-alive是Vue内置的一个组件,可以实现组件缓存,当组件切换时不会对当前组件进行卸载。一般结合路由和动态组件一起使用,用于缓存组件......
  • vue组件通信6种方式总结(常问知识点)
    前言在Vue组件库开发过程中,Vue组件之间的通信一直是一个重要的话题,虽然官方推出的Vuex状态管理方案可以很好的解决组件之间的通信问题,但是在组件库内部使用Vuex往往会......
  • Vue3:子组件 watch 父组件传递的 props,watch 不触发,该如何通知子组件更新?
    问题阐述问题描述父组件传递给子组件props,由于父组件的业务需求,希望子组件通过watch监听props修改数据。父组件模板:<PaginationPageref="pagination"@fixed......
  • vuex报错 this.$store显示undefined
    报错:vuex报错this.$store显示undefined可能是版本问题或者store压根就没有注入到vue的原型上所以导致undefined。解决方案检查main.js中是否将store注入vue实例中,如果......
  • 使用lambda表达式实现sort的自定义排序
    使用lambda表达式实现sort的自定义排序(C++andJava)首先大致讲一下什么是lambda表达式你也可以将它就当做是匿名函数,lambda表达式其实就是匿名函数演化出的一种语法系统......
  • vue省市区级联
    省市区级联<!DOCTYPEhtml><html><head><metacharset="utf-8"><title></title><scriptsrc="js/vue.js"type="text/javascript"cha......
  • Vue-element-template项目学习笔记
    1.vue在css引入背景图片报错:Modulenotfound:Error:Can'tresolve'../../images/icons/loading2.gif'in'/home。报错信息就是找不到路径,我是这样的写法:backgroun......
  • vue2修改数组/对象的值后,页面视图不更新的解决方法
    1.对象刷新:通过使用vue.$set方法,实现动态添加/修改对象属性语法:vue.$set(对象名,键名,值)Vue.$set(this.postForm,'set_last_buyday','属性值')//第一种写法用vue.$sett......