zoukankan      html  css  js  c++  java
  • vue.js学习笔记(3)— $emit 作用快速了解

    $emit 触发当前实例上的事件,也可以简单的理解为触发父组件上的事件(向上冒泡),实例(当前实例)如下:

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8">
            <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
            <title>session</title>
            <script src="https://unpkg.com/vue/dist/vue.js"></script>
            <style type="text/css">
                #session {
                    width: 600px;
                    margin: 0 auto;
                    text-align: center;
                }
            </style>
        </head>
        <body>
            <div id="counter-event-example">
              <button-counter v-on:increment="incrementTotal"></button-counter>
            </div>
            
            <script>
                Vue.component('button-counter', {
                  template: '<button v-on:click="incrementCounter">点我哒</button>',
                  methods: {
                    incrementCounter: function () {
                        alert("我是组件");
                          this.$emit('increment')
                    }
                  }
                })
                
                new Vue({
                  el: '#counter-event-example',
                  methods: {
                    incrementTotal: function () {
                        alert("我是当前实例");
                    }
                  }
                })
            </script>
        </body>
    </html>

    当点击“点我哒”的时候,会依次跳出下面两个 alert,根据前后跳出的顺序我们可以清楚的看到事件的前后触发顺序,如图:

    这样是不是就很清楚的理解 $emit 的作用了,:)

    其中,我们看Vue的官方文档的时候,会发现它是这样介绍的,如图下:

    从介绍当中我们可以看到,触发的方法要用字符串的方式来写(上面的例子就是这样的),另外,还提到它是可以向上传递参数的,好了,又一个例子来了,请接好:

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8">
            <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
            <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
            <title>playload</title>
            <script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script>
        </head>
        <body>
            <div id="message-event-example" class="demo">
                <p v-for="msg in messages">{{ msg }}</p>
                <button-message v-on:message="handleMessage"></button-message>
            </div>
            <script type="text/javascript">
                Vue.component('button-message', {
                    template: `<div>
                        <input type="text" v-model="message" />
                        <button v-on:click="handleSendMessage">Send</button>
                        </div>`,
                    data: function () {
                        return {
                          message: 'test message'
                        }
                    },
                    methods: {
                        handleSendMessage: function () {
                            this.$emit('message', { message: this.message })
                            //this.$emit('message', this.message)
                            //this.$emit('message', [this.message])
                        }
                      }
                })
                
                new Vue({
                    el: '#message-event-example',
                    data: {
                        messages: []
                    },
                    methods: {
                        handleMessage: function (payload) {
                            console.log(payload);
                              this.messages.push(payload.message)
                              //this.messages.push(payload.message)
                            //this.messages.push(payload[0])
                        }
                    }
                })
            </script>
        </body>
    </html>

    大家看到我的注释了,这其中呢,$emit 的传递的数据参数是可以定义不同的形式的,大家可以download下来,看一看不同的形式有什么具体的区别,挺有意思的。

  • 相关阅读:
    Java基础语法与变量初步学习
    Java基本数据类型转换
    Java变量常量与基本数据类型
    Java进制转换
    Java 开发环境配置
    Java运算符
    STL—vector删除重复元素
    子窗口和父窗口重绘
    怎么判断文件是否被占用
    多线程的理解
  • 原文地址:https://www.cnblogs.com/zxn-9588/p/8969014.html
Copyright © 2011-2022 走看看