码迷,mamicode.com
首页 > 其他好文 > 详细

自定义事件

时间:2020-12-01 11:52:00      阅读:4      评论:0      收藏:0      [点我收藏+]

标签:使用   NPU   index   return   prope   item   app   something   listener   

  1. 事件名字

    • 组件上使用camelCase 名字的事件无法被kebab-case监听

      this.$emit(‘myEvent‘);
      <!-- 没有效果 -->
      <my-component v-on:my-event="doSomething"></my-componet>
      
    • 始终使用 kebab-case 的事件名

      this.$emit(‘my-event‘);
      <my-component v-on:my-event="doSomething"></my-componet>
      
  2. 组件上使用v-model

    • 使用自定义事件和监听模拟

      <div id="app">
          <!-- 输入组件 -->
          <add-item @add-Item=‘add‘></add-item>
          <ul>
              <li v-for="(item, index) in items" :key="index">{{item}}</li>
          </ul>
      </div>
      <script>
          Vue.component(‘add-item‘, {
              data(){
                  return {
                      message: ‘‘,
                  }
              },
              template:`
                  <div>
                      <input type="text" v-model=‘message‘ placeholder="请输入">
                      <button @click=‘add‘>添加</button>
                  </div>
              `,
              methods:{
                  add(){
                      // 发送自定义事件通知父组件
                      this.$emit(‘add-item‘,this.message);
                      this.message = ‘‘;
                  }
              }
          })
          const app = new Vue({
              el:‘#app‘,
              data() {
                  return {
                      items:[‘HTML‘,‘JS‘,‘CSS‘]
                  }
              },
              methods: {
                  add(message){//接收到来自子组件的消息
                      this.items.push(message);
                  }
              }
          })
      </script>
      
    • 使用v-model形式

      <div id="app">
          <!-- 输入组件 -->
          <add-item v-model="message" @add-Item=‘add‘></add-item>
          <ul>
              <li v-for="(item, index) in items" :key="index">{{item}}</li>
          </ul>
      </div>
      <script>
          Vue.component(‘add-item‘, {
              props:[‘message‘],
              template:`
                  <div>
                      <input type="text" :value=‘message‘ @input=‘onInput‘ placeholder="请输入">
                      <button @click=‘add‘>添加</button>
                  </div>
              `,
              methods:{
                  add(){
                      // 发送自定义事件通知父组件
                      this.$emit(‘add-item‘);
                  },
                  onInput(e){
                      this.$emit(‘input‘,e.target.value)
                  }
              }
          })
          const app = new Vue({
              el:‘#app‘,
              model: {
                  //v-model默认转换是:value和@input
                  prop: ‘value‘,
                  event: ‘input‘
              },
              data() {
                  return {
                      items:[‘HTML‘,‘JS‘,‘CSS‘],
                      message:‘‘,
                  }
              },
              methods: {
                  add(message){//接收到来自子组件的消息
                      this.items.push(this.message);
                      this.message = ‘‘;
                  }
              }
          })
      </script>
      
  3. 组件绑定原生事件

    • 使用 v-on.native 修饰符

    • Vue 提供了一个 $listeners property,它是一个对象,里面包含了作用在这个组件上的所有监听器

  4. sync修饰符

    • update:myPropName 的模式触发事件

    • .sync修饰符的 v-bind 不能和表达式一起使用

自定义事件

标签:使用   NPU   index   return   prope   item   app   something   listener   

原文地址:https://www.cnblogs.com/EricZLin/p/14040103.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!