VueJS发射到VueJS之外的函数

时间:2017-05-03 08:44:00

标签: javascript vue.js

我试图从我的VueJS组件中向位于包含该组件的html页面中的函数发出一些东西。我错过了什么,或者这是不可能的?

在我的组件中作为方法:

insert: function(){
    this.$emit('insertItem', 123);
}

在包含组件的页面中:

<medialibrary @insertItem="insertItem(arg);"></medialibrary>


<script>
    function insertItem(arg){
        console.log('insertItem');
        console.log(arg);
    }
</script>

1 个答案:

答案 0 :(得分:3)

这实际上比初看起来更有可能。如果函数是全局的(特别是对于父Vue可见),即使它不是Vue的方法,也可以由Vue调用它。 (创建一个调用全局函数的方法可能是个更好的主意。)

你的代码的主要困难是camelCasing它应该是kebab-case。

如果您希望insertItemarg获取$emit,则HTML应仅提供函数名称,而Vue将负责传递参数:

<medialibrary id="app" @insert-item="insertItem"></medialibrary>

我的代码段使用原始代码,该代码提供来自父Vue的arg。

function insertItem(arg) {
  console.log('insertItem');
  console.log(arg);
}

new Vue({
  el: '#app',
  data: {
    arg: 'hi there'
  },
  components: {
    medialibrary: {
      template: '<div><button @click="insert">Insert</button></div>',
      methods: {
        insert() {
          console.log("Emit");
          this.$emit('insert-item', 123);
        }
      }
    }
  }
});
<script src="//cdnjs.cloudflare.com/ajax/libs/vue/2.3.2/vue.min.js"></script>
<medialibrary id="app" @insert-item="insertItem(arg);"></medialibrary>