• vue不用脚手架2


    17.插槽与自定义事件(插槽是为了确定组件摆放的位置)

    1.新建一个项目文件夹“插槽”
    2.在“插槽"文件夹下创建index.html
    3.index.html内容:
    
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <!-- 开发环境版本,包含了有帮助的命令行警告 -->
        <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script><!--引入vue.js-->
        <title>Vue插槽</title>
    </head>
    <body>
        <!--MVVM中,view层只能通过viewmodel来对接model,即只能展示viewmodel中的内容,不能直接展示model中的内容-->
        <!--view展示层-->
        <div id="app">
            <!--显示data中的数据-->
            <!--使用组件todo-->
            <todo>
                <!--使用todo-title组件,-->
                <!--todo组件中使用slot(插槽),插入组件todo-title-->
                <!--使用v-bind,将data中title变量值传入到组件todo-title中-->
                <todo-title slot="todo-title" v-bind:title="title"></todo-title>
                <!--先使用v-for,遍历leixinglist的内容,给leixingone,在通过v-bind将leixingone赋值给contentone,进而传入到插件todo-contentone的变量contentone中使用-->
                <todo-contentone slot="todo-contentone" v-for="leixingone in leixinglist" v-bind:contentone="leixingone"></todo-contentone>
            </todo>
    
        </div>
    
        <div><slot name="todo-title"></slot><ul><slot name="todo-todo-contentone"></slot></ul></div>
    
        <!--viewmodel脚本控制层-->
        <script>
            //定义一个组件
            //第一个参数为组件的名字
            //第二个参数为组件的内容
            //第二个参数中的template,为html显示层的模板
            //定义待办事项组件
            Vue.component("todo",{
                template:'<div><slot name="todo-title"></slot><ul><slot name="todo-contentone"></slot></ul></div>'   //模板中使用了插槽slot
            })
    
            //定义待办事项标题组件
            Vue.component("todo-title",{
                props:["title"],   //组件中传入的变量不能被template中的内容直接使用,需要用props来获取变量,然后再在template中使用
                template:' <div>{{title}}</div>'   //模板中使用组件中传入的zujianleixingone的变量参数
            })
    
            //定义待办事项内容组件
            Vue.component("todo-contentone",{
                props:["contentone"],   //组件中传入的变量不能被template中的内容直接使用,需要用props来获取变量,然后再在template中使用
                template:' <li>{{contentone}}</li>'   //模板中使用组件中传入的zujianleixingone的变量参数
            })
    
    
            //Vue(),就是viewModel层的内容
            var app = new Vue({
                el: '#app', //el为element的缩写,挂载元素
                data: {  //这个data,就是model层,即数据内容
                    title:"分类",
                    leixinglist:["美女","帅哥","萝莉","御姐"]
    
                }
            })
        </script>
    </body>
    </html>

    18.自定义事件

    1.在子组件中定义一个事件remove
    2.这个事件会通过this.$emit("remove1"),调用一个自定义事件"remove1"
    3.这个自定义事件会调用函数removeone(index),需要传入index
    4.可以通过 v-for="(leixingone,index) in leixinglist"来获取index
    5.在使用index前,要先用v-bind:index="index" 来绑定一个index变量
    6.点击子组件的按钮,完成删除父组件中的内容
    
    index.html代码:
    
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <!-- 开发环境版本,包含了有帮助的命令行警告 -->
        <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script><!--引入vue.js-->
        <title>Vue插槽</title>
    </head>
    <body>
        <!--MVVM中,view层只能通过viewmodel来对接model,即只能展示viewmodel中的内容,不能直接展示model中的内容-->
        <!--view展示层-->
        <div id="app">
            <!--显示data中的数据-->
            <!--使用组件todo-->
            <todo>
                <!--使用todo-title组件,-->
                <!--todo组件中使用slot(插槽),插入组件todo-title-->
                <!--使用v-bind,将data中title变量值传入到组件todo-title中-->
                <todo-title slot="todo-title" v-bind:title="title"></todo-title>
                <!--先使用v-for,遍历leixinglist的内容,给leixingone,在通过v-bind将leixingone赋值给contentone,进而传入到插件todo-contentone的变量contentone中使用-->
                <!--5.此处自定义一个事件remove1,此事件为调用外部函数removeone-->
                <!--8.用v-for="(leixingone,index) in leixinglist",可以获取index-->
                <!--9.v-bind:index="index",将要使用的index进行绑定,才能使用-->
                <todo-contentone slot="todo-contentone" v-for="(leixingone,index) in leixinglist" v-bind:contentone="leixingone" v-bind:index="index" v-on:remove1="removeone(index)"></todo-contentone>
            </todo>
    
        </div>
    
    
        <!--viewmodel脚本控制层-->
        <script>
            //定义一个组件
            //第一个参数为组件的名字
            //第二个参数为组件的内容
            //第二个参数中的template,为html显示层的模板
            //定义代办事项组件
            Vue.component("todo",{
                template:'<div><slot name="todo-title"></slot><ul><slot name="todo-contentone"></slot></ul></div>'   //模板中使用了插槽slot
            })
    
            //定义代办事项标题组件
            Vue.component("todo-title",{
    
                props:["title"],   //组件中传入的变量不能被template中的内容直接使用,需要用props来获取变量,然后再在template中使用
                template:' <div>{{title}}</div>'   //模板中使用组件中传入的zujianleixingone的变量参数
            })
    
            //定义代办事项内容组件
            Vue.component("todo-contentone",{
                //10.props中也要添加"index"
                props:["contentone","index"],   //组件中传入的变量不能被template中的内容直接使用,需要用props来获取变量,然后再在template中使用
                //2-用v-on:click绑定一个点击事件
                //3-@click就等于v-on:click
                //11.{{index}},使用index
                template:' <li>{{index}}---{{contentone}}<button v-on:click="remove">删除1</button><button @click="remove">删除2</button></li>',   //模板中使用组件中传入的zujianleixingone的变量参数
                methods:{  //1-在组件中写一个方法
                    remove:function () {
                        // alert(1)
                        this.$emit("remove1")   //6.使用this.$emit绑定自定义事件remove1
                    }
                }
            })
    
    
            //Vue(),就是viewModel层的内容
            var app = new Vue({
                el: '#app', //el为element的缩写,挂载元素
                data: {  //这个data,就是model层,即数据内容
                    title:"分类",
                    leixinglist:["美女","帅哥","萝莉","御姐"]
                },
                methods: { //4-组件外定义一个事件
                    removeone:function (index) {
                        alert("hello")
                        //7.删除leixinglist中的数据
                        this.leixinglist.splice(index,1)   //splice第一个参数为要删除的index,第二个参数为0,表示不删除,为1,表示删除一个,为2表示删除两个...
                    }
                }
            })
        </script>
    </body>
    </html>

    19.vue-cli使用

  • 相关阅读:
    NOIP 2018 day1 题解
    公司管理与信息化基础成熟度模型
    信息化成熟度整体评估模型
    审计抽样
    正态分布
    函证决策
    SALESORDERINCOME.QVW
    ERP上线通用模板
    可转换债券分拆
    luogu 1373 小a和uim之大逃离 dp
  • 原文地址:https://www.cnblogs.com/jingzaixin/p/16462938.html
Copyright © 2020-2023  润新知