VUE JS это.$emit ('addEmoji', emoji.значение) не будет стрелять


VUE JS это.$emit ('addEmoji', emoji.значение) не будет стрелять

10.03.2020 10:14:22 Просмотров 62 Источник

Это мой компонент VUE JS, это та часть чата, над которой я работаю.
Все работает нормально, кроме this.$emit('addEmoji', emoji.value) в компоненте, он не срабатывает на родительский input v-on:addEmoji="addEmo($event)".

Я понятия не имею, в чем проблема. Это мой код от компонента...

<template>
  <v-container fluid style="padding: 0;">
    <v-row no-gutters>
      <v-col sm="10" style="position: relative;">
    <v-spacer></v-spacer>
      <v-btn rounded dark color="primary" @click.prevent="logOff(); signOut();">signOut</v-btn>
        <div class="chat-container" v-chat-scroll ref="chatContainer" >
          <messages :messages="messages" :typing="typing" ></messages>
        </div>
    <div>
       <users :activeUsers="activeUsers"></users>
    </div>
     <emoji-picker :show="emojiPanel" @close="toggleEmojiPanel" @click="addEmojiToMessage"></emoji-picker>
        <div class="typer">
    <input ref="text" type="text" :value="message" placeholder="Type here..." @keyup="setMessage($event.target.value);isTyping($event);" @keyup.enter="sendMessage($event)" v-on:addEmoji="addEmo($event)"></input>
      <v-btn icon class="blue--text emoji-panel" @click="toggleEmojiPanel">
            <v-icon>mdi-emoticon-outline</v-icon>
          </v-btn>
        </div>
      </v-col>
    </v-row>
  </v-container>
</template>

<script>
import Users from './parts/Users.vue'
import Messages from './parts/Messages.vue';
import EmojiPicker from './parts/EmojiPicker.vue';
import { loginHook } from './hooks/postHook.js'; 

export default {
  name: 'postComponent',
  data () {
    return {
      emojiPanel: false,
    }
  },
  methods:{
    addEmo:function(e){
      console.log("event has happened",e);
    },
    signOut(){
      this.$router.push('/');
    },
    addEmojiToMessage (emoji) {
      var input = this.$refs.text
      console.log(emoji.value) 
      this.$emit('addEmoji', emoji.value)
    },
    toggleEmojiPanel () {
      this.emojiPanel = !this.emojiPanel
    }
  },
  components: {
    'messages': Messages,
    'users': Users,
    'emoji-picker': EmojiPicker,     
  },
  hooks(){
    return loginHook(localStorage.getItem('userName'))
  }  
};
</script> 
У вопроса есть решение - Посмотреть?

Ответы - VUE JS это.$emit ('addEmoji', emoji.значение) не будет стрелять / VUE JS this.$emit('addEmoji', emoji.value) won't fire

Sovalina

10.03.2020 10:38:18

Как рекомендовано в документации:

Имена атрибутов HTML не зависят от регистра, поэтому браузеры будут интерпретировать их любые прописные символы, как и строчные. Это означает, когда вы используете in-DOM шаблоны, camelCased prop имена должны использовать их kebab-cased (через дефис) эквиваленты

Вам просто нужно изменить свое название события addEmoji на add-emoji.
Вот вам упрощенный пример:

Vue.component('post-component', {
  template: '#child',
  methods: {
    addEmojiToMessage () {
      this.$emit('add-emoji', 'emoji value from post component')
    }
  }
})

new Vue({
  el: "#app",
  data () {
    return {
      value: 'No value yet'
    }
  },
  methods: {
    addEmo (event) {
      this.value = event
    }
  }
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
  {{ value }}
  <post-component v-on:add-emoji="addEmo"></post-component>
</div>

<template id="child">
  <div>
    <button @click="addEmojiToMessage">click to send event</button>
  </div>
</template>

Помочь в развитии проекта:
Закрыть X