zoukankan      html  css  js  c++  java
  • Vue基础:插槽(slot),自定义事件内容分发($emit('事件名',参数);

    一,slot(插槽)

      通俗的说:就是组件嵌套组件,被嵌套的组件插到相应的插座上

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <div id="app">
        <todo>
            <!--v-bind可缩写成:-->
            <!--模板套模板-->
            <!--slot(插头),插入相同名的插座(template的name)-->
            <todo-title slot="todo-title" v-bind:title="title"></todo-title>
            <todo-item slot="todo-item" v-for="item in items" :item="item"></todo-item>
        </todo>
    
    </div>
    
    
    
    <script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js"></script>
    <script>
    
        Vue.component("todo",{
            <!--此处的name作用(可以看作是定义了一个插座),只有相同名的(slot)才能插入-->
            template:'<div>' +
                '<slot name="todo-title"></slot>' +
                '<ul>' +
                '<slot name="todo-item"></slot>' +
                '</ul>' +
                '</div>'
        })
    
        Vue.component("todo-title",{
            props:['title'],
            template: '<div>{{title}}</div>'
    
        })
    
        Vue.component("todo-item",{
            props: ['item'],
            template:'<li>{{item}}</li>'
        })
    
    
        var vm = new Vue({
            el:"#app",
            data:{
                title:"king,国王",
                items:["java","linux","c++","python"]
            }
        });
    
    </script>
    <!--小结:模板套模板,插头插插座-->
    </body>
    </html>

    小结:组件嵌套组件,插头(子组件)插插座(父组件的允许你插的地方)

    二,自定义事件内容分发

      

     描述:首先,要知道Vue对象和组件两者是平行的关系,并不能直接的互相调用,需要第三方做桥梁(前端)

       前组件和vue对象协同的去处理

    小demo

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <div id="app">
        <todo>
            <!--v-bind可缩写成:-->
            <!--模板套模板-->
            <!--slot(插头),插入相同名的插座(template的name)-->
            <todo-title slot="todo-title" v-bind:title="title"></todo-title>
            <todo-item slot="todo-item" v-for="(item,index) in items"
                       :item="item" :index="index" v-on:remove="removeItems(index)"></todo-item>
        </todo>
    
    </div>
    
    
    
    <script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js"></script>
    <script>
    
        Vue.component("todo",{
            <!--此处的name作用(可以看作是定义了一个插座),只有相同名的(slot)才能插入-->
            template:'<div>' +
                '<slot name="todo-title"></slot>' +
                '<ul>' +
                '<slot name="todo-item"></slot>' +
                '</ul>' +
                '</div>'
        })
    
        Vue.component("todo-title",{
            props:['title'],
            template: '<div>{{title}}</div>'
    
        })
    
        Vue.component("todo-item",{
            props: ['item','index'],
            <!--@click是v-on的简写-->
            template:'<li>{{index}}->{{item}}<button @click="remove">删除</button></li>',
            methods:{
                remove:function (index){
                    this.$emit('remove',index);
                }
            }
        })
        
    
        var vm = new Vue({
            el:"#app",
            data:{
                title:"king,国王",
                items:["java","linux","c++","python"]
            },
            methods: {
                removeItems:function (index){
                    this.items.splice(index,1);//一次删除一个元素
                }
            }
        });
    
    </script>
    
    </body>
    </html>
  • 相关阅读:
    myeclipse的software updates菜单报配置错误的解决办法
    打造自己公司的myeclipse 笔记
    基于Spring可扩展Schema提供自定义配置支持(spring配置文件中 配置标签支持)
    帝国CMS 列表模版显示新闻正文
    IE、Firefox兼容form target当前页iframe,javascript动态创建表单对象form设置name属性
    oracle 创建表用户/空间/临时表空间设置用户默认表空间 为用户授权操作实例
    ORACLE 启动问题 LRM00109
    帝国CMS灵动标签e:loop的使用
    php5 配置pdo 查看PHP5扩展目录
    java 获取当前路径的三种方式。实测
  • 原文地址:https://www.cnblogs.com/CL-King/p/14015310.html
Copyright © 2011-2022 走看看