2017-12-11 4 views
0

플래시 이벤트를 콘솔에서 방출하는 사용자 지정 구성 요소에서 수신 할 수 없습니다. 내가 함께 이벤트를 발사하고있는 크롬 콘솔구성 요소에서 이벤트를 수신하는 vuejs

/* file flash.vue */ 

<template> 
    <span :class="type" class="alert flash-alert" v-show="show"> 
    {{ body }} 
    </span> 
</template> 

<script> 
    export default { 
    props: ['type','message'], 
    data() { 
     return { 
      body: this.message, 
      show: false, 
     }; 
    }, 

    created() { 
     if(this.body) 
     { 
      this.showComp(); 
      this.hide(); 
     } 
    }, 

    methods: { 
     showComp: function(){ 
      this.show = true; 
     }, 

     hide: function() 
     { 
      var vm = this; 
      setTimeout(function() { 
       vm.show = false; 
      },2000); 
     }, 
    }, 

    events: { 
     flash: function(newMessage) { 
      this.body = newMessage; 
      this.showComp(); 
     }, 
    } 
} 

: 여기 내 구성 요소입니다 내가 VUE에 그것을 볼 수있는 이벤트가 발사됩니다

/* from console */ 
window.vueEventBus = new Vue(); 
window.vueEventBus.$emit('flash','my message'); 

탭을 DevTools로. 그러나 이벤트를 포착 할 때 구성 요소가 표시되어야합니다.

그러나 글로벌 이벤트 버스에서 청취자를 created() 메소드 내부에 피기 백하면 작동합니다.

created() { 
    window.vueMessageBus.$on('flash',newMessage => { 
     this.body = newMessage; 
     this.showComp(); 
    }); 
} 

내가 이벤트 리스너가 이벤트 내부의 구성 요소 자체의 속성을 등록하려면 어떻게해야합니까?

고마워요

, Yeasir

+1

같은 것은이 뷰 2 – Bert

+0

의'events' 속성으로 없다 그러나 vue1 하나가 있었다 권리? vue2를 사용하여 vue를 배우기 시작했으며, vue1의 예제를 사용하기 시작했습니다. parent 및 child 컴포넌트 모두에서 이벤트 객체를 보았을 것입니다. 대부분의 예제에서 –

답변

1

모습 하는 index.js (요소를 참조/eventBus/eventBus.vue)

Vue.prototype.$vueEventBus = new Vue() 

수신기에서 생성이 example

eventbus

created() { 
    this.$vueEventBus.$on('message-in', this.newMessage) 
}, 
beforeDestroy() { 
    this.$vueEventBus.$off('message-in') 
} 

방출 이벤트

methods: { 
    newMessage(something) { 
    this.$vueEventBus.$emit('message-in', something) 
    } 
} 

앱 페이지 (/ eventBus/childEventBus.vue구성 요소 참조) https://3xyx386q65.codesandbox.io/eventBus

+0

은 이벤트 리스너가 ** 생성 된 ** 후크 내부의 구성 요소에 첨부 된 것을 보았습니다. 특별한 이유가 있습니까? ** 장착 된 후크 안에서 그것을하고 싶다면? –

+0

예, created()를 mounted()로 바꾸면 작업이됩니다. 청취자를 삭제하는 것을 잊지 마십시오. 또한 vue 인스턴스 [Lifecycle Diagram] (https://vuejs.org/images/lifecycle.png) –

+0

을 참조하십시오. 확실하지 않지만 여기에서 공유 한 코드에 루프가있는 것 같습니다. ** message-in ** 이벤트가 발생하려면 __newMessgae__ 함수를 호출해야하며, 해당 이벤트는 ** message-in ** 이벤트에 따라 다릅니다. 권리? 어쨌든, 내 질문은 사실 vuejs2에서 vue 인스턴스에 ** 이벤트 ** 속성이 있는지 여부입니다. 이 예제를 이용해 주셔서 감사합니다 :) –

관련 문제