普通はこんなことしないと思うのですが、
<button id="app">{{ name }}</button>
document.getElementById('app').addEventListener('click', () => { console.log('click!'); }); const vue = new Vue({ el: '#app', data: { name: 'vue' } });
という感じで、イベントを振ったDOMを引数にしてVueのインスタンスを生成すると、DOMに振ってあったイベントは消えます。
Vueの仕組みを考えると当たり前といえば当たり前です。
まあ、普通に@clickをつかってVue側で設定すれば良いのですが、のっぴきならない事情でそうもいかない時があるかもしれません。僕はありました。
そんな、のっぴきならない場合は、直接イベントを貼らずにdelegateのような処理を書きましょう。
document.addEventListener('click', (evt) => { if (evt.target.id === 'app') { console.log('click!'); } }); const vue = new Vue({ el: '#app', data: { name: 'vue' } });
こんな感じであれば、イベントはdocumentに貼っているので消えません。
ただ、上記の例だと子要素からの伝播に対応できないので、delegateを使うのが良いと思います。
こちらからは以上です。