忍者ブログ

ひつ(じのひよこが)プログラミングします。
お仕事や趣味で困ったこととか、何度も「あれ?どうだったかしら」と調べたりしたこととか、作ったものとか、こどものこととかを書きます
★前は週末定期更新でしたが今は不定期更新です

2024/11    10« 1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  »12

Vue.js のカスタムイベントが上手くキャッチできない

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

コメント

ただいまコメントを受けつけておりません。

Vue.js のカスタムイベントが上手くキャッチできない

どういう話

Vue.js でカスタムイベントを受け取るにはコンポーネントにイベントをバインドしなきゃいけなかった、という話。

上手くいかなかった例

<div id="list" v-on:item-clicked-event="apply">
  <p>{{ clickedTarget }}</p>
  <ul>
    <list-item v-for="targetItem in targetList" :target="targetItem" :key="targetItem.id"></list-item>
  </ul>
</div>
const list_item = Vue.component('list-item', {
  props: ['target'],
  template: `<li v-on:click="fireClickedEvent">{{target.text}}</li>`,
  methods: {
    fireClickedEvent: function(){  this.$emit('item-clicked-event', this.target.text);}
  }
});

const myList = new Vue({
  el: '#list',
  data: {
    clickedTarget: 'ひよこ',
    targetList: [
    	{id:0, text:'ひよこ'},
    	{id:1, text:'ひつじ'},
    	{id:2, text:'こねこ'}
    ]
  },
  methods: {
    apply: function(name) { this.clickedTarget = name; }
  }
});

上手くいった例

<div id="list">
  <p>{{ clickedTarget }}</p>
  <ul>
    <list-item v-on:item-clicked-event="apply" v-for="targetItem in targetList" :target="targetItem" :key="targetItem.id"></list-item>
  </ul>
</div>

JavaScript 側に変更はない。v-on:item-clicked-event="apply"がどこに書かれているのかに注目していただきたい。どこに v-on するのかって話はあまり見なかったけどこれは割と常識なのだろうか。でも、コンポーネントが発火したのだからコンポーネントに書いた方が分かりやすくはあるよね。

PR

コメント

ただいまコメントを受けつけておりません。

ブログ内検索

P R