在vue中使用参数发出事件

时间:2018-12-12 08:30:29

标签: javascript vue.js components

我正在尝试使用类似的参数发出函数。

template: `
    <div class="searchDropDown">
    <div class="dropdown is-active">
    <div class="dropdown-trigger">
      <button class="button" aria-haspopup="true" aria-controls="dropdown-menu">
        <span>{{selectedItem}}</span>
      </button>
    </div>
    <div class="dropdown-menu" id="dropdown-menu" role="menu">
      <div class="dropdown-content">
        <a class="dropdown-item" v-for="item in drop" @click="$emit('select-menu-item($event)')">
          {{item.name}}
        </a>
      </div>
    </div>
  </div>
    </div>
  `

这是我正在尝试将项目传递给像参数一样的方法。

这是我尝试发出功能的组件:

<search-component v-bind="searchProps" @select-menu-item="selectedITem($event)"></search-component>

这是我的方法:

selectedITem(arg1) {
      console.log("cl")
      console.log(arg1)
    }

如果我不尝试传递参数,则一切正常,因此我的方法 selectedITem 有效。当我尝试像这样传递参数时,什么也没有发生,并且我没有收到任何错误。

2 个答案:

答案 0 :(得分:7)

@OneToMany中的以下参数是您发出的函数中的参数。

$emit()

以及您的组件方法中。

$emit('select-menu-item', $event, 1, 2, 3, 4, "cupcakes")

并在您的实际组件标记中。您不需要添加参数。只需编写对该方法的引用

selectMenuItem: function(evt, num1, num2, num3, num4, food){

}

示例

<search-component v-bind="searchProps" @select-menu-item="selectMenuItem">
window.onload = function(){
 const component = function() {
    return {
       template: `
       <div>
         <button @click="$emit('click-me', 'foobar')">
            Click Me
         </button>
       </div>
       `,
       props: ["data"]
    }
 }

 new Vue({
       el: container,
       data: {},
       components: { "my-component": component(), },
       methods: {
          clickMe: function(str){
            console.log(str);
          }
       }
    });
}

答案 1 :(得分:3)

只需添加来自@Albana Clara的更多答案即可。

您可以合并参数以及传递的事件。

示例:

<search-component v-bind="searchProps" @select-menu-item="selectMenuItem('test', ...arguments)">
selectMenuItem: function(a, b) {
  console.log(a + " " + b);
  // test foobar
}